带有librosa的音频缓冲区

问题描述:

在下面的代码中,我创建了一个缓冲区,每个循环迭代中保存10个音频文件的帧。带有librosa的音频缓冲区

import collections 
import librosa 
import wave 
my_buffer = collections.deque(maxlen=10) 
f = wave.open('Desktop/0963.wav',"rb") 
num_frames = f.getnframes() 
for frame in range(num_frames): 
    my_buffer.append(f.readframes(frame)) 

在缓冲区外,我需要用librosa得到一个代表每个采样点音频振幅的numpy数组。任何想法?

+0

使用'scipy.io.wavfile'添加答案。请检查并让我知道它是否适用于您。 –

如果使用scipy.io.wavfile,它将直接读取波形文件并将数据加载到numpy数组。你可以按照你的要求切片。

scipy.io.wavfile读取WAV文件,并从WAV文件返回采样速率(在采样/秒)和数据

>>> type(f) 
<type 'tuple'> 
>>> f 
(44100, array([-36, 57, 156, ..., 66, 64, 77], dtype=int16)) 
>>> 

源代码

from scipy.io.wavfile import read 
import numpy as np 
f = read('your_audio.wav') 
n = np.array(f[1],dtype=float) 
for i in xrange(0,len(n),10): 
    my_buffer = n[i:i+10] 

my_buffer内容:

>>> 
[ -36. 57. 156. 198. 191. 126. 70. 42. 43. 62.] 
[ 69. 71. 83. 117. 159. 177. 151. 89. 14. -27.] 
[ -33. -4. 21. 38. 42. 66. 94. 134. 144. 142.] 
[ 118. 115. 111. 132. 122. 123. 103. 119. 125. 134.] 
..... 
..... 

这里我们有my_buffer,每次迭代10帧,您可以将其馈入下一个块。