将 PCM 16 位音频转换为 PCM 8 位

Posted

技术标签:

【中文标题】将 PCM 16 位音频转换为 PCM 8 位【英文标题】:Converting PCM 16 bit audio to PCM 8 bit 【发布时间】:2013-06-27 10:54:21 【问题描述】:

我想在我的 android 录音应用中实现使用 PCM 16 位和 PCM 8 位进行录音的可能性。我有一个问题converting a byte[] PCM 16 bit to 8 bit,我尝试了不同的方法,but the size of the recording remained the same (for PCM 8 bit the size should be half of the PCm 16 bit)。以下是这两种方法:

第一个:

        if(encoding == AudioFormat.ENCODING_PCM_8BIT)
            int i,j;
            int tempint;
            int len = data.length;
            for (i=1, j=0; i<len; i+=2, j++)
               tempint = ((int) data[i]) ^ 0x00000080;
               data[j] = (byte) tempint;                    
            
        

第二个:

        if(encoding == AudioFormat.ENCODING_PCM_8BIT)
            int len = data.length;
            for (int i=0, i<len; i++)
                data[i] = (byte)(data[i] >> 8);
            
        

【问题讨论】:

如果您使用相同的数组来存储转换后的数据,那么它当然具有相同的大小。您必须将其写入新数组 你是对的,是我的一个错误(现在有点累)。请发布您的答案,以便我接受。谢谢。 【参考方案1】:

如果您使用相同的数组来存储转换后的数据,那么它当然具有相同的大小。您必须将其写入新数组。

【讨论】:

以上是关于将 PCM 16 位音频转换为 PCM 8 位的主要内容,如果未能解决你的问题,请参考以下文章

在 C/C+ 中从 16 位线性 PCM 音频转换为 32 位浮点的最佳方法?

PCM音频实时播放:音频字节数组(16/8位)转为PCM ArrayBuffer流

将 32 位浮点数转换为 16 位 PCM 范围

混合 PCM 音频样本

线性 PCM 16 位到 8 位

Microsoft 认知服务 SST 支持哪些音频格式?为啥 16 位 PCM x.wav 成功而 32 位 PCM y.wav 不成功?