听歌识曲python
时间: 2023-12-21 22:32:32 浏览: 85
根据提供的引用内容,可以使用librosa库来实现听歌识曲的功能。下面是一个简单的示例代码:
```python
import librosa
import os
import numpy as np
# 提取待识别歌曲的节奏点
y, sr = librosa.load('待识别歌曲.wav')
tempo, beat_frames = librosa.beat.beat_track(y=y, sr=sr)
beat_frames = librosa.feature.delta(beat_frames)
# 创建搜索库
audioList = os.listdir('music_base')
beat_database = {}
for tmp in audioList:
audioName = os.path.join('music_base', tmp)
if audioName.endswith('.wav'):
y, sr = librosa.load(audioName)
tempo, beat_frames = librosa.beat.beat_track(y=y, sr=sr)
beat_frames = librosa.feature.delta(beat_frames)
beat_database[audioName] = beat_frames
# 使用DTW算法计算待识别歌曲与搜索库中歌曲的相似度
distances = []
for audioName, beat_frames_db in beat_database.items():
distance = librosa.feature.delta(np.abs(beat_frames - beat_frames_db))
distances.append(distance)
# 找到最相似的歌曲
min_distance = np.inf
min_audio = None
for i, distance in enumerate(distances):
if np.sum(distance) < min_distance:
min_distance = np.sum(distance)
min_audio = audioList[i]
print("识别结果:", min_audio)
```
这段代码首先使用librosa库提取待识别歌曲的节奏点,并创建一个搜索库,其中包含了每首歌曲的节奏点。然后,使用DTW算法计算待识别歌曲与搜索库中歌曲的相似度,找到最相似的歌曲。