用librosa提取音频频率,以时间为维度
时间: 2024-03-02 12:50:01 浏览: 95
使用Librosa库提取音频频率,以时间为维度需要进行以下步骤:
1. 载入音频文件
使用Librosa库中的load函数可以载入音频文件,例如:
```python
import librosa
# 载入音频文件
audio, sr = librosa.load('audio.wav')
```
2. 提取音频信号的频谱
使用Librosa库中的stft函数可以将音频信号转化为频域信号,例如:
```python
import librosa
# 载入音频文件
audio, sr = librosa.load('audio.wav')
# 将音频信号转化为频域信号
D = librosa.stft(audio)
```
3. 提取频域信号的频率和时间
使用Librosa库中的fft_frequencies函数可以提取频域信号的频率,使用Librosa库中的frames_to_time函数可以将频域信号的帧数转化为时间,例如:
```python
import librosa
# 载入音频文件
audio, sr = librosa.load('audio.wav')
# 将音频信号转化为频域信号
D = librosa.stft(audio)
# 提取频域信号的频率
freqs = librosa.fft_frequencies(sr=sr, n_fft=len(D))
# 将频域信号的帧数转化为时间
times = librosa.frames_to_time(range(len(D[0])), sr=sr, hop_length=hop_length)
```
其中,hop_length是指每个帧的长度,可以根据需要进行调整。
4. 提取不同时间段内的频率
根据需要,可以使用numpy库中的切片操作,提取不同时间段内的频率,例如:
```python
import librosa
import numpy as np
# 载入音频文件
audio, sr = librosa.load('audio.wav')
# 将音频信号转化为频域信号
D = librosa.stft(audio)
# 提取频域信号的频率
freqs = librosa.fft_frequencies(sr=sr, n_fft=len(D))
# 将频域信号的帧数转化为时间
hop_length = 512
times = librosa.frames_to_time(range(len(D[0])), sr=sr, hop_length=hop_length)
# 提取不同时间段内的频率
start_time = 0.0 # 起始时间
end_time = 1.0 # 结束时间
start_frame = int(start_time * sr / hop_length)
end_frame = int(end_time * sr / hop_length)
freqs_in_time_range = D[:, start_frame:end_frame]
```
这样就可以提取不同时间段内的频率了。需要注意的是,每个帧的长度(即hop_length)要根据需要进行调整,以保证提取出来的频率数据精度和准确度。
阅读全文