Push to talk

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
waki
User
Beiträge: 133
Registriert: Dienstag 9. März 2010, 16:41

Hey,
also ich würde gerne ein scipt schreiben, mit welchem ich push to talk betrieben kann, aber ich weiß nicht genau wie ich es umsetzten soll.

Code: Alles auswählen

import pyaudio
import sys

chunk = 1024
FORMAT = pyaudio.paInt16
CHANNELS = 1
RATE = 44100
RECORD_SECONDS = 5

p = pyaudio.PyAudio()

stream = p.open(format = FORMAT,
                channels = CHANNELS, 
                rate = RATE, 
                input = True,
                output = True,
                frames_per_buffer = chunk)

print "* recording"
for i in range(0, 44100 / chunk * RECORD_SECONDS):
    data = stream.read(chunk)
    stream.write(data, chunk)
print "* done"

stream.stop_stream()
stream.close()
p.terminate()
Diesen Code würde ich gerne umändern, dass nur etwas aufgenommen und wiedergegeben wird, wenn ich "a" drücke. Ich hab es schon versucht mit pyhook umzusetzten, indem ich jedesmal, wenn a gedrückt wird, etwas aus dem stream gelesen und reingeschrieben wird, aber dann hängt es stark und ich bekomme einen input overflow. weiß jemand eine bessere variante?

gruß
waki
User
Beiträge: 133
Registriert: Dienstag 9. März 2010, 16:41

keiner eine idee?
BlackJack

@waki: Also grunsätzlich musst Du einen Daten*strom* kontinuierlich lesen. Nur weil Du aufhörst zu lesen, hört der ja nicht auf Daten zu produzieren. Deswegen auch der Überlauf den Eingangspuffers. Also musst Du entweder lesen und die Daten einfach verwerfen wenn keine Taste gedrückt ist, oder Du darfst den Strom nur für die Dauer des Tastendrucks öffnen.
waki
User
Beiträge: 133
Registriert: Dienstag 9. März 2010, 16:41

ich verstehe was du meinst, aber weiß nciht wie ich es richtig umsetzten soll.

Das kontinuierlich lesen klingt gut, aber sobald ich stream.read() mache wird es ja wiedergegeben, wie soll ich es dann lesen lassen, ohne es wiederzugeben?

Und wie ich den strom nur für die dauer des tastendrucks zu öffnen weiß ich auch nicht wie ich es richtig machen soll.

Ich hab nur das:

Code: Alles auswählen

import pyaudio
import pythoncom, pyHook

BUFFER = 1024
FORMAT = pyaudio.paInt16
CHANNELS = 1
RATE = 44100

p = pyaudio.PyAudio()
stream = p.open(format = FORMAT,
                channels = CHANNELS,
                rate = RATE,
                input = True,
                output = True,
                frames_per_buffer = BUFFER)



def OnKeyboardEvent(event):
    event_a = chr(event.Ascii)
    if event_a == "a":
        record()
        
def record():
    data = stream.read(BUFFER)
    stream.write(data, BUFFER)

# create a hook manager
hm = pyHook.HookManager()
# watch for all mouse events
hm.KeyDown = OnKeyboardEvent
# set the hook
hm.HookKeyboard()
# wait forever
pythoncom.PumpMessages()
würd mich freuen wenn du mir erklären könntest, wie ich deine idee umsetzten könnte ^^
Antworten