Audio im eigenen Programm mitschneiden

Hallo zusammen,

ich suche derzeit eine Lösung für eine Testanwendung in C/C++, mittels der ich Sound vom LineIn/Mikro aufnehmen kann. Inwieweit gibt es da schon fertige Bibliotheken und Funktionen, vllt auch ein wenig Bsp-Code?!?

Grüße und Danke

tobeit

Hallo tobeit,

Das passt wohl besser auf das C/C++ - Brett, aber egal:
sowas hier könnt Dich interessieren:
http://www.portaudio.com/

oder, noch besser JUCE; dafür braucht es aber das MS-Platform-SDK (290 MB downloaden):
http://www.rawmaterialsoftware.com/juce/api/index.html

Ferner hat der Petzold (5.Auflage) auch die ganzen Audio-Sachen drin:
http://www.amazon.de/Windows-Programmierung-Das-Entw…
Der hat auch den Code.

Tut’s das für’s erste?
lg
Martin B

Vielen herzlichen Dank, Martin.

Ich bin bei portaudio sofort fündig geworden und konnte nun so eine Funktion implementieren um vom Audioeingang mitzuschneiden! Fragt sich jetzt nur noch wie ich schaff den Dump im Wave-Format zu speichern, wobei ich noch mit dem Gedanken spiel es dabei zu belassen!

Grüße

Hallo Tobeit,

Vielen herzlichen Dank, Martin.

bitte gerne!

Fragt sich jetzt nur noch wie ich schaff den
Dump im Wave-Format zu speichern,

Da würde ich erst den Header zusammen stellen (Code siehe unten), den rein schreiben mit FILE-Zeiger, fopen() etc, dann die Daten, und paletti; findet man auf den C-Seiten. Der Code unten geht für Mono-Wavs, für Stereo mußt Du das noch basteln.

Naja, die Groesse der Daten (Anzahl Bytes) mußt Du summieren, dann das letzte Arg des Headers in der Datei überschreiben. Das Beispiel ist für SW-Synth, da weiß ich vorher schon, daß ich Speicher für „n Sekunden“ brauche.

lg
Martin B

//////////////////////////////////////////

 // "\*sound" kann auch offset haben...
void val2String(char \*sound, const ULONG uli, const int NUM\_BYTES=4)
 {
 int i;
 for (i=0; i\> (i\*8) ); // (int)
 //cout 

Hallo,

nun raw hab ich ja schon in ein File geschrieben und das bisschen Datei-Handling hab ich noch im Griff :smile:

Den Wave-Header denk ich soweit meiner Aufnahme angepasst zu haben …

// Groesse der Datei - 8
val2String(wavHeaderMono+4, sizze + 36);
// stereo
val2String(wavHeaderMono+22, 2, 1);
// bytes/second
val2String(wavHeaderMono+28, 176400);
// block align
val2String(wavHeaderMono+32, 4, 1);
// Groesse Datenfeld
val2String(wavHeaderMono+40, sizze);

wobei hier sizze die Größe des Daten-Feldes ist. Fragt sich nur noch wie ich mein raw entsprechend konvertieren muss, versteh ich richtig, dass ich dieses auch byte-swappen muss??

Grüße und nochmal Danke!!

tobeit