网淘吧来吧,欢迎您!

Podcast Generation with Microsoft Foundry

2026-03-31 新闻来源:网淘吧 围观:24
电脑广告
手机广告

使用GPT实时迷你版生成播客

利用Azure OpenAI实时API将文本内容转换为真实音频叙述

快速开始

  1. 为实时API配置环境变量
  2. 通过WebSocket连接到Azure OpenAI实时端点
  3. 发送文本提示,收集PCM音频块和转录文本
  4. 将PCM转换为WAV格式
  5. 将Base64编码的音频返回至前端进行播放

环境配置

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。

Podcast Generation with Microsoft Foundry

核心工作流程

后端音频生成

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)

前端音频播放

// 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();

语音选项

语音特性
合金中性
回声温暖
寓言富有表现力
玛瑙深沉
新星友好
微光清晰

实时API事件

  • response.output_audio.delta- Base64音频片段
  • response.output_audio_transcript.delta- 转录文本
  • response.done- 生成完成
  • 错误- 处理方式event.error.message

音频格式

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

参考文献

免责申明
部分文章来自各大搜索引擎,如有侵权,请与我联系删除。
打赏

文章底部电脑广告
手机广告位-内容正文底部
上一篇:Multi-viewpoint Debates 下一篇:Authensor Gateway

相关文章

您是本站第378273名访客 今日有334篇新文章/评论