gpt4 book ai didi

python - 使用python从USB输入线程(麦克风)捕获一个音频样本

转载 作者:行者123 更新时间:2023-12-03 01:47:05 27 4
gpt4 key购买 nike

目前,我正在启动主程序,该程序控制何时启动扬声器和麦克风线程。从那里,我还可以控制设备(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()

最佳答案

此方法有效,但间歇性地出现上溢/下溢问题,但是一旦我将麦克风采样率设置为16kHz(而不是默认值),这些问题就消失了。我稍稍更改了代码,以便可以通过使用全局标志var随时从主程序中获取示例,而mic循环会检查该全局标志以了解是否应获取示例。

关于python - 使用python从USB输入线程(麦克风)捕获一个音频样本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42799451/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com