python - Sounddevice 的 wait() 方法不适用于短声音
问题描述
对于一个包括移动机器人手臂的项目,我需要一个类似“Geiger-Müller 计数器”的基于距离的警报。为此,我编写了一个 python 模块并尝试添加可能性,如果机器人手臂位于物体的左侧,则声音仅在左侧扬声器上,右侧模拟。为此,我查看了 sounddevice 库,其中可以进行简单的通道映射。从下面的代码片段 1 中可以看出,就像在文档中一样,我正在调用 sd.play() 并等待 sd.wait() 直到声音结束。
当我使用长度为 6 秒的样本声音时,一切正常。但是,如果我使用所需的声音,则发出短促的哔声(不到 1 秒),代码不起作用。脚本在约 1 秒后结束,没有任何声音。我可以通过添加睡眠语句(在代码中注释掉)来解决这个问题。
但是对于上下文,我需要一个小于 0.5 秒的播放窗口。有谁知道我该如何解决这个问题或解决这个问题?
我尝试改用 pyaudio,但无法将单声道 .wav 文件转换为立体声字节数组,以便在左/右扬声器上动态切换音频。(code-snippet2)但我总是遇到错误(“asscii 编解码器无法解码 pos 2 上的字节:序数不在范围内(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
解决方案
推荐阅读
- google-apps-script - Can we create a file in Google Drive using Google App Maker Application and Drive API before assigning permission to current user for that file?
- python - 当我尝试运行该程序时,我正在尝试构建一个简单的语音识别(语音到文本)python程序,它会抛出错误
- c# - 部署 Bot 服务 v4
- excel - 使用查找函数查找某个月份内的数字总和
- python - ValueError: Graph disconnected: cannot get value for tensor Tensor
- java - 该语句意味着 jvm 在公共类中查找主要方法是什么意思?
- python - Python:如果存在则如何更新行,否则在 CSV 文件中插入
- android - 无法从 ViewModel 观察 Livedata
- awk - 删除文件中的行,不包括 linux 中的匹配模式
- html - 单击时更改图标