首页 > 解决方案 > 如何在 Delphi 中读取 MP3 文件进行音频处理?

问题描述

当我想以字节级别处理音频时,我总是将其转换为 .wav 格式,然后进行处理。例如,在我的上一个项目中,我试图为我的音频文件生成一种特殊的波形图像,以便在视频剪辑中使用它。然后我使用在线工具将我的 .mp3 文件转换为 .wav 文件(单声道,8 位,6KHz),然后我以编程方式制作了我的波形图。

现在我希望能够直接对 .mp3 文件进行处理而无需转换,如下面的代码:

aFrom := 60000;   // From 00:01:00.000
aLength := 20000; // 20 Second 
aChannels := 1;   // mono
aBitsPerChannel := 8;
aFreq := 6000;

aBufSize := Open_MP3_As('d:\Until The Last Moment.mp3',
  aBuffer, aFrom, aLength,
  aChannels, aBitsPerChannel, aFreq);

for i := 0 to aBufSize - 1 do
begin
  // Processing aBuffer[i]
end;

这只是展示我的想法的一个例子。如您所见,.mp3 文件的元数据和详细信息对我来说并不重要。

这将非常有用,因为我可以将此功能嵌入到我的音频工具中,让用户更快、更轻松地使用我的工具。我知道这可能是一个非常复杂的代码,因为第一次必须将 .mp3 文件转换为 .wav 文件(带有特定的给定参数),然后它必须删除标题,将其切片并放入 aBuffer并返回 aBuffer 中的样本数量。

标签: delphibuffermp3waveformaudio-processing

解决方案


这可以很快解决我的问题,我希望它有所帮助:

使用此链接运行此命令行:

ffmpeg.exe -ss 60 -t 20 -y -i input.mp3 -ac 1 -ar 6000 -acodec pcm_u8 output.wav

这将使用给定的参数将 .mp3 文件转换为 .wav。

然后你就有了 .wav 文件,打开它,跳过波头,然后在 aBuffer 中读取它。

而已。


推荐阅读