如何在Delphi中读取MP3文件进行音频处理?

如何在Delphi中读取MP3文件进行音频处理?,delphi,buffer,mp3,waveform,audio-processing,Delphi,Buffer,Mp3,Waveform,Audio Processing,当我想以字节级别处理音频时,我总是将其转换为.wav格式,然后进行处理。例如,在我的上一个项目中,我试图为我的音频文件生成一种特殊的波形图像,用于视频剪辑。然后,我使用在线工具将.mp3文件转换成.wav文件(mono,8位,6KHz),然后以编程方式生成波形图片 现在,我希望能够在不进行转换的情况下直接对.mp3文件进行处理,如下面的代码所示: aFrom := 60000; // From 00:01:00.000 aLength := 20000; // 20 Second aCha

当我想以字节级别处理音频时,我总是将其转换为.wav格式,然后进行处理。例如,在我的上一个项目中,我试图为我的音频文件生成一种特殊的波形图像,用于视频剪辑。然后,我使用在线工具将.mp3文件转换成.wav文件(mono,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中的样本量。

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

用于运行此命令行:

ffmpeg.exe -ss 60 -t 20 -y -i input.mp3 -ac 1 -ar 6000 -acodec pcm_u8 output.wav
这将使用给定的参数将.mp3文件转换为.wav

然后你有了.wav文件,只需打开它,跳过wave头,然后在aBuffer中读取它


就是这样。

有大量的库/组件可用于处理音频/媒体数据。你环顾四周了吗?你试过其中任何一种吗?你知道吗,我可以用它们像我写的代码一样简单?或者我必须与一些复杂的(可能不是免费的)组件斗争,然后我增加我的项目的规模。你所做的工作越少,你将使用的库就越多。这可能意味着一个较小的项目将使用一个更大的库。在任何情况下,第三方推荐都是离题的。是的,你是对的,但我正在寻找一个真实的答案,有人能推荐一个免费的库,我可以用它做同样的事情吗?@MohammadAhmadzadeh只要去检查一些允许mp3播放和搜索功能的音频库就可以了。为什么要使用搜索功能?因为在大多数情况下,这样的库还能够呈现waweform的rugh可视表示,这正是您所寻找的。很不幸,我对任何一个自由的人都没有到期日。但我确实对BASS audio library()有一些功能,它有这样的功能,还有更多功能。但这不是免费的。当你在你的问题中明确表示:现在我希望能够在不转换的情况下直接对.mp3文件进行处理…?你在写,这是一种转换,但不是由我手动完成的。在我的正常编程中,我必须使用Adobe Audition将mp3文件转换为wav文件才能打开它。但现在我的应用程序浏览一个mp3文件,并在后台自动(快速)转换它。好的一点是,在我找到这个解决方案之前,我无法编写一个程序来处理mp3文件,但现在我能够编写一个程序,它不仅可以处理mp3文件,还可以通过ffmpeg处理所有已知的文件,如mkv、mp4、wma等等。。。。