实时音视频云

  • 外部音频输入

    最近更新时间:2018-07-02 10:28:24

    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);
    
    以上内容是否对您有帮助?
  • Icon free helper
    Close