Web SDK 从 v1.0.0 版本增加了外部音频输入的功能,用户可以自定义音频的输入数据,不必依赖麦克风采集。
音频输入格式
在 Web 标准中,我们一般把需要操作的音频数据存放在 AudioBuffer 中, 实际这里存放的也就是 PCM 数据,下面我们介绍在不同情况下如何构建一个 AudioBuffer。
通过 PCM 数据构建
假设目前有一组单声道的 PCM 数据,下面的代码将会通过这个 PCM 创建相应的 AudioBuffer。
const PCM = [....] // 一组 PCM 数据
const audioCtx = new AudioContext();
const audioBuffer = audioCtx.createBuffer(1, PCM.length, 44100); // 其中 44100 为采样率
const channelData = audioBuffer.getChannelData(0);
for (let i = 0; i < PCM.length; i++) {
channelData[i] = PCM[i]; // 填入 PCM 数据
}
通过音乐文件(.mp3 .ogg)构建
音乐文件可以来源于用户本地上传,也可以来源于网络 ajax 获取,这里的前提是获取到了音乐文件的二进制数据,一般为一个 FloatArray
import { decodeAudioData } from "pili-rtc-web";
const audioData = [...] // 通过 ajax 或者 fileReader 拿到的文件数据
decodeAudioData(audioData).then(audioBuffer => {
console.log("audioBuffer", audioBuffer);
}).catch(e => { throw e; })
配置外部音频输入
如果需要打开外部音频输入,需要在 getLocalStream 时声明
const stream = deviceManager.getLocalStream({
audio: {
enabled: true,
buffer: ture, // 声明使用外部音频输入
},
})
当上文中的 audioBuffer 准备好时,通过如下代码输入外部音频
const audioBuffer = ...
const stream = deviceManger.getLocalStream({...}) // 见上
stream.setAudioBufferData(audioBuffer);