写一个PYTHON程序,识别音频WAV文件的音调例如do rui mi fa so la xi,以0.5秒为间隔进行采样,使用傅里叶变换,将音频的这些音调记录下来,保存到一个excel
时间: 2024-04-14 15:29:53 浏览: 146
基于 python 进行音频处理【100011730】
当然可以!以下是一个示例的Python程序,使用librosa库来读取音频文件、进行频谱分析,并使用pandas库来保存数据到Excel文件:
```python
import librosa
import numpy as np
import pandas as pd
# 读取音频文件
filename = 'your_audio.wav'
y, sr = librosa.load(filename, sr=None)
# 以0.5秒为间隔进行采样
sample_duration = 0.5 # 采样间隔(秒)
sample_size = int(sr * sample_duration) # 采样点数
# 计算音频的傅里叶变换
fft = np.abs(librosa.stft(y[:sample_size]))
# 音调列表
notes = ['C', 'C#', 'D', 'D#', 'E', 'F', 'F#', 'G', 'G#', 'A', 'A#', 'B']
# 获取频率对应的音调
def get_note_from_frequency(frequency):
note_num = int(round(12 * librosa.core.hz_to_midi(frequency) % 12))
return notes[note_num]
# 初始化数据列表
data_list = []
# 遍历每个采样段
for i in range(0, len(y), sample_size):
# 取当前采样段的频谱
sample_fft = fft[:, i//sample_size]
# 找到主要频率
peak_idx = np.argmax(sample_fft)
peak_freq = librosa.fft_frequencies(sr=sr, n_fft=len(sample_fft))[peak_idx]
# 获取音调
note = get_note_from_frequency(peak_freq)
# 添加数据到列表
data_list.append([i//sample_size, note])
# 创建DataFrame
df = pd.DataFrame(data_list, columns=['Sample Index', 'Note'])
# 保存到Excel文件
output_filename = 'output.xlsx'
df.to_excel(output_filename, index=False)
print(f"音调数据已保存到 {output_filename}")
```
请确保已经安装了必要的库(librosa和pandas),可以使用pip进行安装:
```
pip install librosa pandas
```
你需要将`your_audio.wav`替换为你想要分析的音频文件的实际路径,程序将输出一个名为`output.xlsx`的Excel文件,其中包含音调数据。
这只是一个简单的示例程序,对于更复杂的音频文件或需求,你可能需要进行更多的处理和调整。希望对你有所帮助!
阅读全文