/
githubmirror
/
ChatGPT-Next-Web
Обзор
Документация
Войти
/
githubmirror
/
ChatGPT-Next-Web
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
main
app/utils/audio.ts
45 строк
1 KB
DDMeaqua
feat: add tts stt
27 авг 2024, 11:21
27 авг 2024, 11:21
2f410fc
Код
Авторство
О чём код?
type TTSPlayer = { init: () => void; play: (audioBuffer: ArrayBuffer, onended: () => void | null) => Promise<void>; stop: () => void; }; export function createTTSPlayer(): TTSPlayer { let audioContext: AudioContext | null = null; let audioBufferSourceNode: AudioBufferSourceNode | null = null; const init = () => { audioContext = new (window.AudioContext || window.webkitAudioContext)(); audioContext.suspend(); }; const play = async (audioBuffer: ArrayBuffer, onended: () => void | null) => { if (audioBufferSourceNode) { audioBufferSourceNode.stop(); audioBufferSourceNode.disconnect(); } const buffer = await audioContext!.decodeAudioData(audioBuffer); audioBufferSourceNode = audioContext!.createBufferSource(); audioBufferSourceNode.buffer = buffer; audioBufferSourceNode.connect(audioContext!.destination); audioContext!.resume().then(() => { audioBufferSourceNode!.start(); }); audioBufferSourceNode.onended = onended; }; const stop = () => { if (audioBufferSourceNode) { audioBufferSourceNode.stop(); audioBufferSourceNode.disconnect(); audioBufferSourceNode = null; } if (audioContext) { audioContext.close(); audioContext = null; } }; return { init, play, stop }; }