亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何播放 opus 解碼幀,或將 1 字節 pcm16 拆分為 2 字節 pcm?

如何播放 opus 解碼幀,或將 1 字節 pcm16 拆分為 2 字節 pcm?

Go
汪汪一只貓 2022-08-09 20:09:17
在錄制麥克風時,錄制的塊是原始的PCM8格式,我能夠通過更改bitDepthInBytes = 2來發送它并播放它而沒有任何噪音,但是當我通過網絡發送編碼的opus幀并將它們解碼為PCM16時,除非我將它們轉換為PCM8,否則我無法播放它們,但它很嘈雜。這是我的代碼:const sampleRate = 48000const channels = 1........    dec, err := opus.NewDecoder(sampleRate, channels)    if err != nil {        fmt.Println(err)        return    }    var frameSizeMs float32 = 20    frameSize := int(channels * frameSizeMs * sampleRate / 1000)    pcm := make([]int16, frameSize)    // (sampleRate int, channelNum int, bitDepthInBytes int, bufferSizeInBytes int)    context, err := oto.NewContext(sampleRate, channels, 1, frameSize*2)    if err != nil {        log.Fatal(err)    }    player := context.NewPlayer()    ...    ...    _, err := dec.Decode(data, pcm)    if err != nil {        fmt.Println(err)    }    var mask uint16 = 0x8000    pcm8 := make([]byte, frameSize)    for i := 0; i < frameSize; i++ {        // using this work and play sound but it has noise        pcm8[i] = byte((uint16(pcm[i]) ^ mask) >> 8)    }        _, _ = player.Write(pcm8)
查看完整描述

1 回答

?
三國紛爭

TA貢獻1804條經驗 獲得超7個贊

通過閱讀本文,我能夠知道如何將PCM緩沖區格式化為可播放的音頻字節 https://github.com/philfrei/AudioCue/blob/master/src/main/java/com/adonax/audiocue/AudioCue.java,這是我使用的片段:


public static byte[] fromBufferToAudioBytes(byte[] audioBytes, float[] buffer)

{

    for (int i = 0, n = buffer.length; i < n; i++)

    {

        buffer[i] *= 32767;

        

        audioBytes[i*2] = (byte) buffer[i];

        audioBytes[i*2 + 1] = (byte)((int)buffer[i] >> 8 );

    }

    

    return audioBytes;

}

這是我在代碼中更新的內容


    pcm8 := make([]byte, frameSize * 2)

    for i := 0; i < frameSize; i++ {

        //pcm[i] *= 32767 // uncomment when pcm array is float insteand of int16

        pcm8[i*2] =  byte(uint16(pcm[i]))

        pcm8[i*2 + 1] = byte(uint16(pcm[i]) >> 8)

    }


查看完整回答
反對 回復 2022-08-09
  • 1 回答
  • 0 關注
  • 177 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號