В настоящее время я запускаю свою основную программу, которая контролирует, когда я запускаю потоки динамика и микрофона. Оттуда я также могу управлять отключением/включением звука на устройстве (USB-гарнитура) и т. д. Аудиопотоки находятся в отдельном файле в аудиоклассе.
Этот код работает. Прямо сейчас он захватывает аудиосэмпл с заранее заданным количеством циклов. Я бы предпочел брать образец звука всякий раз, когда он запрашивается из основной программы, но мне не удалось установить флаг и проверить его в потоке микрофона. Я бы получил ошибки pyaudio, такие как переполнение/недополнение.
Я был бы признателен, если бы кто-нибудь предложил метод захвата образцов аудиовхода (данные микрофона). Благодарность
def openTheMic(self, **kwargs):
# script can over-ride any value in the myAudio __init__
print ("***in openTheMic ***")
# picks up values passed by the test_script and maps them to myAudio class,
# otherwise will use defaults set in class
for (k,v) in kwargs.iteritems():
#print("k = %s, v = %s" % (k,v))
setattr(self, myAudio._map[k], v)
stream = self.p.open(
format = self.FORMAT,
channels = self.CHANNELS,
rate = self.RATE,
input = True,
output = True,
frames_per_buffer = self.CHUNK
)
setMicThreadStartTime(time.time())
print("time @ start of mic thread is: %s" % time.time())
starttime = time.time()
while myAudio.openTheMicThreadActive == True:
for i in range(0, 1200):
data = stream.read(self.CHUNK)
captureCount = 1000
if i == captureCount:
currentData = data
# abort the mic and spkr threads
myAudio.openTheMicThreadActive = False
myAudio.playDeadAirThreadActive = False
print("i is: %i: " % (i))
# set a global variable to get the data to the main program
setAudioData(currentData)
print("capture time: i = %s, time is %s " % (i, time.time()))
stream.stop_stream()
stream.close()
print ("***closed the stream in openTheMic *** and the time is: %s" % time.time())
self.p.terminate()