一 概念 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音频在实际应用中十分广泛。作为一个音频解决方案商,研究和应用它是一个非常重要的任务。
标签:24,16,++,printf,len,value,PCM,pcm24,uint32 From: https://www.cnblogs.com/dylancao/p/18282386