Python从缓冲区播放声音

时间:2019-10-25 04:09:09

标签: python sockets audio

我正在尝试使用socket制作简单的音乐流应用程序,以便客户端请求一首歌曲,然后服务器从文件中读取歌曲并将其部分发送给客户端以进行播放。我想要一种将零件放入缓冲区的方法,以便可以连续播放。我正在使用sounddevice库播放声音。问题是如果我一个接一个地演奏这些部件,它们听起来会坏。这是我的代码:

import socket
import soundfile as sf
import sounddevice as sd

data, samplerate = sf.read('audio.wav')

sd.play(data[:100000], samplerate)
sd.wait()
sd.play(data[100000:200000], samplerate)
sd.wait()

执行此操作的正确方法是什么?

1 个答案:

答案 0 :(得分:0)

使其成为多线程。

线程1将从文件/套接字读取数据并将其放入缓冲区。

线程2从缓冲区读取数据并将其播放到声音设备。

具有乒乓缓冲机制,因此两个线程都不会被阻塞。

示例:

https://embedded.fm/blog/2017/3/21/ping-pong-buffers

https://overlay.technology/ping-pong-buffer-to-embedded-systems/