SuperAPI AI 工具集

podcast-generation

通用与其它

查看项目

更新于 10-15 10:22

技能介绍

用途

Podcast Generation 是一个基于 Azure OpenAI GPT Realtime Mini 模型的技能,用于从文本内容生成真实的播客风格音频叙述。它通过 WebSocket 连接 Azure OpenAI 的 Realtime API,将文本提示转换为语音音频,适用于构建文本转语音功能、音频内容生成等场景。

主要能力

  • 通过 WebSocket 连接 Azure OpenAI Realtime 端点,使用 GPT Realtime Mini 模型生成音频。
  • 支持发送文本提示,收集流式 PCM 音频块和转录文本。
  • 将 PCM 音频转换为 WAV 格式(24kHz、16 位、单声道)。
  • 返回 base64 编码的音频数据,供前端播放。
  • 提供多种语音选项:alloy(中性)、echo(温暖)、fable(富有表现力)、onyx(低沉)、nova(友好)、shimmer(清晰)。
  • 支持处理 Realtime API 事件,包括音频增量、转录增量、生成完成和错误处理。

使用方式

环境配置

需要设置以下环境变量:

AZURE_OPENAI_AUDIO_API_KEY=your_realtime_api_key
AZURE_OPENAI_AUDIO_ENDPOINT=https://your-resource.cognitiveservices.azure.com
AZURE_OPENAI_AUDIO_DEPLOYMENT=gpt-realtime-mini

注意:端点不应包含 /openai/v1/,只需基础 URL。

核心工作流

  1. 后端音频生成:使用 AsyncOpenAI 客户端,将 HTTPS 端点转换为 WebSocket URL(wss:// + /openai/v1),连接 Realtime API,配置为仅音频输出,发送文本提示,收集流式事件中的音频块和转录文本,最后将 PCM 转换为 WAV。
from openai import AsyncOpenAI
import base64

# Convert HTTPS endpoint to WebSocket URL
ws_url = endpoint.replace("https://", "wss://") + "/openai/v1"

client = AsyncOpenAI(
    websocket_base_url=ws_url,
    api_key=api_key
)

audio_chunks = []
transcript_parts = []

async with client.realtime.connect(model="gpt-realtime-mini") as conn:
    # Configure for audio-only output
    await conn.session.update(session={
        "output_modalities": ["audio"],
        "instructions": "You are a narrator. Speak naturally."
    })
    
    # Send text to narrate
    await conn.conversation.item.create(item={
        "type": "message",
        "role": "user",
        "content": [{"type": "input_text", "text": prompt}]
    })
    
    await conn.response.create()
    
    # Collect streaming events
    async for event in conn:
        if event.type == "response.output_audio.delta":
            audio_chunks.append(base64.b64decode(event.delta))
        elif event.type == "response.output_audio_transcript.delta":
            transcript_parts.append(event.delta)
        elif event.type == "response.done":
            break

# Convert PCM to WAV (see scripts/pcm_to_wav.py)
pcm_audio = b''.join(audio_chunks)
wav_audio = pcm_to_wav(pcm_audio, sample_rate=24000)
  1. 前端音频播放:将 base64 WAV 转换为可播放的 Blob 并播放。
// Convert base64 WAV to playable blob
const base64ToBlob = (base64, mimeType) => {
  const bytes = atob(base64);
  const arr = new Uint8Array(bytes.length);
  for (let i = 0; i < bytes.length; i++) arr[i] = bytes.charCodeAt(i);
  return new Blob([arr], { type: mimeType });
};

const audioBlob = base64ToBlob(response.audio_data, 'audio/wav');
const audioUrl = URL.createObjectURL(audioBlob);
new Audio(audioUrl).play();

Realtime API 事件

  • response.output_audio.delta - Base64 音频块
  • response.output_audio_transcript.delta - 转录文本
  • response.done - 生成完成
  • error - 通过 event.error.message 处理

音频格式

  • 输入:文本提示
  • 输出:PCM 音频(24kHz、16 位、单声道)
  • 存储:Base64 编码 WAV

适用场景

  • 构建文本转语音功能。
  • 生成播客风格的音频叙述。
  • 需要将文本内容转换为音频的应用。

限制

  • 依赖 Azure OpenAI Realtime API 和 GPT Realtime Mini 模型。
  • 需要配置有效的 API 密钥和端点。
  • 输出音频格式固定为 PCM 24kHz、16 位、单声道,需转换为 WAV 使用。
  • 具体收费、价格、平台支持等信息暂未提供。