ich habe ein Problem mit pyaudio! Ich würde gerne zwei Input-Streams aufmachen (einer als Feed für Anzeigen (z.B. Pegel) und ein weiterer für eine Aufnahmen). Mein GUI-Programm tut auch alles was ich möchte... auf OSX und Ubuntu! Leider ist das Zielbetriebssystem openSuSe wo dieses nicht geht! Hat jemand eine Idee wie ich das Problem beheben könnte???
Hier etwas Code um das Problem darzustellen:
Code: Alles auswählen
#!/usr/bin/env python
import pyaudio
import wave
import threading
import struct
class AudioBufferHandler(threading.Thread):
###################
#
def __init__(self):
threading.Thread.__init__(self)
self.chunk = 512
self.FORMAT = pyaudio.paInt16
self.CHANNELS = 1
self.RATE = 16000
self.keepGoing = True
####################
#
def run(self):
self.p = pyaudio.PyAudio()
self.stream = self.p.open(format = self.FORMAT,
channels = self.CHANNELS,
rate = self.RATE,
input = True,
frames_per_buffer = self.chunk)
self.dataBuffer = []
maxLen = self.RATE / self.chunk * 5
while self.keepGoing:
if len(self.dataBuffer)< maxLen:
data = self.stream.read(self.chunk)
self.dataBuffer.append(data)
else:
data = self.stream.read(self.chunk)
self.dataBuffer.append(data)
self.dataBuffer.pop(0)
self.stream.close()
self.p.terminate()
####################
#
def stop(self):
self.keepGoing = False
####################
#
def getLatest(self):
return struct.unpack("%dh"%(self.chunk), self.dataBuffer[-1])
def main():
AudioBuffer = AudioBufferHandler()
AudioBuffer.start()
chunk = 512
FORMAT = pyaudio.paInt16
CHANNELS = 1
RATE = 16000
RECORD_SECONDS = 5
p = pyaudio.PyAudio()
stream = p.open(format = FORMAT,
channels = CHANNELS,
rate = RATE,
input = True,
frames_per_buffer = chunk)
print "* recording"
all = []
for i in range(0, RATE / chunk * RECORD_SECONDS):
data = stream.read(chunk)
all.append(data)
print "* done recording"
stream.close()
p.terminate()
AudioBuffer.stop()
##########################
##########################
##########################
if __name__ == '__main__':
main()
vielen Dank schon mal!