【发布时间】:2016-05-11 17:45:31
【问题描述】:
我正在将 MP3 文件转换为原始 PCM,我需要将其保存为原始 PCM。 (注意,我正在使用 Java/RoboVM 移植到 iOS。)
我正在使用 coreaudio 包,我的代码的相关部分如下所示:
// Define the output PCM format.
AudioStreamBasicDescription outputFormat = new AudioStreamBasicDescription();
outputFormat.setFormat(AudioFormat.LinearPCM);
outputFormat.setFormatFlags(AudioFormatFlags.Canonical);
outputFormat.setBitsPerChannel(16);
outputFormat.setChannelsPerFrame(1);
outputFormat.setFramesPerPacket(1);
outputFormat.setBytesPerFrame(2);
outputFormat.setBytesPerPacket(2);
outputFormat.setSampleRate(22050);
// ...
outputFile = ExtAudioFile.create(outputFileURL, AudioFileType.CAF, outputFormat, null, AudioFileFlags.EraseFile);
然后我运行一个循环,从 MP3 文件读取并写入输出文件。
将这个原始文件导入 Audacity 后,我注意到它在开始时总是有一个尖峰,这表明它实际上不是原始 PCM 文件,而是位于带有标题的包装器内(无论是 WAV 还是 CAF 标题,等)。
我知道我可以只删除文件并去掉标题并获取原始 PCM 数据,但就我的应用程序这一部分的空间/性能而言,如果我能保持简单并保存,我会很高兴原始 PCM 数据没有包装器,但我不知道该怎么做。
问题出现在这里:
outputFile = ExtAudioFile.create(outputFileURL, AudioFileType.CAF, outputFormat, null, AudioFileFlags.EraseFile);
AudioFileType 的选择不多,我试过 WAVE 和 CAF。理想情况下会有 PCM 或 RAW 选项,但没有。我应该选择一个特定的AudioFileType,还是需要另一种方式?
【问题讨论】:
标签: ios audio core-audio robovm