【Python百日进阶-Web开发-音频】Day706 - 音频加载 librosa.to_mono / resample /get_duration / get_samplerate

一、音频加载

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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

岳涛@心馨电脑

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

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

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

打赏作者

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

抵扣说明:

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

余额充值