文章目录
一、音频加载
1.1 librosa.to_mono
1.1.1 语法与参数
librosa.to_mono(y)[source]
通过平均跨通道的样本将音频信号转换为单声道。
>参数:
ynp.ndarray [shape=(…, n)]
音频时间序列。支持多通道。
>返回值:
y_mononp.ndarray [shape=(n,)]
y作为单声道时间序列
笔记
此函数缓存在 20 级。
1.1.2 例子
# 通过平均跨通道的样本将音频信号转换为单声道。
import librosa
y, sr = librosa.load(librosa.ex('trumpet', hq=True), mono=False)
# Downloading file 'sorohanro_-_solo-trumpet-06.hq.ogg' from 'https://librosa.org/data/audio/sorohanro_-_solo-trumpet-06.hq.ogg' to 'C:\Users\Administrator\AppData\Local\librosa\librosa\Cache'.
print(sr) # 22050
print(y)
"""
[[-2.8804876e-03 -3.7791703e-03 -2.2360922e-03 ... 2.3028754e-06
3.4852138e-07 0.0000000e+00]
[-3.8955038e-04 1.0397502e-03 1.3655502e-03 ... -1.6557990e-05
6.9134635e-06 0.0000000e+00]]
"""
print(y.shape) # (2, 117601)
y_mono = librosa.to_mono(y)
print(y_mono)
"""
[-1.6350190e-03 -1.3697101e-03 -4.3527101e-04 ... -7.1275572e-06
3.6309925e-06 0.0000000e+00]
"""
print(y_mono.shape) # (117601,)
1.2 librosa.resample
https://librosa.org/doc/latest/generated/librosa.resample.html
1.2.1 语法与参数
librosa.resample(y, *, orig_sr, target_sr, res_type='kaiser_best', fix=True, scale=False, **kwargs)[source]¶
将时间序列从 orig_sr 重新采样到 target_sr
默认情况下,这使用高质量(但相对较慢)的方法 (‘kaiser_best’) 进行带限 sinc 插值。下面列出的替代res_type值提供了速度和质量的不同权衡。
>参数:
y:np.ndarray [shape=(…, n)]
音频时间序列。支持多通道。
orig_sr:number > 0 [scalar]
y的原始采样率
target_sr:number > 0 [scalar]
目标采样率
res_type:str
重采样类型
‘kaiser_best’ (default)
resampy高质量模式
‘kaiser_fast’
resampy更快的方法
‘fft’ or ‘scipy’
scipy.signal.resample傅里叶法。
‘polyphase’
scipy.signal.resample_poly多相滤波。(快速地)
‘linear’
采样率线性插值。(非常快)
‘zero_order_hold’
samplerate在样本之间重复最后一个值。(非常快)
‘sinc_best’, ‘sinc_medium’ or ‘sinc_fastest’
对高、中和低质量的 sinc 插值进行采样。
‘soxr_vhq’, ‘soxr_hq’, ‘soxr_mq’ or ‘soxr_lq’
soxr非常高、高、中、低质量的基于 FFT 的带限插值。 'soxr_hq'是soxr的默认设置(快速)
‘soxr_qq’
soxr快速三次插值(非常快)
>笔记
samplerate和soxr未随librosa. 要使用samplerate或soxr,应该手动安装它们:
$ pip install samplerate
$ pip install soxr
>笔记
使用 res_type='polyphase'时,仅支持整数采样率。
fix:bool
将重采样信号的长度调整为精确的大小 ceil(target_sr * len(y) / orig_sr)
>scale:bool
缩放重采样信号,使y和y_hat具有大致相等的总能量。
>**kwargs:additional keyword arguments
如果fix==True,要传递给的附加关键字参数 librosa.util.fix_length。
返回值
y_hatnp.ndarray [shape=(…, n * target_sr / orig_sr)]
y从orig_sr到重新采样target_sr
Raises
ParameterError 参数错误
如果res_type='polyphase’和orig_sr或target_sr不都是整数值。
笔记
此函数缓存在 20 级。
1.2.2 例子:从 22 KHz 下采样到 8 KHz
# 从 22 KHz 下采样到 8 KHz
import librosa
y, sr = librosa.load(librosa.ex('trumpet'), sr=22050)
print(sr) # 22050
print(y)
"""
[-1.4068224e-03 -4.4607223e-04 -4.1098078e-04 ... 7.9623060e-06
-3.0417003e-05 1.2765067e-05]
"""
print(y.shape) # (117601,)
y_8k = librosa.resample(y, orig_sr=sr, target_sr=8000)
print(y_8k)
"""
[-1.3455821e-04 -7.4334157e-04 4.4419061e-04 ... 1.0044531e-05
-7.8957073e-06 0.0000000e+00]
"""
print(y_8k.shape) # (42668,)
1.3 librosa.get_duration
https://librosa.org/doc/latest/generated/librosa.get_duration.html
1.3.1 语法和参数
librosa.get_duration(*, y=None, sr=22050, S=None, n_fft=2048, hop_length=512, center=True, filename=None)[source]
计算音频时间序列、特征矩阵或文件名的持续时间(以秒为单位)。
>参数:
y:np.ndarray [shape=(…, n)] or None
音频时间序列。支持多通道。
sr:number > 0 [scalar]
y音频采样率
S:np.ndarray [shape=(…, d, t)] or None
STFT 矩阵,或任何 STFT 派生矩阵(例如,色谱图或梅尔谱图)。从频谱图输入计算的持续时间仅精确到帧分辨率。如果需要高精度,最好直接使用音频时间序列。
n_fft:int > 0 [scalar]
S的FFT 窗口大小
hop_length:int > 0 [ scalar]
S列之间的音频样本数
center:boolean
如果True,以S[:, t]y[t * hop_length]
如果False,则开始于S[:, t]y[t * hop_length]
filename:str
如果提供,则忽略所有其他参数,并直接从音频文件计算持续时间。请注意,这避免了将内容加载到内存中,因此对于查询长文件的持续时间很有用。
如在 中load,这也可以是整数或可由 处理的打开文件句柄soundfile。
返回值:
dfloat >= 0
输入时间序列或频谱图的持续时间(以秒为单位)。
Raises
ParameterError 参数错误
如果没有提供y、S或filename。
笔记
get_duration可以应用于文件 ( filename)、频谱图 ( S) 或音频缓冲区 (y, sr )。只应提供这三个选项之一。如果您确实提供了多个选项(例如,filename和S),则filename优先于S,并S优先于 (y, sr).
1.3.2 例子
# 从 22 KHz 下采样到 8 KHz
import librosa
y, sr = librosa.load(librosa.ex('trumpet'))
print(sr) # 22050
print(y)
"""
[-1.4068224e-03 -4.4607223e-04 -4.1098078e-04 ... 7.9623060e-06
-3.0417003e-05 1.2765067e-05]
"""
print(y.shape) # (117601,)
print(librosa.get_duration(y=y, sr=sr)) # 5.333378684807256
# 直接从音频文件
print(librosa.get_duration(filename=librosa.ex('trumpet'))) # 5.333378684807256
S = librosa.stft(y)
print(librosa.get_duration(S=S, sr=sr)) # 5.317369614512471
S_left = librosa.stft(y, center=False)
print(librosa.get_duration(S=S_left, sr=sr)) # 5.224489795918367
1.4 librosa.get_samplerate
https://librosa.org/doc/latest/generated/librosa.get_samplerate.html
1.4.1 语法和参数
librosa.get_samplerate(path)[source]
获取给定文件的采样率。
参数:
path:string, int, soundfile.SoundFile, or file-like
要加载的文件的路径 如load,这也可以是整数或可以处理的打开文件句柄soundfile。soundfile.SoundFile也可以提供现有对象。
Returns
sr:number > 0
给定音频文件的采样率
1.4.2 例子:获取包含的音频文件的采样率
# 获取包含的音频文件的采样率
import librosa
path = librosa.ex('trumpet')
print(librosa.get_samplerate(path)) # 22050