机器学习利用Python进行音频数据增强乐界资讯

作者:未知 来源:未知 浏览:
机器学习利用Python进行音频数据增强 数据增强通常用于机器学习和深度学习,以便在训练产生大量数据后获得良好的性能。 在这篇文章中,我将展示如何用一些音频增强技术使用输入音...

机器学习利用Python进行音频数据增强

数据增强通常用于机器学习和深度学习,以便在训练产生大量数据后获得良好的性能。
在这篇文章中,我将展示如何用一些音频增强技术使用输入音频文件生成新的音频文件。首先,我们首先导入依赖库,这些库在以下先决条件部分给出。为了在给定的音频文件上应用任何技术,我们需要阅读它。要读取输入音频文件,有一个用于音乐和音频分析的" LibROSA " python包。通过使用librosa,我们将读取输入音频文件并对其应用一些效果。然后,我们将保存新的音频文件作为输出,并显示输出声音的波形。
依赖库
NumPy
Matplotlib
LibROSA
在我们导入依赖库后,我们可以开始创建一个新的"AudioAugmentation"类。这个类的第一个方法是将一个参数作为"file_path"的"read_audio_file"方法。在librosa库的帮助下,给定"wav"文件可以加载如下。
import librosa
import numpy as np
import matplotlib.pyplot as plt
class AudioAugmentation:
def read_audio_file(self, file_path):
input_length = 16000
data = librosa.core.load(file_path)[0]
if len(data) > input_length:
data = data[:input_length]
else:
data = np.pad(data, (0, max(0, input_length - len(data))), "constant")
return data
对音频文件的影响
现在,我们编写了三种方法来对给定的音频文件应用新的效果。这些方法是"add_noise"、"shift"和"stretch"。在"add_noise"方法中,我们添加了由numpy库生成的随机噪声。在"shift"方法中,我们再次使用numpy库来转换给定的音频数据。最后,"stretch"方法应用于librosa效应的time_stretch。
接下来,您可以看到这三种方法的python实现。
def add_noise(self, data):
noise = np.random.randn(len(data))
data_noise = data + 0.005 * noise
return data_noise
def shift(self, data):
return np.roll(data, 1600)
def stretch(self, data, rate=1):
input_length = 16000
data = librosa.effects.time_stretch(data, rate)
if len(data) > input_length:
data = data[:input_length]
else:
data = np.pad(data, (0, max(0, input_length - len(data))), "constant")
return data
保存生成的音频文件
为了应用这些效果,我们可以生成新的音频文件。要将它们存储到下一个研究中使用的文件夹中,我们可以使用librosa的"write_wav"功能,如下所示。
def write_audio_file(self, file, data, sample_rate=16000):
librosa.output.write_wav(file, data, sample_rate)
现在,我们可以从"AudioAugmentation"类创建一个新实例并调用它的任何方法。(在读取输入声音之后,我们在其上施加了噪音。)
aa = AudioAugmentation()
# Read cat sound
data = aa.read_audio_file("data/cat.wav")
aa.plot_time_series(data)
# Adding noise to sound
data_noise = aa.add_noise(data)
绘制时间序列
要查看生成声音的波形,我们可以使用matplotlib库编写以下方法。
def plot_time_series(self, data):
fig = plt.figure(figsize=(14, 8))
plt.title('Raw wave ')
plt.ylabel('Amplitude')
plt.plot(np.linspace(0, 1, len(data)), data)
plt.show()
最后,我们可以调用这个" plot_time_series "方法来显示生成的声音文件的波形。在下面,对于每一个声音(生的猫的声音,和音效),都有一些带有原始波和振幅的波图。

###找了好久的文章,谢谢楼主,学习了啊

    分享到:



1