写一个python程序,输入wav文件,可以识别音乐,将音乐的do rei mi fa so la xi记录,采样间隔为0.5秒,将时间和记录的音调保存到一个excel中
时间: 2024-04-11 09:28:31 浏览: 202
当然可以,下面是一个示例的Python程序,可以实现你的需求:
```python
import wave
import numpy as np
import pandas as pd
def get_pitch(freq):
pitches = {
261.63: 'C', 293.66: 'D', 329.63: 'E', 349.23: 'F', 392.00: 'G', 440.00: 'A', 493.88: 'B'
}
closest_pitch = min(pitches.keys(), key=lambda x: abs(x - freq))
return pitches[closest_pitch]
def extract_music_notes(file_path):
wav = wave.open(file_path, 'r')
frame_rate = wav.getframerate()
sample_width = wav.getsampwidth()
num_frames = wav.getnframes()
duration = num_frames / frame_rate
num_samples = int(duration / 0.5)
time = np.linspace(0, duration, num=num_samples)
music_notes = []
for i in range(num_samples):
frame = wav.readframes(int(0.5 * frame_rate))
signal = np.frombuffer(frame, dtype=np.int16)
freq = np.abs(np.fft.fft(signal)[:len(signal) // 2]).argmax() * frame_rate / len(signal)
if freq > 0:
note = get_pitch(freq)
else:
note = '-'
music_notes.append(note)
return time, music_notes
def save_to_excel(time, music_notes, output_file):
data = {'Time': time, 'Note': music_notes}
df = pd.DataFrame(data)
df.to_excel(output_file, index=False)
file_path = input("请输入wav文件路径:")
output_file = input("请输入保存的Excel文件名:")
time, music_notes = extract_music_notes(file_path)
save_to_excel(time, music_notes, output_file)
print("音乐识别完成并保存到Excel文件中!")
```
这个程序首先会让你输入一个wav文件的路径,然后再输入要保存的Excel文件名。程序会读取wav文件的音频数据,并进行音乐识别,将时间和记录的音调保存到Excel文件中。注意,你需要在运行程序前安装`wave`、`numpy`和`pandas`模块。
希望这可以帮助到你!如果还有其他问题,请随时提问。
阅读全文