> For the complete documentation index, see [llms.txt](https://docs.neuron-ai.dev/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.neuron-ai.dev/neuron-v3-zh/ti-gong-fang/audio.md).

# 音频

通常，纯 AI 音频服务不支持像工具和对话这样的完整代理能力。因此，你可以在代理工作流中将这些组件作为独立服务使用，或者将它们用于 Agent 内部，因为它们实现了 `AIProviderInterface` 接口。在这种情况下，你可以受益于诸如中间件和护栏之类的代理工作流功能。

这些组件对于创建本地语音助手很有帮助，可用于与模型进行免手操作交互。典型流程包括捕获音频，使用单独的 Speech-To-Text（STT）服务将其转写为文本，将该文本发送给 Agent 进行处理，然后使用 Text-to-Speech（TTS）读出响应。

### 作为 Agent 提供器

```php
namespace App\Neuron;

use NeuronAI\Agent\Agent;
use NeuronAI\Chat\Messages\UserMessage;
use NeuronAI\Providers\AIProviderInterface;
use NeuronAI\Providers\OpenAI\Audio\OpenAITextToSpeech;

class MyAgent extends Agent
{
    protected function provider(): AIProviderInterface
    {
        return new OpenAITextToSpeech(
            key: 'OPENAI_API_KEY',
            model: 'gpt-4o-mini-tts',
            voice: 'alloy',
        );
    }
}

// 运行 Agent
$message = MyAgent::make()
    ->chat(new UserMessage("Hi!"))
    ->getMessage();

// 获取消息的音频部分（它是 base64 格式）
$audioBase64 = $message->getAudio()->getContent();

// 保存音频文件
file_put_contents(__DIR__.'/assets/speech.mp3', base64_decode($audioBase64));
```

### 直接使用

```php
$provider = new OpenAITextToSpeech(
    key: 'OPENAI_API_KEY',
    model: 'gpt-4o-mini-tts',
    voice: 'alloy',
);

// 从文本生成语音
$message = $provider->chat(new UserMessage("嗨，我是 Neuron AI 框架的创建者！"));

// 获取消息的音频部分（它是 base64 格式）
$audioBase64 = $message->getAudio()->getContent();

// 保存音频文件
file_put_contents(__DIR__.'/assets/speech.mp3', base64_decode($audioBase64));
```

## OpenAI 音频

### 文本转语音

```php
use NeuronAI\Providers\OpenAI\Audio\OpenAITextToSpeech;

$provider = new OpenAITextToSpeech(
    key: 'OPENAI_API_KEY',
    model: 'gpt-4o-mini-tts',
    voice: 'alloy',
);

// 从文本生成语音
$message = $provider->chat(new UserMessage("嗨，我是 Neuron AI 框架的创建者！"));

// 获取消息的音频部分（它是 base64 格式）
$audioBase64 = $message->getAudio();

// 保存音频文件
file_put_contents(__DIR__.'/assets/speech.mp3', base64_decode($audioBase64));
```

### 语音转文本

```php
use NeuronAI\Providers\OpenAI\Audio\OpenAISpeechToText;

$provider = new OpenAISpeechToText(
    key: 'OPENAI_API_KEY',
    model: 'gpt-4o-transcribe',
);

// 转写音频
$message = $provider->chat(
    new UserMessage([
        new TextContent('这段音频是关于一节数学课的。请注意专业术语。'),
        new AudioContent(__DIR__ . '/assets/intro.mp3', SourceType::URL)
    ])
);

// 打印从音频文件中获取的文本
echo $message->getContent();
```

## ElevenLabs

### 文本转语音

```php
use NeuronAI\Providers\ElevenLabs\ElevenLabsTextToSpeech;

$provider = new ElevenLabsTextToSpeech(
    key: 'ELEVENLABS_API_KEY',
    model: 'eleven_multilingual_v2',
    voice: 'alloy',
);

// 从文本生成语音
$message = $provider->chat(new UserMessage("嗨，我是来自意大利的 Valerio！"));

// 获取消息的音频部分（它是 base64 格式）
$audioBase64 = $message->getAudio();

// 保存音频文件
file_put_contents(__DIR__.'/asserts/speech.mp3', base64_decode($audioBase64));
```

### 语音转文本

```php
use NeuronAI\Providers\ElevenLabs\ElevenLabsSpeechToText;

$provider = new ElevenLabsSpeechToText(
    key: 'ELEVENLABS_API_KEY',
    model: 'scribe_v2',
);

// 转写音频
$message = $provider->chat(
    new UserMessage(
        new AudioContent(__DIR__ . '/assets/intro.mp3', SourceType::URL)
    )
);

// 打印从音频文件中获取的文本
echo $message->getContent();
```

## ZAI

### 语音转文本

```php
use NeuronAI\Providers\ZAI\Audio\ZAITranscription;

$provider = new ZAITranscription(
    key: 'ZAI_API_KEY',
    model: 'glm-asr-2512',
);

// 转写音频
$message = $provider->chat(
    new UserMessage(
        new AudioContent(__DIR__ . '/assets/intro.mp3', SourceType::URL)
    )
);

// 打印从音频文件中获取的文本
echo $message->getContent();
```
