【AI实践】Mac一天熟悉AI模型智能体应用(百炼版)
准备环境
MacOS M1电脑
下载安装:vscode
下载Miniconda:Download Anaconda Distribution | Anaconda
Qwen-TTS
非实时TTS
将生成的音频,保存到本地。文档见https://bailian.console.aliyun.com/?tab=doc#/doc/?type=model&url=https%3A%2F%2Fhelp.aliyun.com%2Fdocument_detail%2F2879134.html&renderType=iframe
修复了tts请求时,response出错的情况(比如API_KEY不对)
import os
import requests
import dashscopetext = "那我来给大家推荐一款T恤,这款呢真的是超级好看,这个颜色呢很显气质,而且呢也是搭配的绝佳单品,大家可以闭眼入,真的是非常好看,对身材的包容性也很好,不管啥身材的宝宝呢,穿上去都是很好看的。推荐宝宝们下单哦。"
response = dashscope.audio.qwen_tts.SpeechSynthesizer.call(model="qwen-tts",api_key=os.getenv("DASHSCOPE_API_KEY"),text=text,voice="Cherry",
)# ====== 开始检查 response 是否有效 ======
print(response)
if not hasattr(response, 'output') or response.output is None:print("响应中没有 output 字段,请检查权限或模型是否开通")exit()if not hasattr(response.output, 'audio') or response.output.audio is None:print("响应中没有 audio 数据,请检查返回内容")exit()if not hasattr(response.output.audio, 'url'):print("响应中 audio 没有 url 字段,请检查返回结构")exit()# ====== 结束检查 response 是否有效 ======audio_url = response.output.audio["url"]save_path = "downloaded_audio.wav" # 自定义保存路径try:response = requests.get(audio_url)response.raise_for_status() # 检查请求是否成功with open(save_path, 'wb') as f:f.write(response.content)print(f"音频文件已保存至:{save_path}")
except Exception as e:print(f"下载失败:{str(e)}")
问题1:pip install pyaudio失败
解决方案:
(1)先安装brew:/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)",重启
(2)再安装brew install portaudio
(3)再安装pip install pyaudio
生成的TTS音频文件,放到了本地。适合音频生成离线播报场景,比如PPT。
不适合实时的语音交互,我们需要实时TTS。
实时TTS
按照官方demo跑就好。
我们把实时TTS封装成函数api,并提供了api测试demo;
函数封装代码:qwen_play_tts.py
# coding=utf-8import os
import dashscope
import pyaudio
import time
import base64
import numpy as npdef qwen_play_tts(text, voice="Ethan", api_key=None):"""使用通义千问 TTS 进行流式语音合成并播放:param text: 合成文本:param voice: 发音人:param api_key: Dashscope API Key(可选,默认读取环境变量)"""api_key = api_key or os.getenv("DASHSCOPE_API_KEY")if not api_key:raise ValueError("DASHSCOPE_API_KEY is not set.")p = pyaudio.PyAudio()stream = p.open(format=pyaudio.paInt16,channels=1,rate=24000,output=True)responses = dashscope.audio.qwen_tts.SpeechSynthesizer.call(model="qwen-tts",api_key=api_key,text=text,voice=voice,stream=True)for chunk in responses:audio_string = chunk["output"]["audio"]["data"]wav_bytes = base64.b64decode(audio_string)audio_np = np.frombuffer(wav_bytes, dtype=np.int16)stream.write(audio_np.tobytes())time.sleep(0.8)stream.stop_stream()stream.close()p.terminate()# 示例调用
if __name__ == "__main__":sample_text = "你好,这是一段测试语音。"qwen_play_tts(sample_text)
api测试代码:qwen_api_test.py
from qwen_play_tts import qwen_play_ttsqwen_play_tts("这是一个函数调用测试。")