Sounddevice的wait()方法不适用于短声音

时间:2019-07-17 14:12:42

标签: python pyaudio python-sounddevice

对于包含移动的机械臂的项目,我需要一个类似“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

0 个答案:

没有答案