python音频处理wavfile VS. librosa

数据读取

## 音频载入
import librosa
from scipy.io import wavfile

# wavfile
wav_file = 'demo.wav'
wf_sr, wf_audio = wavfile.read(wav_file)
# R1. wf_audio为未经归一化的原始音频采样点, 一般采用int16编码,即[-32768, 32767]

# librosa
# R1. 若sr不指定,则按照音频固有采样率读取;否则,则按照指定的采样率进行重采样读取;
# R2. lr_audio为归一化后的音频采样点;
lr_audio, lr_sr = librosa.load(wav_file, sr=None) 

重采样

import librosa
audio_file = 'demo.wav'
audio, ssr = librosa.load(audio_file, sr=None)
resampling_audio = librosa.resample(audio, orig_sr=ssr, target_sr=tsr)

梅尔谱

from scipy.io import wavfile
import librosa, python_speech_features

audio_file = 'demo.wav'  # default_sr = 16000
wf_sr, wf_audio = wavfile.read(audio_file)
# psf_mels.shape :: L x 13
# num_mels_per_second = np.ceil((1 - winlen) / winstep) + 1
# L = len(wf_audio) / wf_sr * num_mels_per_second
psf_mels = python_speech_features.mfcc(
                signal=wf_audio, samplerate=wf_sr, winlen=0.025, winstep=0.01, numcep=13)

lr_audio, lr_sr = librosa.load(audio_file, sr=None)
lrf_mels = librosa.feature.melspectrogram(
    y=lr_audio, 
    sr=lr_sr,
    n_fft=int(sampling_rate * mel_window_length / 1000),
    hop_length=int(sampling_rate * mel_window_step / 1000),
    n_mels=mel_n_channels)

# ramark
# R1. psf_mels 与 lfr_mels基本一致,但是暂无找到它俩的对应关系

1

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
音频数据增强是指通过一系列的技术手段,对原始音频数据进行处理,从而得到更多的音频数据,以达到提高模型性能的目的。下面介绍一些常见的音频数据增强方法及其Python实现。 1. 噪声添加 在训练模型时,我们经常会遇到噪声环境的情况,因此在数据增强中添加噪声是很有必要的。常见的噪声类型有高斯噪声、均匀噪声、白噪声等。 代码示例: ```python import numpy as np import scipy.io.wavfile as wavfile def add_noise(wav, noise_type='gaussian', snr=0.5): # 读取音频文件 sample_rate, signal = wavfile.read(wav) signal = signal / np.max(np.abs(signal)) # 归一化 noise = np.zeros_like(signal) if noise_type == 'gaussian': noise = np.random.normal(0, 1, len(signal)) elif noise_type == 'uniform': noise = np.random.uniform(-1, 1, len(signal)) elif noise_type == 'white': noise = np.random.randn(len(signal)) else: raise ValueError("Unsupported noise type!") noise = noise / np.max(np.abs(noise)) # 归一化 # 计算信噪比 signal_power = np.sum(signal ** 2) noise_power = np.sum(noise ** 2) if noise_power == 0: return signal k = signal_power / noise_power # 添加噪声 noisy_signal = signal + np.sqrt(k * (10 ** (-snr / 10))) * noise return noisy_signal # 示例 noisy_signal = add_noise('example.wav', noise_type='gaussian', snr=0.5) wavfile.write('example_noisy.wav', sample_rate, noisy_signal) ``` 2. 变速变调 变速变调可以增加数据样本的多样性,同时也可以避免过拟合。常见的变速变调方法有随机变速、随机变调等。 代码示例: ```python import librosa def pitch_shift(wav, shift_steps=2): # 读取音频文件 signal, sample_rate = librosa.load(wav, sr=None) # 随机变调 shifted_signal = librosa.effects.pitch_shift(signal, sr=sample_rate, n_steps=shift_steps) return shifted_signal def time_stretch(wav, rate=1.2): # 读取音频文件 signal, sample_rate = librosa.load(wav, sr=None) # 随机变速 stretched_signal = librosa.effects.time_stretch(signal, rate) return stretched_signal # 示例 shifted_signal = pitch_shift('example.wav', shift_steps=2) wavfile.write('example_shifted.wav', sample_rate, shifted_signal) stretched_signal = time_stretch('example.wav', rate=1.2) wavfile.write('example_stretched.wav', sample_rate, stretched_signal) ``` 3. 音量调整 音量调整可以增加数据的多样性,同时也可以避免过拟合。常见的音量调整方法有随机增益、随机削弱等。 代码示例: ```python def random_gain(wav, gain_range=(0.5, 1.5)): # 读取音频文件 signal, sample_rate = librosa.load(wav, sr=None) # 随机增益 gain = np.random.uniform(gain_range[0], gain_range[1]) gain_signal = signal * gain # 归一化 gain_signal = gain_signal / np.max(np.abs(gain_signal)) return gain_signal def random_cut(wav, cut_range=(0.5, 1.0)): # 读取音频文件 signal, sample_rate = librosa.load(wav, sr=None) # 随机削弱 cut = np.random.uniform(cut_range[0], cut_range[1]) cut_signal = signal * cut # 归一化 cut_signal = cut_signal / np.max(np.abs(cut_signal)) return cut_signal # 示例 gain_signal = random_gain('example.wav', gain_range=(0.5, 1.5)) wavfile.write('example_gain.wav', sample_rate, gain_signal) cut_signal = random_cut('example.wav', cut_range=(0.5, 1.0)) wavfile.write('example_cut.wav', sample_rate, cut_signal) ``` 以上是几种常见的音频数据增强方法及其Python实现,可以根据具体任务需求进行选择和组合。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ReLuJie

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值