当前位置: 首页 > 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("这是一个函数调用测试。")

http://www.lryc.cn/news/576525.html

相关文章:

  • nginx基本使用 linux(mac下的)
  • 【HarmonyOS Next之旅】DevEco Studio使用指南(三十八) -> 构建HAR
  • 编译安装交叉工具链 riscv-gnu-toolchain
  • RabbitMQ-基础篇
  • FreeSWITCH配置文件解析(2) dialplan 拨号计划中xml 的action解析
  • 1.1 基于Icarus Verilog、ModelSim和Vivado对蜂鸟E203处理器进行仿真
  • 学习使用dotnet-dump工具分析.net内存转储文件(2)
  • YOLOv5 训练中参数优化方案
  • 测量 Linux 中进程上下文切换需要的时间
  • UniApp Vue3 模式下实现页面跳转的全面指南
  • 【C++】简单学——内存管理
  • 【数论】P11169 「CMOI R1」Bismuth / Linear Sieve|普及+
  • OpenAI:Let’s Verify Step by Step 解读
  • 告别固定密钥!在单一账户下用 Cognito 实现 AWS CLI 的 MFA 单点登录
  • 数据结构1 ——数据结构的基本概念+一点点算法
  • SpringMVC系列(六)(Restful架构风格(中))
  • 太速科技-670-3U VPX PCIe桥扩展3路M.2高速存储模块
  • 矩阵的条件数(Condition Number of a Matrix)
  • 分布式电源采集控制装置:江苏光伏电站的“智能调度中枢
  • 【云桌面容器KasmVNC】如何关闭SSL使用HTTP
  • pytest 中的重试机制
  • 【Linux】理解进程状态与优先级:操作系统中的调度原理
  • 鸿蒙5:布局组件
  • docker通过小实例使用常用命令
  • 能否仅用两台服务器实现集群的高可用性??
  • 【算法深练】单调栈:有序入栈,及时删除垃圾数据
  • 嵌入式网络通信与物联网协议全解析:Wi-Fi、BLE、LoRa、ZigBee 实战指南
  • libxlsxwriter: 一个轻量级的跨平台的C++操作Excel的开源库
  • 【HarmonyOS NEXT】跳转到华为应用市场进行应用下载并更新
  • COLT_CMDB_linux_zookeeperInfo_20250628.sh