gpt4 book ai didi

python - 在不同长度的音频文件上使用 sklearn

转载 作者:行者123 更新时间:2023-12-04 03:14:39 25 4
gpt4 key购买 nike

我是 ML 的新手,想自己尝试一个项目来学习,所以请原谅任何明显的错误。我正在尝试在 python 中使用 audiolab 和 sklearn 对一些文件(铃声等)进行分类。

这是代码:

from scikits.audiolab.pysndfile.matapi import oggread, wavread

import numpy as np

from sklearn import svm

files = ["Basic_Bell.ogg", "Beep-Beep.ogg", "Beep_Once.ogg", "Calling_You.ogg", "Time_Up.ogg"]
labels = [2,1,1,2,2]
train = []

for f in files:
data, fs, enc = oggread("Tones/"+f)
train.append(data)

clf = svm.SVC()
clf.fit(train, labels)

我收到一条错误消息:
Traceback (most recent call last):
File "/home/athul/Projects/Audio Analysis/read.py", line 18, in <module>
clf.fit(train, labels)
File "/usr/local/lib/python2.7/dist-packages/sklearn/svm/base.py", line 150, in fit
X = check_array(X, accept_sparse='csr', dtype=np.float64, order='C')
File "/usr/local/lib/python2.7/dist-packages/sklearn/utils/validation.py", line 373, in check_array
array = np.array(array, dtype=dtype, order=order, copy=copy)
ValueError: setting an array element with a sequence.

在我(有限的)理解中,这似乎是个问题,因为火车数据具有不同的大小,因此 numpy 无法将其转换为矩阵,那么我该如何解决这个问题?我可以垫吗?如果是这样,我应该使用什么尺寸?或者这是我的错误?

最佳答案

In my (limited) understanding this seems to be issue because the traindata has different sizes and hence numpy can't convert it into amatrix,


没错,这正是问题所在。

so how do I fix this? Can I pad it? If so whats the size I should use?Or is this a mistake on my part?


我能想到的有两个选项,一个是使用支持不同大小矩阵的网络(选项 1)。另一种是用零填充。 (选项 2)。也可以使用其他方法(保持或不保持音高)更改音频的长度,但我没有在任何论文中找到任何应​​用程序,因此我不会将其作为选项发布。
选项1:使用可以处理不同大小的网络
通常,使用 Recurrent Neural Network (RNN) 因为它可以处理不同大小的音频。
选项 2:零填充/截断
老实说,我在这里找不到标准。您可以选择修复持续时间,然后:
  • 对于较短的音频:在音频的结尾和/或开头添加静音
  • 对于更长的音频:剪切它们
  • from pydub import AudioSegment

    audio = pydub.AudioSegment.silent(duration=duration_ms) # The length you want
    audio = audio.overlay(pydub.AudioSegment.from_wav(path))
    raw = audio.split_to_mono()[0].get_array_of_samples() # I only keep the left sound
    此类应用程序的一个示例可以是 UrbanSoundDataset .这是一个不同长度音频的数据集,因此任何使用它的论文(对于非 RNN 网络)都将被迫使用这种或另一种将声音转换为相同长度向量/矩阵的方法。我推荐论文 Deep Convolutional Neural Networks and Data Augmentation for Environmental Sound ClassificationENVIRONMENTAL SOUND CLASSIFICATION WITH CONVOLUTIONAL NEURAL NETWORKS .后者的代码是开源的,你可以看到它使用了我在函数 _load_audio 上解释(有点)的方法。在 this笔记本

    有点离题,但对于这类应用,强烈建议使用 梅尔光谱
    标准(据我所知)是使用 mel-spectrum对于此类应用。您可以使用 Python 库 Essentia并关注 this示例或像这样使用 librosa:
    y, sr = librosa.load('your-wav-file.wav')
    mel_spect = librosa.feature.melspectrogram(y=y, sr=sr, n_fft=2048, hop_length=1024)

    关于python - 在不同长度的音频文件上使用 sklearn,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42164538/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com