Fork me on GitHub

一 概念
1.24bit音频:
24bit 指使用 3 个字节记录振幅值,意味可以记录 16,777,216 种声音振幅的变化,动态范围可达 144 dB(人耳听觉的动态范围是120dB,超过 120dB 人耳会痛,所以 120dB 又称痛阀)。下面是三种常见的音频采样比对表:
 
2.24位一般是采样深度的概念,还有一个采样率的概念,比如,16k,48k等。这两者的关系下图可以清晰的展现:

二 实例解析:
下面直接给出两份源码,就是24bit和16bit的相互转换实例:
#include <stdio.h>

typedef unsigned char uint8_t;
typedef unsigned int uint32_t;

short array_16bit[] = {0,22618,31999,22654,50,-22582,-31999,-22690,-114};

uint8_t pcm24[200];

void dump8(uint8_t *data,uint32_t len)
{
  for (uint32_t i = 0; i < len; i++)
  {
    /* code */
    printf("0x%x,",data[i]);
  }

  printf("\n\r");

}


uint32_t pcm16_to_pcm24(short *data,uint32_t len)
{
        uint32_t j = 0;

        for(uint32_t iss = 0;iss < len; iss++)
        {
                int value = ((float)data[iss]/0x7fff)*16777216;
                printf("value is:%d \n\r",value);
                pcm24[j++] = value & 0xff;
                pcm24[j++] = (value & 0xff00)>>8;
                pcm24[j++] = (value & 0xff0000)>>16;
        }

        return j;
}

int main()
{
        uint32_t len = pcm16_to_pcm24(array_16bit,9);
        printf("pcm16_to_24bit len is:%d \n\r",len);
        dump8(pcm24,len);

        return 0;
}
三 总结
24bit音频在实际应用中十分广泛。作为一个音频解决方案商,研究和应用它是一个非常重要的任务。

 

posted on 2024-07-03 18:47  虚生  阅读(264)  评论(0编辑  收藏  举报