当前位置: 首页 > news >正文

【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("这是一个函数调用测试。")

相关文章:

  • STM32中Usart的使用
  • 一个简单测试Deepseek吞吐量的脚本,国内环境可跑
  • 1.1 基于Icarus Verilog、ModelSim和Vivado对蜂鸟E203处理器进行仿真
  • HarmonyOS File和base64字符串转换
  • Note2.2 机器学习训练技巧:Batch and Momentum(Machine Learning by Hung-yi Lee)
  • C语言二级指针与多级指针
  • cannot import name ‘TextKwargs‘ from ‘transformers.processing_utils‘
  • 【LeetCode 热题 100】438. 找到字符串中所有字母异位词——(解法二)定长滑动窗口+数组
  • LeetCode Hot 100 找到字符串中所有字母异位词
  • 编译流程详解
  • 利用ROS打印novatel_msgs/INSPVAX
  • 滑坡监测接收机市场分析
  • libxlsxwriter: 一个轻量级的跨平台的C++操作Excel的开源库
  • 个人日记本小程序开发方案(使用IntelliJ IDEA)
  • python解释器 与 pip脚本常遇到的问题汇总
  • 【stm32】HAL库开发——CubeMX配置ADC
  • Minio入门+适配器模式(实战教程)
  • ZooKeeper深度面试指南三
  • uni-app subPackages 分包加载:优化应用性能的利器
  • uniapp上拉加载和下拉刷新组件mescroll-uni