PyAudio Ansprechende Aufnahme
Ich habe gesehen, das Aufnahme-tutorial auf der PyAudio website für die Aufnahme einer festen Länge der Aufnahme, aber ich Frage mich, wie ich das gleiche tun könnte mit einem nicht-festen Aufnahme? Bascially, ich will buttons erstellen, um zu starten und beenden Sie die Aufnahme, aber ich habe nicht gefunden was auf die Materie. Irgendwelche Ideen, und ich bin nicht auf der Suche für eine alternative Bibliothek?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Besten ist die Verwendung der nicht-blockierende Art und Weise der Aufzeichnung, d.h. Sie bieten eine callback-Funktion aufgerufen wird, von dem moment starten Sie den stream und wird immer wieder genannt wird für jeden block/- buffer, der wird solange bearbeitet, bis Sie stoppen den stream.
In dieser callback-Funktion, die Sie überprüfen, ob ein boolean zum Beispiel, und wenn es wahr ist, schreiben Sie die eingehenden Puffer zu einem datastructure, wenn es falsch ist, Sie ignorieren die eingehenden Puffers. Diese Boolesche kann eingestellt werden durch klicken eine Taste, zum Beispiel.
EDIT: schau dir das Beispiel von Draht-audio: http://people.csail.mit.edu/hubert/pyaudio/#wire-callback-example
Der stream wird geöffnet, mit dem argument,
Wo my_callback ist eine normale Funktion deklariert als
Diese Funktion wird jedesmal aufgerufen, wenn ein neuer Puffer verfügbar ist.
in_data
enthält die Eingabe, die Sie aufnehmen wollen. In diesem Beispielin_data
wird nur zurückgegeben, in einem Tupel zusammen mitpyaudio.paContinue
. Was bedeutet, dass der eingehende Puffer aus dem Eingabe-Gerät setzen/kopieren zurück in den Ausgabepuffer geschickt, die den Ausgang Gerät (es ist das gleiche Gerät, so dass Sie die eigentlich routing-Eingabe, Ausgabe aka-Draht). Finden Sie in der api-Dokumentation für ein bisschen mehr Erklärung: http://people.csail.mit.edu/hubert/pyaudio/docs/#pyaudio.PyAudio.openSo, in dieser Funktion können Sie etwas tun möchten (dies ist ein Auszug aus dem code, den ich geschrieben habe, ist nicht komplett: ich verwende einige Funktionen nicht dargestellt. Auch Spiele ich einen Sinus auf einem Kanal und Rauschen auf der anderen Seite in 24-bit-format.):
Können Sie dann festlegen
record_on
undplayback_on
zuTrue
oderFalse
aus einem anderen Teil Ihres Codes während der stream öffnen/ausführen, wodurch die Aufnahme und die Wiedergabe zu starten oder zu stoppen, unabhängig voneinander, ohne Sie zu unterbrechen stream.Ich kopiere die
in_data
in einem (threadsicher)queue
, die von einem anderen thread verwendet, um zu schreiben auf die Festplatte gibt, sonst wird die Warteschlange get big nach einer Weile.BTW: pyaudio basiert auf portaudio, die viel mehr Dokumentation und hilfreiche Tipps. Zum Beispiel (http://portaudio.com/docs/v19-doxydocs/writing_a_callback.html): die callback-Funktion zu beenden, bevor ein neuer Puffer vorgestellt, andere Puffer verloren. So schreiben in eine Datei innerhalb der callback-Funktion in der Regel nicht eine gute Idee. (obwohl das schreiben in eine Datei wird gepuffert und ich weiß nicht, ob es blockiert wird, wenn Ihre Festplatte geschrieben, irgendwann)
data
zurückgegeben wird?data
Puffer aufgenommen mit der audio-thread und (schließlich) weitergegeben, die die eigentliche audio-interface.