Wie kann ich Wave oder MP3-Dateien erzeugen



  • Hallo zusammen,
    ich bin blutiger Anfänger in Sachen Sound-Programmierung.
    Da ich mit dem Borland C++ Builder 5.0 ein kleines Programm zum Erstellen von simplen Wave oder besser MP3-Dateien schreiben möchte, benötige ich eine kleine Starthilfe. Es sollen einfach nur Töne verschiedener Tonhöhe (Frequenz) und Länge erzeugt und in eine Datei geschrieben werden.

    Ich würde mich über ein paar Tips freuen.

    Gruss,

    Terry



  • Hi,

    Upsss.. Du willst sie speichern. 🙂

    Das steht im Pezold drin.
    WAVE -> PCM-Format. Da kommt die unten beschriebene WAVEFORMATEX structur rein.
    Das MP3 Format kenne ich nicht.

    Sound ausgabe:
    Hab das mal mit der WinAPI Bibel Petzold gelöst (dank der Beispeile).
    Blicke leider in meinem Code nicht mehr durch.
    (Botschaftenverteilung etc. )

    Hier ein kleiner Überblick. müsst eigentlich alles stimmen 😉

    Strukturen:

    MMRESULT re;      //definierte Fehler-Rückgabe (muss mitausgewertet werden um Fehler sofort zu behandeln)
                      //im Notfall Ausgabegerät freigeben damit kein Absturz
    
    HWAVEOUT ho;      //welches Ausgabegerät... SOUNDKarte (normal WAVE_MAPPER).... s.->waveOutOpen unten
    
    WAVEFORMATEX w;   //Bitrate, Stereo/Mono, Sampelrate, usw.
                      //diese Struktur muss von Anfang an festgelegt werden
    
    WAVEHDR he;       //loop (Wiederholungen des Puffer), Name des Ausgabepuffer, Ausgabepuffer grösse, usw. 
                      //diese Struktur muss von Anfang an festgelegt werden
    

    Funktionen

    Die Reihenfolge müsste richtig sein, wenn alles ohne Fehler läuft.
    Es werden von den Funktionen selbst Botschaften verschickt, wenn fertig mit abspielen... usw. 
    Es fehelen einige, wie die Stop und Reapet-Funktion!!!
    
    //Wav-Gerät öffnen (Standart-Ausgabegerät-> WAVE_MAPPER)  ---> Ergebnis ist ho!!!
    re=waveOutOpen(&ho,WAVE_MAPPER,&w,dwCallback,0,CALLBACK_WINDOW);
    
    //Dem Ausgabegerät über he sagen wie Ausgabepuffer heist usw.
    re=waveOutPrepareHeader(ho,&he,sizeof(WAVEHDR));
    
    //he abspielen
    re=waveOutWrite(ho,&he,sizeof(WAVEHDR));
    
    //(Ausgabegerät freigeben) ho freigeben
    re=waveOutUnprepareHeader(ho,&he,sizeof(WAVEHDR)); 
    re=waveOutReset(ho);                               
    re=waveOutClose(ho);
    

    Botschaften

    MM_WOM_CLOSE
    MM_WOM_DONE
    MM_WOM_OPEN
    und noch einige mehr
    

    Es gibt bestimmt eine I-Seite.
    genügend Stichworte hast du jetzt ja. 🤡
    Wie gesagt blicke ich in meine Code nicht mehr ganz durch.
    Aber so in der Art läuft es ab.... 🙄

    Grüsse

    PS: hab gerade die Funktion gefunden die in den Ausgabepuffer eine Sinuswelle reinpackt.
    So wie die aussieht ist sie 1:1 vom Petzold raus.
    Die länge des Tons hängt von der länge des Ausgabepuffer ab.

    Das mit der MP3-Ausgabe stellst du dir zu einfach vor.
    In Wirklichkeit werden auch da Wav-Daten ausgegeban (PCM-Format).
    Ich könnte mir vorstellen das man mit der Lame.dll MP3-Dateien abspielen kann.
    Dies hab ich aber noch nicht probiert. Ob es vom Lame eine Dokumentation gibt weis ich nicht.
    Er gibt einem bestimmt Wav-Daten für den Ausgabepuffer zurück.
    Lame ist Freeware oder OpenSource.



  • Vielen Dank für deine Antwort.
    Den Petzold kannte ich nicht. Aber ich bekomme den demnächst mal ausgeliehen und dann werde ich dort mal ein wenig drinnen stöbern.
    Warscheinlich habe ich mir die ganze Sache wirklich etwas zu einfach vorgestellt.

    Nachdem ich mich ein wenig in das Thema eingelesen habe, werde ich mit Hilfe der von die geposteten Hilfe und Funktionen einen weiteren Anlauf nehmen.

    Nochmals vielen Dank.

    Gruß,

    Terry



  • Hi,

    hab noch was interessantes zu deiner Frage gefunden.
    http://de.wikipedia.org/wiki/Wav

    Ich hab mir den Pezold damals auch nur ausgeliehen.
    Es sind Beispiele drin wie man eine Wave-datei erzeugt ohne Soundkarte
    und mit Soundkarte.

    Grüsse

    *edit* ist ziemlich weit am Ende im Petzold.

    kannst gerne Fragen wenns Probleme gibt 👍


Anmelden zum Antworten