2016-08-09 15 views
0

Ich verwende PortAudio, um Mehrkanal-Audiodaten aufzuzeichnen. Ich möchte die Daten von jedem Kanal als separate Datei speichern. Daher muss ich irgendwo im Programm File IO arbeiten. Da das Dokument empfiehlt keine IO-Arbeit in der Callback-Funktion zu tun, da sie in einer hohen Frequenz aufgerufen werden.Wo soll ich Datei-IO-Auslastung in PortAudio durchführen, wenn nicht in den Callbacks

Dann, was ist der richtige Weg, um die IO-Arbeit durchzuführen? Soll ich einen anderen Thread starten?

Vielen Dank im Voraus für Ihre Zeit beim Lesen meiner Post! Diese

Antwort

0

ist, was ich tun würde:

1) für jeden Kanal einen Puffer haben. Diese Puffer sind Ihre Speicherpuffer und nicht diejenigen, die Sie im Rückruf haben. Ich würde vorschlagen, diese Puffer in Ihren paData Strukturen zu entlarven. Sie müssen die Pufferlänge entscheiden, je nachdem, wie viel Speicherplatz Sie haben oder welche Zeitbegrenzung Sie haben.

2) Wenn Sie die Aufzeichnung stoppen, rufen Sie eine Methode auf, mit der Ihre Datei funktioniert.

3) Verwenden Sie die Puffer aus Schritt 1 und schreiben Sie in die Datei.

4) Wiederholen Sie

+0

Danke für die Antwort. Ich habe etwas gefunden, das den gleichen Geist teilt wie du. Es gibt eine Datenstruktur namens RingBuffer, die das Schreiben und Lesen mit mehreren Threads parallel behandelt. In der Rückruffunktion sollte ich in den Ringpuffer schreiben, während ich einen separaten Thread benutze, um den Ringpuffer zu lesen und in eine Datei zu schreiben. – Foreverniu

+1

Ah ja! Ringpuffer sind der Weg zu gehen. Ich würde die zirkulären Puffer in Bulks lesen ... also wenn Sie 2048 Sample-Size-Array hätten, würde ich es alle 1024 Samples oder so lesen. So verschwenden Sie keine Zeit mit dem Lesen/Aufnehmen jeder Probe –