Hallo ihr lieben,
Nach einiger Zeit suchen mit Google leider erfolglos. Versuche ich nun über euch etwas herauszubekommen. Ich will ein Script schreiben in Python unter Windows das es mir ermöglicht sobald ins Microphone gesprochen wird eine Aufnahme zu starten und diese Datei anschliessend wiedergeben zu können ... das so als Grundsatz erst mal. Ich hab mir verschiedene Sachen angesehen wie Sox,Snack ect aber diese sind ein bisschen zu high lvl glaube ich da blick ich garnich durch.
Daher meine Frage mit was könnte ich da am besten arbeiten?
Liebe Grüße
Automatische Microphone Aufnahme und Ausgabe
Moin.
Lustigerweise hatte ich danach gestern gesucht und bin auf PyAudio gestoßen.
Ich hatte mir spaßeshalber einfach das record-Beispiel geschnappt und in der Aufnahmeschleife (die man prinzipiell ja auch zu einer Endlosschleife umbauen könnte) bei jedem Durchlauf das erste Wort (2 Bytes) über struct angeschaut. Sobald es einen Schwellenwert überstieg, habe ich mit der eigentlichen Aufnahme (sprich: frames.append(data) ) begonnen. Sicher alles andere als elegant, aber zumindest funktioniert's.
Umso gespannter bin ich jetzt natürlich, was die Python-Cracks zum besten geben.
Gruß,
Daniel
Lustigerweise hatte ich danach gestern gesucht und bin auf PyAudio gestoßen.
Ich hatte mir spaßeshalber einfach das record-Beispiel geschnappt und in der Aufnahmeschleife (die man prinzipiell ja auch zu einer Endlosschleife umbauen könnte) bei jedem Durchlauf das erste Wort (2 Bytes) über struct angeschaut. Sobald es einen Schwellenwert überstieg, habe ich mit der eigentlichen Aufnahme (sprich: frames.append(data) ) begonnen. Sicher alles andere als elegant, aber zumindest funktioniert's.
Umso gespannter bin ich jetzt natürlich, was die Python-Cracks zum besten geben.
Gruß,
Daniel
Das klingt aber super interessant acid. würdest du dich da mit mir austauschen? ich suche weitergehend eine möglichkeit 2 aufgenomme files miteinander zu vergleichen so das man auch den unterschied erkennt aber ich glaub das ist nur möglich wenn man die dateien auch frequenztechnisch einliest oder? der audiokram is mir etwas neu deswegen.
PS: Aber pyAudio hab ich mir angesehen und den record auch mal gestartet das passt eigentlich perfekt
PS: Aber pyAudio hab ich mir angesehen und den record auch mal gestartet das passt eigentlich perfekt
Hallo NicNac.
Mehr kann ich Dir leider nicht liefern und von Frequenzanalysen und ähnlichem habe ich überhaupt keine Ahnung.
Ich hatte nur die fixe Idee, meine Hausautomation eventuell auch mit einer Sprachsteuerung zu versehen, nachdem ich mit dem google-Voice-Server rumgespielt hatte und von der Erkennungsqualität positiv überrascht war.
Also brauchte ich irgendwoher Ton und probierte besagtes PyAudio aus. Da die Audiodaten aus 16 Bit pro sample bestehen, nahm ich einfach das Aufnahmebeispiel von der Webseite und fügte ein
hinzu - und siehe da: die Aufnahme beginnt tatsächlich erst, wenn ein lauteres Geräusch ertönt.
Wirklich nutzbar ist das so natürlich nicht, weil ich nur exemplarisch ein einziges Word aus einem Chunk herauspicke, aber mir ging's nur erst einmal um ein "Machbarkeitsexperiment" und ob die Daten so vorliegen, wie ich's erwartet habe.
Vielleicht stelle ich's mir zu einfach vor, aber eine kleine Routine, die exemplarisch jede Zehntelsekunde eine geringe Anzahl an Bits betrachtet und im Erfolgsfall (soll heißen Überschreiten eines vorher festgelegten Schwellenwertes) die Aufnahme beginnt und aus einem mitlaufenden Puffer noch eine halbe Sekunde vorher anfügt, sollte zumindest bei Sprachaufnahmen ausreichen - außer man Stottert ganz böse mit Lauten kürzer als 0,1 Sekunden.
Und von der Prozessorlast müßte das auch noch klappen. Man könnte natürlich jedes einzelne 16-Bit-Wort betrachten, aber dann ärgert man den PC vermutlich schon zu sehr, zumindest wenn man es mit einer Skriptsprache macht.
Achja, eine Endeerkennung täte natürlich auch noch Not, aber auch da würde ich's ganz banal mit einer Zählervariable lösen - wenn die letzten 100.000 frames nichts gekommen ist, hat's dem Sprecher wohl die Sprache verschlagen.
Gruß,
Daniel
Mehr kann ich Dir leider nicht liefern und von Frequenzanalysen und ähnlichem habe ich überhaupt keine Ahnung.
Ich hatte nur die fixe Idee, meine Hausautomation eventuell auch mit einer Sprachsteuerung zu versehen, nachdem ich mit dem google-Voice-Server rumgespielt hatte und von der Erkennungsqualität positiv überrascht war.
Also brauchte ich irgendwoher Ton und probierte besagtes PyAudio aus. Da die Audiodaten aus 16 Bit pro sample bestehen, nahm ich einfach das Aufnahmebeispiel von der Webseite und fügte ein
Code: Alles auswählen
if abs(struct.unpack('h', data[0]+data[1])[0]) > 1000:
start_recording = True
Wirklich nutzbar ist das so natürlich nicht, weil ich nur exemplarisch ein einziges Word aus einem Chunk herauspicke, aber mir ging's nur erst einmal um ein "Machbarkeitsexperiment" und ob die Daten so vorliegen, wie ich's erwartet habe.
Vielleicht stelle ich's mir zu einfach vor, aber eine kleine Routine, die exemplarisch jede Zehntelsekunde eine geringe Anzahl an Bits betrachtet und im Erfolgsfall (soll heißen Überschreiten eines vorher festgelegten Schwellenwertes) die Aufnahme beginnt und aus einem mitlaufenden Puffer noch eine halbe Sekunde vorher anfügt, sollte zumindest bei Sprachaufnahmen ausreichen - außer man Stottert ganz böse mit Lauten kürzer als 0,1 Sekunden.
Und von der Prozessorlast müßte das auch noch klappen. Man könnte natürlich jedes einzelne 16-Bit-Wort betrachten, aber dann ärgert man den PC vermutlich schon zu sehr, zumindest wenn man es mit einer Skriptsprache macht.
Achja, eine Endeerkennung täte natürlich auch noch Not, aber auch da würde ich's ganz banal mit einer Zählervariable lösen - wenn die letzten 100.000 frames nichts gekommen ist, hat's dem Sprecher wohl die Sprache verschlagen.
Gruß,
Daniel
Mit `numpy` sollte es auch möglich sein alle Samples zu verarbeiten ohne den PC zu sehr zu verärgern.