OpenAI 于 2024 年 10 月 1 日宣布 Realtime API 的公测版本,使得开发者能够构建低延迟的多模态体验。这个 API 支持使用六种预设语音进行自然的语音对话,类似于 ChatGPT 的高级语音模式。
此外,Chat Completions API 也增加了音频输入和输出功能,支持文本或音频输入,并可以以文本、音频或两者的形式响应。
Realtime API 通过 WebSocket 连接直接流式传输音频输入和输出,减少了对多个模型的依赖,并能够自动处理中断。OpenAI 还强调了安全和隐私,采用了多层次的安全保护措施,并且在推出前进行了外部红队测试。
Realtime API 的定价包括文本和音频令牌的费用,音频输入和输出分别为100和200 每百万令牌。开发者可以通过 Playground、文档和参考客户端开始构建应用。
未来,OpenAI 计划增加更多的模态支持,提高速率限制,提供官方 SDK 支持,引入提示缓存,并扩展模型支持。
示例代码
import fs from 'fs'; import decodeAudio from 'audio-decode'; // Converts Float32Array of audio data to PCM16 ArrayBuffer function floatTo16BitPCM(float32Array) { const buffer = new ArrayBuffer(float32Array.length * 2); const view = new DataView(buffer); let offset = 0; for (let i = 0; i < float32Array.length; i++, offset += 2) { let s = Math.max(-1, Math.min(1, float32Array[i])); view.setInt16(offset, s < 0 ? s * 0x8000 : s * 0x7fff, true); } return buffer; } // Converts a Float32Array to base64-encoded PCM16 data base64EncodeAudio(float32Array) { const arrayBuffer = floatTo16BitPCM(float32Array); let binary = ''; let bytes = new Uint8Array(arrayBuffer); const chunkSize = 0x8000; // 32KB chunk size for (let i = 0; i < bytes.length; i += chunkSize) { let chunk = bytes.subarray(i, i + chunkSize); binary += String.fromCharCode.apply(null, chunk); } return btoa(binary); } // Fills the audio buffer with the contents of three files, // then asks the model to generate a response. const files = [ './path/to/sample1.wav', './path/to/sample2.wav', './path/to/sample3.wav' ]; for (const filename of files) { const audioFile = fs.readFileSync(filename); const audioBuffer = await decodeAudio(audioFile); const channelData = audioBuffer.getChannelData(0); const base64Chunk = base64EncodeAudio(channelData); ws.send(JSON.stringify({ type: 'input_audio_buffer.append', audio: base64Chunk })); }); ws.send(JSON.stringify({type: 'input_audio_buffer.commit'})); ws.send(JSON.stringify({type: 'response.create'}));参考api文档:https://platform.openai.com/docs/guides/realtime/overview?text-generation-quickstart-example=stream
参考:https://openai.com/index/introducing-the-realtime-api/
网友回复
为啥所有的照片分辨率提升工具都会修改照片上的图案细节?
js如何在浏览器中将webm视频的声音分离为单独音频?
微信小程序如何播放第三方域名url的mp4视频?
ai多模态大模型能实时识别视频中的手语为文字吗?
如何远程调试别人的chrome浏览器获取调试信息?
为啥js打开新网页window.open设置窗口宽高无效?
浏览器中js的navigator.mediaDevices.getDisplayMedia屏幕录像无法录制SpeechSynthesisUtterance产生的说话声音?
js中mediaRecorder如何录制window.speechSynthesis声音音频并下载?
python如何直接获取抖音短视频的音频文件url?
js在浏览器中如何使用MediaStream与MediaRecorder实现声音音频多轨道混流?