AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Projekte AudioMixRec: *.mid nach *.mp3 wandeln mit Delphi
Thema durchsuchen
Ansicht
Themen-Optionen

AudioMixRec: *.mid nach *.mp3 wandeln mit Delphi

Ein Thema von TOC · begonnen am 17. Mär 2006 · letzter Beitrag vom 24. Mär 2006
Antwort Antwort
Benutzerbild von TOC
TOC
Registriert seit: 5. Jan 2005
AudioMixRec V 0.8 Beta
================

Hi!

Ich hab da mal ein neues Programm für Euch gebastelt, aber Hallo, das hier ist eine Beta-Version die mit Sicherheit noch einige (teilweise bekannte, siehe unten) Fehler enthält.

Es geht bei dem Programm eigentlich darum verschiedene Medien-Formate ins *.wav- bzw *.mp3-Format umzuwandeln. Zum Beispiel eine Midi-Datei nach MP3. Das ganze Programm basiert auf einem recht einfachen Trick. Eine Musikdatei wird abgespielt und das ganze wird dann simultan mit einem Audiorekorder aufgenommen. Deswegen besteht das Programm aus einem Media-Player für die Wiedergabe, einem integriertem Audiorekorder für die Aufnahme und einer Mixereinheit zur Auswahl der Kanäle und Regelung der Lautstärke bzw. Aufnahmepegel.

Der integrierte MediaPlayer kann folgende Mediendateien abspielen

Tracker Module : *.mo3;*.it;*.xm;*.s3m;*.mtm;*.mod;*.umx; (Bass.dll)

Streams : *.mpa;*.mp3;*.mp2;*.mp1;*.ogg;*.wav; (Bass.dll)

CD-Audio : *.cda; (MCI)

Midi-Dateien : *.mid;*.rmi;*.midi; (MCI)

Video-Dateien : *.avi;*.mpg;*.mpe;*.mpeg; (MCI)


MIDI
====

Midi Dateien sind recht klein haben aber einen entscheidenen Nachteil: Sie klingen auf jeder Soundkarte und Midi-Gerät anders! Das liegt daran weil bei Midi zwar praktisch alles genormt ist, ausser dem Klang der Instrumente. Da nimmt jeder Hersteller seine eigenen Sounds. *.wav-Dateien sind dagegen im allgemeneinen recht gross. Wenn Du nun eine Midi-Datei hast und weitergeben möchtest, aber sicherstellen willst das sie auf allen Computern gleich klingt, dann kannst Du sie mit AudioMixRec in eine MP3-Datei umwandeln.
Klick dazu im Menu "Datei" auf "Mediendateien öffnen..." und lade eine Midi-Datei. Aktiviere nun in der Aufnahme-Steuerung den Synthesizer-Kanal, oder, wenn Du einen WaveTable-Synthesizer verwendenden willst, den Wave-Kanal. Drück nun auf "?" und mach eine Testaufnahme und regele den Aufnahme-Pegel so das nicht übersteuert wird. Aktiviere nun die Checkbox "*.mp3"-Ausgabe und drück auf "Aufnahme". Die Midi-Datei wird dann abgespielt, aufgenommen und danach als MP3 encodiert.


Karaoke
=======

Wenn Du ein Mikrofon an Deine Soundkarte anschliest kannst Du auch Karaoke-Aufnahmen machen. Lade Dazu ein MP3-Datei und aktiviere in der Aufnahme-Steuerung den Mikrofon- und den Wave-Kanal. Mach eine Testaufnahme (mit "?") und regele den Aufnahmepegel so das nicht übersteuert wird. Drück nun Rekord und singe zu dem Lied. Das ganze wird dann als *.wav- und/oder *.mp3-Datei abgespeichert!

Hinweis: Du solltest dazu Kopfhörer an Deine Lautsprecher anschliesen weil es sonst zu einer akustischen Rückkoplung kommen kann wenn das Mikrofon aktiviert ist!


Extrem lange Aufnahmen
======================

Normalerweise wird die Aufnahme komplett im Hauptspeicher des Rechners gepuffert und erst am Ende der Aufnahme auf Festplatte gespeichert. Wenn Du nun extrem lange Aufnahmen machen möchtest und der Speicher Deines Rechners dafür nicht ausreicht, dann aktiviere im Menü "Optionen" die Funktion "Während Aufnahme abspeichern". Dies bewirkt das nur 3 64-KB grosse Puffer verwendet werden und das jeder gefüllte Puffer während der Aufnahme auf Festplatte gespeichert und danach wieder freigegeben wird. Dies ist sinnvoll wenn Du zum Beispiel eine ganze Schallplatte oder Musik aus dem Radio oder TV aufnehmen willst.


Bekannte Fehler
===============

Einige Mixer verschiedener Soundkarten verwenden für die Aufnahmesteuerung eine Liste vom Typ CLASS_LIST + SUBCLASS_LIST_SINGLE, die meisten aber eine Liste vom Typ CLASS_LIST + SUBCLASS_LIST_MULTIPLE. Die MultipleLists bereiten keine Probleme, hier kann man alle Werte mit einem einzigen Zugriff lesen bzw. setzen. Leider habe ich noch nicht herausgefunden wie man ein Element einer SingleList ansteuern kann. Ich habe mehrere Artikel über AudioMixer gelesen und auch in der Win32Developer-Hilfe nachgesehen, aber nirgendwo ist das mit den Single-Listen erklärt.

Hier ein kleines Beispiel wie das mit der MultipleList geht. Der folgenden Prozedur muss man ein gültiges MixerHandle übergeben sowie die ControlId der Liste (ListId), die Nummer des Elements das man ändern möchte (ListIndex), die Anzahl der Elemente innerhal der Liste (ListCount) sowie ein Flag ob man das Element setzen oder löschen möchte:

Delphi-Quellcode:
Procedure SetListControl(Mixer,ListId,ListIndex,ListCount: Integer; Flag: Boolean);
Var
  MCD: TMixerControlDetails;
  MCDB: TMixerControlDetailsBoolean;
  MCDBP,P: PMixerControlDetailsBoolean;
Begin
  If (If Mixer<>0) and (ListId<>-1) and (ListIndex<>-1) then Begin
    // Speicher besorgen, es werden FListCount * Grösse
    // von der MixerControlDetailsBoolean Bytes besorgt
    GetMem(MCDBP,SizeOf(TMixerControlDetailsBoolean)*ListCount);
    Try
      // MixerControlDetails-Struktur ausfüllen
      With MCD do Begin
        // Grösse der Struktur
        cbStruct:=SizeOf(TMixerControlDetails);
        // ControlID der Liste setzen
        dwControlID:=ListID;
        // Anzahl der Kanäle setzen (Mono/Stereo)
        cChannels:=1;
        // Kein Fensterhandle
        hwndOwner:=0;
        // Anzahl der Elemente der Liste setzen
        cMultipleItems:=ListCount;
        // Grösse einer einzelenen MixerControlDetailsBoolean-Struktur setzen
        cbDetails:=SizeOf(TMixerControlDetailsBoolean);
        // Pointer auf´s Array mit den MixerControlDetailsBoolean-Strukturen setzen
        paDetails:=MCDBP;
      End;
      // Erstmal alle Elemente der Liste lesen
      MixerGetControlDetails(Mixer,@MCD,MIXER_GETCONTROLDETAILSF_VALUE);
      // Pointer auf Anfang des Arrays setzen
      P:=MCDBP;
      // Pointer weitersetzen auf das Element das geändert werden soll
      Inc(P,ListIndex);
      // Entsprechenden Wert im Array setzen bzw löschen
      If Flag
      Then P^.fValue:=0
      Else P^.fValue:=1;
      // Alle Elemente neu setzen
      MixerSetControlDetails(Mixer,@MCD,MIXER_SETCONTROLDETAILSF_VALUE);
    Except
      // Fehlermeldung
    End;
  End;
End;
Hilfe gesucht
=============

So weit so gut. Das klappt bei meiner Soundkarte (TerraTec 128i PCI) einwandfrei. Wenn Du weist wie man eine SingleList-ansteuert dann erklärs mir bitte am besten hier in diesem Thread damit ich das Programm entsprechend erweitern kann und damit es mit noch mehr Soundkarten funktioniert.


System-Registrierung
====================

Das Programm speichert in der Systemregistrierung unter dem Schlüssel "HKEY_CURRENT_USER/SoftWare/TocWare/AudioMixRec" einige Daten. Mit der Funktion "Optionen/Systemregistrierung aufheben..." kannst Du den gesamten Schlüssel aus der Systemregistrierung wieder entfernen.


Komponenten
===========

Das Programm verwendet einige meiner selbstgebastelten Komponenten die Du hier Meine (Toc´s) Komponenten als Paket findest. Wenn Du das Programm neu kompilieren möchtest must Du dieses Komponenten-Paket vorher in der Delphi-IDE installieren.


Delphi-Version
==============

Im Anhang findest Du zwei Versionen, eine für Delphi 3.0 Pro und eine für Delphi 7.0 Pe.
Es macht keinen rechten Sinn wenn ihr versucht das Programm in einer anderen Delphi-Version neu zu kompilieren, da die verschiedenen Delphi-Compiler nicht so ganz kompatibel sind.


Windows-Version
===============

Ich habe das Programm unter Windows 98 SE geschrieben und gründlich getestet. Es sollte also ab Windows 98 SE auch auf allen höheren Versionen laufen. Unter Windows 98 und 95 konnte ich es nicht testen, aber theoretisch sollte es funktionieren.


System-Voraussetzungen
======================

Pentium III MMX mit mind. 450 MHZ und 192 MB Ram.
Soundkarte mit Mixer erforderlich.


Lizenz
======

Das Programm ist, wie immer, OpenSource.
Ausserdem ist das Programm FreeWare und damit völlig kostenlos.


Grüsse von TOC!
Angehängte Dateien
Dateityp: zip audiomixrec_v_0.9_beta_delphi_7_249.zip (1,59 MB, 84x aufgerufen)
Dateityp: zip audiomixrec_v_0.9_beta_delphi_3_156.zip (1,53 MB, 42x aufgerufen)
"Wäre die Erde eine Bank, ihr hättet sie längst gerettet!"
(Zitat GreenPeace)
 
Benutzerbild von TOC
TOC

 
Delphi 7 Personal
 
#2
  Alt 24. Mär 2006, 17:04
Hi!

Hier kommt AudioMixRec V 0.9 Beta!

Es sollte jetzt auch mit Soundkarten funktionieren die für die Aufnahmesteuerung eine List vom Typ CLASS_LIST + SUBCLASS_LIST_SINGLE (Mux) verwenden. Ich hab´s hier im InterNet-Cafe mit einer RealTek AC97-SoundKarte getestet und es klappt.

Falls es mit Deiner Soundkarte trotzdem unerwartete Probleme geben sollte dann schick mir bitte ´ne genaue Fehlerbeschreibung. Geh dann auch mal ins Menü 'Fehlersuche/Audiogeräte auflisten...' und schick mir die Daten über Deine Soundkarte als PN im *.rtf-Format. Da es sehr viele verschiedene Soundkarten gibt ist es leider recht schwierig ein Programm zu schreiben das mit allen Karten funktioniert.

Grüsse von TOC!
Lars Uwe Hohmann
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:02 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz