鱼C论坛

 找回密码
 立即注册
查看: 23509|回复: 176

[作品展示] 【回复送鱼币啦】带大家玩点有意思的东西呀,一起来实现一波语音在线点歌小程序呗~

  [复制链接]
发表于 2021-8-31 07:59:51 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
原文链接
https://mp.weixin.qq.com/s/dCoEmwZq8ZZDVfXISc-bMQ

导语
之前更新了一波音乐下载器:
喜欢爬虫的小伙伴们有福啦,手把手带大家分析一波百度音乐接口呗~
结果repo竟然只涨了一个star,太可怕了。图片为了吸引大家给我点赞,我决定带大家玩点更有意思的东西,在之前开源的音乐下载器的基础上,实现语音点歌功能,废话不多说,让我们愉快地开始吧~

原理简介
既然要实现语音在线点歌功能,首先当然要实现语音识别功能啦,这里我们主要借助百度提供的免费接口:
https://console.bce.baidu.com/ai ... eech/overview/index
具体而言就是注册登录之后,创建一个应用:

根据提示填写一些信息即可,一分钟就搞定了,创建完成之后,可以获得如下截图中的内容:

AppID,AppKey以及SecretKey被我打码了,我们需要使用这些参数的来调用百度的语音识别接口,具体而言,代码实现如下:
  1. '''语音识别模块'''
  2. class SpeechRecognition():
  3.     def __init__(self, app_id, api_key, secret_key, **kwargs):
  4.         from aip import AipSpeech
  5.         self.aipspeech_api = AipSpeech(app_id, api_key, secret_key)
  6.         self.speech_path = kwargs.get('speech_path', 'recording.wav')
  7.         assert self.speech_path.endswith('.wav'), 'only support audio with wav format'
  8.     '''录音'''
  9.     def record(self, sample_rate=16000):
  10.         import speech_recognition as sr
  11.         rec = sr.Recognizer()
  12.         with sr.Microphone(sample_rate=sample_rate) as source:
  13.             audio = rec.listen(source)
  14.         with open(self.speech_path, 'wb') as fp:
  15.             fp.write(audio.get_wav_data())
  16.     '''识别'''
  17.     def recognition(self):
  18.         assert os.path.exists(self.speech_path)
  19.         with open(self.speech_path, 'rb') as fp:
  20.             content = fp.read()
  21.         result = self.aipspeech_api.asr(content, 'wav', 16000, {'dev_pid': 1536})
  22.         text = result['result'][0]
  23.         return text
  24.     '''合成并说话'''
  25.     def synthesisspeak(self, text=None, audiopath=None):
  26.         assert text is None or audiopath is None
  27.         import pygame
  28.         if audiopath is None:
  29.             audiopath = f'recording_{time.time()}.mp3'
  30.             result = self.aipspeech_api.synthesis(
  31.                 text, 'zh', 1,
  32.                 {'spd': 4, 'vol': 5, 'per': 4}
  33.             )
  34.             if not isinstance(result, dict):
  35.                 with open(audiopath, 'wb') as fp:
  36.                     fp.write(result)
  37.             pygame.mixer.init()
  38.             pygame.mixer.music.load(audiopath)
  39.             pygame.mixer.music.play()
  40.         else:
  41.             pygame.mixer.init()
  42.             pygame.mixer.music.load(audiopath)
  43.             pygame.mixer.music.play()
  44.             while pygame.mixer.music.get_busy():
  45.                 time.sleep(15)
复制代码

代码是从官方示例代码改过来的,实名认证之后可以获得十几万次的免费接口调用额度,需要自己手动点击领取~
定义完语音识别模块,我们就可以开始实现我们的语音点歌功能啦。这个实现起来其实也很简单,只需要把之前的代码改成语音输入和语音提示就ok啦,代码如下:
  1. '''非开发人员外部调用-语音版'''
  2. def runbyspeech(self, target_srcs=None, baiduspeech_params=None):
  3.     assert baiduspeech_params is not None, 'please visit to https://console.bce.baidu.com/ai/?fromai=1#/ai/speech/overview/index to obtain AppID, AppKey and SecretKey'
  4.     sr_api = SpeechRecognition(**baiduspeech_params)
  5.     while True:
  6.         print(BASICINFO % (__version__, self.config.get('savedir')))
  7.         # 音乐搜索
  8.         sr_api.synthesisspeak('请问您想听的歌曲名是什么呢?')
  9.         time.sleep(4)
  10.         target_srcs = ['migu'] if target_srcs is None else target_srcs
  11.         sr_api.record()
  12.         user_input = sr_api.recognition()
  13.         self.logger_handle.info(f'识别结果为: {user_input}')
  14.         search_results = self.search(user_input, target_srcs)
  15.         # 音乐下载
  16.         songinfos, songpaths = [], []
  17.         for key, values in search_results.items():
  18.             for value in values:
  19.                 songinfos.append(value)
  20.                 songpaths.append(os.path.join(value['savedir'], value['savename']+'.'+value['ext']))
  21.         sr_api.synthesisspeak(f'共搜索到{len(songinfos)}首和{user_input}相关的歌曲, 将依次为您下载播放.')
  22.         self.download(songinfos)
  23.         # 音乐播放
  24.         for songpath in songpaths:
  25.             sr_api.synthesisspeak(audiopath=songpath)
复制代码

大功告成啦,完整源代码详见:
游客,如果您要查看本帖隐藏内容请回复

评分

参与人数 4荣誉 +20 鱼币 +20 贡献 +9 收起 理由
louxinghao + 5 + 5 + 3
hrpzcf + 5 + 5 + 3
小伤口 + 5 + 5 感谢楼主无私奉献!
糖甜弯了嘴 + 5 + 5 + 3 感谢楼主无私奉献!

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2021-9-1 23:19:33 | 显示全部楼层
图好像没显示。。。原文可以看这里https://mp.weixin.qq.com/s/dCoEmwZq8ZZDVfXISc-bMQ
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2021-9-1 10:59:44 | 显示全部楼层
顶一下
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-9-1 11:09:56 From FishC Mobile | 显示全部楼层

回帖奖励 +1 鱼币

居然没有人
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-9-1 11:13:30 | 显示全部楼层

回帖奖励 +1 鱼币

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2021-9-1 11:18:02 | 显示全部楼层

回帖奖励 +1 鱼币

来啦,来啦,领鱼币啦
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-9-1 12:56:34 | 显示全部楼层

回帖奖励 +1 鱼币

大佬✧٩(ˊωˋ*)و✧
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-9-1 12:57:54 From FishC Mobile | 显示全部楼层
再来评一次,学习了,好好研究研究
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-9-1 13:21:10 | 显示全部楼层

回帖奖励 +1 鱼币

领鱼币啦
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-9-1 14:46:34 | 显示全部楼层

回帖奖励 +1 鱼币

好的
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2021-9-1 15:15:37 | 显示全部楼层

回帖奖励 +1 鱼币

来啦,来啦,领鱼币啦
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-9-1 15:30:26 | 显示全部楼层

回帖奖励 +1 鱼币

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2021-9-1 16:09:13 | 显示全部楼层

回帖奖励 +1 鱼币

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2021-9-1 20:00:01 | 显示全部楼层

回帖奖励 +1 鱼币

围观
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2021-9-1 22:31:20 | 显示全部楼层
支持
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2021-9-2 02:26:43 | 显示全部楼层

回帖奖励 +1 鱼币

楼主千金散尽还复来
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-9-2 06:56:36 | 显示全部楼层

回帖奖励 +1 鱼币

挣鱼币做作业
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-9-2 09:22:02 | 显示全部楼层

回帖奖励 +1 鱼币

学习学习
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-9-2 13:37:49 | 显示全部楼层

回帖奖励 +1 鱼币

领鱼币啦
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-9-2 15:18:54 | 显示全部楼层

回帖奖励 +1 鱼币

优秀
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-4-22 07:35

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表