语音模型朗读文本。Ollama 在生成音频时对其进行流式传输,因此可以在整段文本读完之前开始播放。
设置
启动 Ollama v0.40.9 或更高版本,然后下载 Phonon:
setup.shollama pull phonon
Phonon 使用 Gradium 的 31M 英语检查点,并附带 Gradium 的英语声音,例如 Zoey、Easton 和 Freya。如果没有指定声音,它将使用检查点自带的声音 default。ollama show phonon 会列出所有可用的声音。声音名称不区分大小写,且是否包含重音符号均可。
从终端说话
ollama run 通过计算机扬声器播放音频:
# Speak some text ollama run phonon "Hello from Ollama." # Choose a voice ollama run phonon --voice Zoey "Hi, this is Zoey." # Speak text from another program echo "Text from another program works too." | ollama run phonon # Speak a chat model's answer ollama run gemma4 --hidethinking "Tell me a fun fact about owls in two sentences." | ollama run phonon
管道传入的文本会在到达时立即被朗读,因此聊天模型的回答在输出第一两句后就开始播放。
运行不带任何文本的 ollama run phonon,可在 >>> 提示符下输入行。每按一次 Enter 键,该行就会被朗读。按 Ctrl+C 停止朗读,输入 /bye 或按 Ctrl+D 退出。
音频使用系统内置播放器播放:macOS 上使用 afplay,Linux 上使用已安装的第一个可用工具(paplay、pw-play、aplay 或 ffplay),Windows 上使用 PowerShell。
将音频保存到文件
当输出被重定向时,ollama run 会写入 WAV 文件而不是播放它。这也适用于没有扬声器的服务器:
ollama run phonon "Save this to a file." > speech.wav
若要收听远程服务器的音频,请在自己的计算机上运行 ollama 并将其指向服务器。音频将在命令运行的位置播放:
OLLAMA_HOST=my-server:11434 ollama run phonon "Hello from the server."
使用 API 生成语音
使用兼容 OpenAI 的 /v1/audio/speech 端点:
cURL
curl http://localhost:11434/v1/audio/speech \
-H "Content-Type: application/json" \
-d '{
"model": "phonon",
"input": "Hello from Ollama.",
"voice": "default"
}' --output speech.wav
Python
from openai import OpenAI
client = OpenAI(base_url="http://localhost:11434/v1", api_key="ollama")
with client.audio.speech.with_streaming_response.create(
model="phonon",
voice="default",
input="Hello from Ollama.",
response_format="wav",
) as response:
response.stream_to_file("speech.wav")
JavaScript
import fs from 'node:fs'
import OpenAI from 'openai'
const openai = new OpenAI({ baseURL: 'http://localhost:11434/v1', apiKey: 'ollama' })
const response = await openai.audio.speech.create({
model: 'phonon',
voice: 'default',
input: 'Hello from Ollama.',
response_format: 'wav',
})
fs.writeFileSync('speech.wav', Buffer.from(await response.arrayBuffer()))
响应在生成音频的同时进行流式传输,因此您可以立即开始播放:
curl -sN http://localhost:11434/v1/audio/speech \
-H "Content-Type: application/json" \
-d '{"model": "phonon", "input": "Playback starts while the rest is still being generated."}' \
| ffplay -nodisp -autoexit -loglevel error -
音频格式
response_format | 输出 |
|---|---|
wav(默认) | WAV 文件:16-bit,单声道,24 kHz。头部在长度已知之前写入,因此其大小字段保留最大值。 |
pcm | 原始 16-bit 小端样本,单声道,24 kHz,无头部。 |
限制
- 每次请求的
input最多可包含 4,096 个字符。ollama run会自动在段落和句子断点处拆分较长的文本。 - 价格、数字、符号、电子邮件地址和 URL 在朗读前会被拼读出来,因此
$4.59会被读作“4 dollars and 59 cents”。时间和数字日期按原样读取,因此请写出完整日期(如October 23而非10/23)以获得自然的朗读效果。Emoji、项目符号字符以及 markdown 标记(如*和#)会被跳过。 - 模型不支持的选项(如其他格式、速度或
instructions)会返回400错误而不是被忽略。未知声音会返回一个列出可用声音的400错误。 - 语音模型仅用于生成语音:向其发送聊天、补全和嵌入请求会返回
400错误。
ollama show phonon 和 /api/show 将模型的功能列为 speech,以及其语音(在 /api/show 中为 voices)。有关所有支持的字段,请参阅 OpenAI compatibility。