What I'm Trying to Do:
Enable two-way voice calls where:
- The caller speaks → Whisper transcribes
- GPT-4 replies → ElevenLabs generates audio
- The response is streamed back to the caller using Media Stream Twilio
GPT генерирует правильный ответ < /li>
ElevenLabs возвращает действительный файл mp3 < /li>
ffmpeg преобразует это в mp3-law @8000hz. Кадры над WebSocket (20 мс µ-законовыми кусочками) < /li>
Журналы подтверждают, что аудио-поток отправляется в рамках за кадром < /li>
Call Stay Snape (с паузой), журналы статуса Fire < /li>
Whisper Proves Proves Proves Searuio не слышит Audio < /li>
но. Нет приветствия. Нет ответа. Просто Единая молчание. < /Li>
< /ul>
Что я попробовал (обширная история отладки) < /p>
подтвержденное преобразование µ -raw с помощью: < /p>
ffmpeg -y -i file.mp3 -f mulaw -Acodec -AC -AC -AC 1000 -AC -AC -IAC. file.raw < /p>
< /li>
использовал 160-байтовые куски в течение 20 мс @ 8 кГц < /p>
< /li>
Инъективное 1 полное секунду из тишины µ-lak, чтобы запустить буфер < /p>
< /li>
< /li>
Используется правильный трек: «inbound» для аудиокадров < /p>
< /li>
Установите тип контента в качестве аудио /mulaw внутри:
twiml, используемый для исходящего потока медиа: < /p>
<Start>
<Stream url="wss://chat.example.net/media" track="both_tracks">
<Parameter name="Content-Type" value="audio/mulaw" />
</Stream>
</Start>
< /code>
< /li>
проверил, что .mp3 и .raw Audio Sound Perfect, когда воспроизводится локально < /p>
< /li>
Пробовал запись TWIML, чтобы прослушать, что вызывающий может услышать (все еще молчит) < /p>
< /li> Соответствующий Python (потоковой аудио до Twilio): < /p>
async def stream_audio(ws, stream_sid: str, audio_path: str):
raw_path = audio_path.rsplit('.', 1)[0] + ".raw"
subprocess.run([
"ffmpeg", "-y", "-i", audio_path,
"-f", "mulaw", "-acodec", "pcm_mulaw",
"-ar", "8000", "-ac", "1", raw_path
])
with open(raw_path, "rb") as f:
while chunk := f.read(160):
msg = {
"event": "media",
"streamSid": stream_sid,
"media": {
"track": "inbound",
"payload": base64.b64encode(chunk).decode("utf-8")
}
}
await ws.send(json.dumps(msg))
await asyncio.sleep(0.02)
< /code>
У нас также есть полная @app.websocket (' /media') логика, обработчик Twiml и Async Startup через Hypercorn. < /p>
Подозрения: < /p>
Twilio получает Audio, но мы с дилформированием. Тем не менее, это не услышано
Может быть, Twilio ожидает дополнительных заголовков или данных рукопожатия? Для: < /p>
Если вы когда-либо получали приложение Python (не node.js), работая с: < /li>
Twilio Media Streams (двусторонний) < /li>
Whisper /GPT для разговора < /li>
elevenl для ttts. Аудио, пожалуйста, поделитесь тем, что вы узнали! 22).>
Подробнее здесь: https://stackoverflow.com/questions/796 ... ranscripts