audio - 如何减少wav流的数量?

标签 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

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

最佳答案

flac可能解码到比8位更高的位深度。在这种情况下,您需要将两个字节组合成一个短字节,然后乘以增益。想象一下一个16位的0x7fff样本。当除以二时,您期望结果为0x3fff。但是,由于您将每个字节分开划分,因此结果将是0x3f7f。您需要注意的另一个问题是标志。

未经测试,但类似的东西应该适用于16位带符号:

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

关于audio - 如何减少wav流的数量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33368350/

相关文章:

ios - 在 iOS 应用程序中打包 6000 多个声音文件的最佳方法是什么

html - 在twilio mp3录制URL上进行范围请求时,将接受范围设置为无

winapi - 在压缩的 Windows 上存储声音的好格式是什么?

audio - FLAC音频格式是否有多种质量设置?

ffmpeg - 使用 FFMPEG 创建 HLS FLAC 流

audio - FFMPEG:组合多个过滤器时指定输出流类型

python - 使用 Python 对 wav 文件每秒执行 FFT

c - 为什么不使用 sf_read_double 读取此音频文件?

java - jFLAC。分割 FLAC 文件

c# - 在.NET(C#或VB.NET)中生成摩尔斯电码(或任何音频),而无需第三方依赖,也无需使用音频文件