对于包含移动的机械臂的项目,我需要一个类似“Geiger-Müller计数器”的基于距离的警报。 为此,我编写了一个python模块并尝试添加这种可能性,如果机械臂位于对象的左侧,则声音仅位于左侧扬声器,右侧类似。 为此,我研究了声音设备库,可以在其中轻松进行通道映射。 如下面的代码片段1所示,就像在文档中一样,我正在调用sd.play()并等待sd.wait()直到声音结束。
当我使用长度为6秒的采样声音时,一切正常。但是,如果我使用所需的声音,则短促的哔声(不到1秒)将无法正常工作。脚本在〜1秒后结束,没有任何声音。 我可以通过添加一个睡眠语句(在代码中注释)来解决此问题。
但是对于上下文,我需要一个小于0.5秒的播放窗口。 有谁知道我该如何解决或解决这个问题?
我尝试改用pyaudio,但无法将单声道.wav文件转换为立体声字节数组,以便在左/右扬声器上动态切换音频。 (代码片段2) 但是我总是遇到一个错误(“ asscii编解码器无法在pos 2上解码字节:序数不在range(128)之内”)
片段1:
import sounddevice as sd
import soundfile as sf
data, fs = sf.read(args.filename, dtype='float32')
byte = np.array(data)
sd.play(byte, fs)
#time.sleep(0.5)
status = sd.wait()
摘要2:
data = wave.readframes(chunkSize)
stereo_signal = np.zeros([len(data), 2])
stereo_signal[:,0] = data[:]
stereo_signal[:,1] = 0