ajax里的rtn,外部音频输入

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)构建

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

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)构建 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);
经验分享 程序员 微信小程序 职场和发展