用python写一个听歌识曲代码
时间: 2023-06-04 20:02:22 浏览: 385
好的,以下是一个基于Python和第三方库的听歌识曲代码实现:
```python
import os
import requests
from hashlib import md5
# 请求到的音乐api
api_url = 'http://music.163.com/api/search/pc'
# 根据歌曲链接获取歌曲id
url_to_song_id = 'https://music.163.com/song?id={}'
# 缓存下载的音频文件
downloads_folder = './downloads/'
if not os.path.exists(downloads_folder):
os.mkdir(downloads_folder)
# 获取搜索关键字对应的歌曲
def search_song(song_name):
payload = {
's': song_name,
'type': '1',
'limit': '1'
}
response = requests.get(api_url, params=payload)
results = response.json()['result']['songs']
if len(results) > 0:
return results[0]
return None
# 从URL获取歌曲ID
def get_song_id(url):
response = requests.get(url)
if response.ok:
song_id = url.split('=')[1]
return song_id
return None
# 下载歌曲
def download_song(song_id):
song_url = f'https://music.163.com/song/media/outer/url?id={song_id}.mp3'
response = requests.get(song_url)
# 添加歌名到文件名
filename = f'{downloads_folder}{song_info["name"]}.mp3'
with open(filename, 'wb') as f:
f.write(response.content)
# 生成音频文件的MD5哈希值
def get_md5(filename, block_size=2**20):
md5_hash = md5()
with open(filename, 'rb') as f:
while True:
data = f.read(block_size)
if not data:
break
md5_hash.update(data)
return md5_hash.hexdigest()
# 开始听歌识曲
def recognize_song():
# 从麦克风录制音频
#...
# 文件保存为WAV格式
#...
# 调用外部API进行音频识别,并获取结果
#...
# 匹配结果中的歌曲信息
#...
# 下载对应的歌曲
song_id = get_song_id(song_info['url'])
download_song(song_id)
# 打印匹配到的歌曲信息
print(f'匹配成功:{song_info["name"]},{song_info["artists"][0]["name"]}')
# 测试示例
song_name = '夜空中最亮的星'
song_info = search_song(song_name)
if song_info:
download_song(song_info['id'])
song_md5 = get_md5(f'{downloads_folder}{song_info["name"]}.mp3')
print(f'{song_name} 歌曲的MD5值为 {song_md5}')
else:
print(f'抱歉,未找到歌曲:{song_name}')
```
请注意,这只是代码的一个示例实现,你需要根据实际需求进行修改和优化。
阅读全文