我正在使用librosa,wave或soundfile库中的Python读取文件,并且需要将块(任何大小)推入HTTP流。根据规范,流字符串输入需要我将帧转换为RAW s16le格式。
我尝试了多种选择,包括:
soundarray,rate = librosa.load(pathToWavFile, dtype="<i2")
str = b''.join(soundarray)
但这只会创建一个空的音频流。我究竟做错了什么?
最佳答案
您可以尝试pydub将音频转换为音频段,将音频段拆分为可播放的块(即,您可以播放每个块),然后根据需要将它们转换为原始块。
这是一个快速代码。
from pydub import AudioSegment
from pydub.utils import make_chunks
myaudio = AudioSegment.from_file("myaudio.wav" , "wav")
chunk_length_ms = 1000 # pydub calculates in millisec
chunks = make_chunks(myaudio, chunk_length_ms) #Make chunks of one sec
#Convert chunks to raw audio data which you can then feed to HTTP stream
for i, chunk in enumerate(chunks):
raw_audio_data = chunk.raw_data
默认情况下,原始音频为16位
>>>
bytes_per_sample= 2 # 2 byte (16 bit) samples
由于
raw_audio_data
是原始数据,因此如果上述格式不起作用,则可以根据需要转换为任何其他格式。有关详细信息,请检查pydub utils api。