如何减少wav流量?

时间:2015-10-27 12:45:38

标签: audio wav flac

我有一个flac文件。我想通过" flac -dc"解码它。命令,读取命令输出的wav流,将音量减半并输出信号。这是我的实际代码:

#include <stdio.h>
#include <stdlib.h>

int main( int argc, char *argv[] ) {

   FILE *stream;
   int16_t normal, decreased;

   stream = popen( "/usr/bin/flac -dc 1.flac", "r" );

   while( feof( stream ) == 0 ) {

       normal = fgetc( stream );
       decreased = (int16_t) (normal * 0.5f);

       printf( "%c", decreased );
   }

   pclose( stream );

   return 0;
}

但是,当我运行此程序并通过此命令将其输出重定向到音频系统时:

./myprogram | aplay -f dc

声音严重失真。如果我尝试通过&#34; mpg123 -s&#34;解码mp3文件,情况就不会改变。命令。怎么了?

1 个答案:

答案 0 :(得分:0)

flac可能正在解码到高于8位的位深度。在这种情况下,您需要将两个字节组合成一个短路,然后乘以增益。想象一下16位的0x7fff样本。除以2时,您希望结果为0x3fff。但是既然你要分别划分每个字节,你的结果就是0x3f7f。您需要注意的另一个问题是标志。

未经测试但是这样的事情应该适用于16位签名:

while( feof( stream ) == 0 ) {
    normal = (int16_t)((fgetc(stream) << 8) | (fgetc(stream));
    decreased = (int16_t) (normal * 0.5f);
}