提取音频过零率并可视化的代码
时间: 2023-09-08 13:09:57 浏览: 163
以下是Python代码示例,用于提取音频文件的过零率并进行可视化:
```python
import numpy as np
import matplotlib.pyplot as plt
import librosa
# 加载音频文件
audio_file = 'example.wav'
y, sr = librosa.load(audio_file)
# 计算过零率
zero_crossings = librosa.zero_crossings(y, pad=False)
zero_crossings_rate = np.mean(zero_crossings)
# 可视化过零率和音频波形
fig, ax = plt.subplots(nrows=2, sharex=True, sharey=False, figsize=(10, 6))
times = librosa.times_like(y)
ax[0].plot(times, y, label='Audio waveform')
ax[0].legend()
ax[1].plot(times, zero_crossings, label='Zero crossings')
ax[1].axhline(0, color='k', alpha=0.5)
ax[1].fill_between(times, 0, zero_crossings, color='r', alpha=0.5, label='Above zero')
ax[1].fill_between(times, 0, zero_crossings, where=zero_crossings < 0, color='b', alpha=0.5, label='Below zero')
ax[1].legend()
plt.show()
```
解释一下代码:
1. 首先使用`librosa.load`函数加载音频文件,得到音频信号`y`和采样率`sr`。
2. 然后使用`librosa.zero_crossings`函数计算音频文件的过零率,得到一个布尔类型数组`zero_crossings`,表示每个样本是否过零。
3. 接着使用`numpy.mean`函数计算整个音频文件的过零率`zero_crossings_rate`,即所有样本过零的比例。
4. 最后使用`matplotlib`库可视化过零率和音频波形。其中,`librosa.times_like`函数可以生成与音频信号等长的时间轴,用于画图;`ax[0]`表示第一行子图,即音频波形图;`ax[1]`表示第二行子图,即过零率图。`ax[1].fill_between`函数可以用来填充过零率的正负区域。
阅读全文