如何在 UNIX 系统上播放 PCM 文件?

如何在 UNIX 系统上播放 PCM 文件?

我正在尝试弄清楚如何使用自由主义用 C 语言。问题是,libmad 将音频文件转换为 .pcm 文件,而我找不到播放这些文件的方法。没有简单的 .pcm 播放器,每次我尝试用它打开 pcm 文件时,Audacity 都会崩溃。有没有人有这方面的经验?我愿意将这些 pcm 文件转换为 wav 文件或其他格式,但同样没有简单的方法可以做到这一点(至少我还没有找到)。

答案1

你确定你获取的是有效的 PCM 数据吗?你获取的是哪种类型的 PCM?

基本PCM用于音频 CD以及WAV 文件从 CD 中截取的;它应该可以用几乎任何东西播放。具体来说,它是 16 位(每个样本)、44.1 kHz(采样率)、立体声(2 声道)。播放这种 PCM 非常简单,只需cat file.pcm > /dev/audio(或/dev/dsp或其他合适的音频设备)。

libmad 主页表示 libmad 可能默认输出 24 位 PCM,如果您的播放器软件期望的是标准 16 位 PCM,则可能会对此感到困惑。如果您还没有这样做,请根据madlld(libmad 低级 API 教程)以确保您从库中获得正确的输出。

由于 PCM 数据不像 WAV 文件那样包含标头,因此您可能需要指定 PCM 格式,以便程序正确加载文件。Audacity 应该能够处理任何标准 PCM 格式。

您还可能会从 获得无效的 PCM 输出libmad,这是由于库中的错误或由于您的代码对库的不当使用。

答案2

`ffplay

在 Ubuntu Linux 15.10 上测试:

sudo apt-get install ffmpeg
ffplay -autoexit -f u16be -ar 44100 -ac 1 in.raw

或者:

sudo apt-get install play
play -b 16 --endian big -e unsigned -r 44100 in.raw

ffplay选项:

  • -autoexit:流结束时退出播放器
  • -f: 格式:
    • u:未签名
    • 16:每个值 16 位
    • be:大端字节序
  • -ar:采样频率
  • -ac:通道数

play选项:比较值;-)

如何生成自己的示例.raw文件以供使用的示例:https://stackoverflow.com/questions/732699/how-is-audio-represented-with-numbers/36510894#36510894

也可以看看:https://stackoverflow.com/questions/20314739/how-to-play-pcm-sound-file-in-ubuntu

答案3

也许你可以使用类似的工具袜子

SoX 是一款跨平台(Windows、Linux、MacOS X 等)命令行实用程序,可以将各种格式的计算机音频文件转换为其他格式。它还可以对这些声音文件应用各种效果,而且,作为一项额外功能,SoX 可以在大多数平台上播放和录制音频文件。

相关内容