如何处理音频字节以从实时音频流中提取 MFCC?

Posted

技术标签:

【中文标题】如何处理音频字节以从实时音频流中提取 MFCC?【英文标题】:How to process audio bytes to extract MFCCs from a live audio stream? 【发布时间】:2021-09-18 16:06:08 【问题描述】:

我想从内置麦克风流式传输实时音频,并且使用 PyAudio 和 Sounddevice 成功地做到了这一点。这两种方法都很好,但主要问题是关于特征提取。

PyAudio

import pyaudio

FORMAT = pyaudio.paInt16
CHANNELS = 1
RATE = 44100
CHUNK = 1024

audio = pyaudio.PyAudio()
stream = audio.open(format=FORMAT,
                    channels=CHANNELS,
                    rate=RATE,
                    input=True,
                    output=True,
                    frames_per_buffer=CHUNK)
data = stream.read(CHUNK)

声音设备

import sounddevice as sd

fs=44100
duration=5

audio = sd.rec(duration*fs, samplerate=fs, channels=1, dtype='float64')
sd.wait()
print('audio recorded')

我想获取此实时音频数据流以提取 MFCC 功能,而无需将流写入波形文件并回读。如何将流数据转换为 MFCC 特征?

补充:我曾尝试使用 Librosa 库来获取带有 PyAudio 音频流的 mfcc,但得到一个错误:

while True:
    data = stream.read(CHUNK)
    data_int = np.frombuffer(data, dtype=np.int16)
    mfcc_y = librosa.feature.mfcc(data_int, sr=44100)
    librosa.display.specshow(mfcc_y, sr=44100)

我收到一个错误:ParameterError: Audio buffer is not finite everywhere

我希望获得一些关于如何转换音频字节以便能够执行任何特征提取的指导。

【问题讨论】:

您的问题是“如何从音频流中计算 MFCC 系数。”答案是(1)找到一个图书馆,看看它是否可以这样做,或者(2)自己做。 *** 不做库推荐,所以在您选择库之前,我们无法提供 1 方面的帮助。在 2 日,您似乎没有尝试过任何与 MFCC 相关的事情,所以我们仍然无法为您提供帮助。 @wnoise “在 2 日,您似乎还没有尝试过任何与 MFCC 相关的事情,所以再说一次,我们还不能帮助您。”这并不完全正确。我们可以回答每个主题问题。没有什么能阻止我们。这个问题可能仍然有点宽泛。 我尝试了多种方法,探索了不同的库并尝试了不同的方法。检查我之前关于同一主题的问题:***.com/questions/68279016/… 我确实尝试使用 Librosa 库计算 mfcc 并在那里添加了错误消息。但由于没有人回答或发表评论,因此发布了没有 librosa 详细信息的新问题,以扩大我对有用指导的希望。 【参考方案1】:
import sounddevice as sd
import librosa

fs = 44100
seconds = 10

myrecording = sd.rec(int(seconds * fs), samplerate=fs, channels=1)
sd.wait()
mfcc = librosa.feature.mfcc(y=myrecording.ravel(), sr=fs, n_mfcc=40)

我也有同样的问题,所以我得到了这个解决方案。

【讨论】:

您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center。

以上是关于如何处理音频字节以从实时音频流中提取 MFCC?的主要内容,如果未能解决你的问题,请参考以下文章

如何合并 MFCC

音频处理梅尔频率倒谱系数(MFCC)

使用 tarosdsp 提取多个音频特征

如何从实时流中播放音频

如何从麦克风实时获取原始音频帧或从 iOS 中保存的音频文件获取原始音频帧?

如何将提取的音高值保存在 csv 文件中?