Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/295.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 从队列播放Pydub_Python_Audio_Audio Streaming_Playback_Pydub - Fatal编程技术网

Python 从队列播放Pydub

Python 从队列播放Pydub,python,audio,audio-streaming,playback,pydub,Python,Audio,Audio Streaming,Playback,Pydub,我正在为我的程序进行音频处理,需要实现一个简单的监视器播放 要进行“实时”处理,所有pydub.AudioSegments在发送到机器之前被切成20毫秒的块。 最后,将段发送到一个简单的deque,该段充满了20mspydub.AudioSegment,直到它有300ms的价值 @tasks.loop(秒=0.01) 异步def填充(自): 如果源为无: 打印(“否”) 返回 如果len(deque)

我正在为我的程序进行音频处理,需要实现一个简单的监视器播放

要进行“实时”处理,所有pydub.AudioSegments在发送到机器之前被切成20毫秒的块。 最后,将段发送到一个简单的
deque
,该段充满了20ms
pydub.AudioSegment
,直到它有300ms的价值

@tasks.loop(秒=0.01)
异步def填充(自):
如果源为无:
打印(“否”)
返回
如果len(deque)<尺寸:
尝试:
段=下一个(self.source.audio\u段\u生成器
deque.append(段)
除停止迭代外:
打印(“源耗尽”)
deque
被弹出到一个不和谐的机器人,它需要20毫秒的音频字节

一切工作完美无瑕,但我也需要一个简单的本地播放,如果需要可以播放音频直接到扬声器

大概是这样的: 还假设它在自己的线程上运行:

从pydub.playback导入播放
def play_from_deque(deque):
尽管如此:
如果正在播放监视器:
播放(deque.pop())
我编写了一个简单的快速测试,以了解在20ms段上重复调用
pydub.play()
是否有效:

mp3=请求。获取(“http://www.hochmuth.com/mp3/Haydn_Adagio.mp3")
段=音频段。来自文件(io.BytesIO(mp3.content),format='mp3')。设置帧速率(40800)
切片_段=段[::20]
对于切片_段中的切片:
播放(片段)
但音频变得非常不稳定,几乎无法辨认

谷歌搜索后,有人提到将sounddevice作为sd导入,但到目前为止,我还没能让它正常工作。 原始字节可以通过
段访问。原始数据
也可以通过字节播放音频


有什么建议或python库我应该研究吗?

我自己解决了,如果有人有类似的问题,下面是代码:

我让它与:

导入io
导入请求
导入pyaudio
从pydub导入音频段
mp3=请求。获取(“http://www.hochmuth.com/mp3/Haydn_Adagio.mp3")
段=音频段。来自文件(io.BytesIO(mp3.content),format='mp3')。设置帧速率(40800)
切片_段=段[::20]
p=pyaudio.pyaudio()
stream=p.open(format=p.get\u format\u from\u width(segment.sample\u width)),
通道=段。通道,
速率=段.帧\速率,
输出=真)
尽管如此:
尝试:
对于切片_段中的切片:
stream.write(slice.raw_数据)
最后:
stream.stop_stream()
stream.close()
p、 终止()

我自己解决了,如果有人有类似问题,下面是代码:

我让它与:

导入io
导入请求
导入pyaudio
从pydub导入音频段
mp3=请求。获取(“http://www.hochmuth.com/mp3/Haydn_Adagio.mp3")
段=音频段。来自文件(io.BytesIO(mp3.content),format='mp3')。设置帧速率(40800)
切片_段=段[::20]
p=pyaudio.pyaudio()
stream=p.open(format=p.get\u format\u from\u width(segment.sample\u width)),
通道=段。通道,
速率=段.帧\速率,
输出=真)
尽管如此:
尝试:
对于切片_段中的切片:
stream.write(slice.raw_数据)
最后:
stream.stop_stream()
stream.close()
p、 终止()