如何在 Delphi 中读取 MP3 文件进行音频处理?
how to read an MP3 file for audio processing in Delphi?
当我想以字节级别处理音频时,我总是将其转换为.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 文件(使用特定的给定参数),然后它必须删除 header,将其切片并放入它在 aBuffer 中,return aBuffer 中的样本量。
这可以很快解决我的问题,希望对您有所帮助:
使用 This Link 到 运行 这个命令行:
ffmpeg.exe -ss 60 -t 20 -y -i input.mp3 -ac 1 -ar 6000 -acodec pcm_u8 output.wav
这将使用给定的参数将 .mp3 文件转换为 .wav。
那么你就有了.wav文件,打开它,跳过wave header然后在aBuffer中读取它。
就是这样。
当我想以字节级别处理音频时,我总是将其转换为.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 文件(使用特定的给定参数),然后它必须删除 header,将其切片并放入它在 aBuffer 中,return aBuffer 中的样本量。
这可以很快解决我的问题,希望对您有所帮助:
使用 This Link 到 运行 这个命令行:
ffmpeg.exe -ss 60 -t 20 -y -i input.mp3 -ac 1 -ar 6000 -acodec pcm_u8 output.wav
这将使用给定的参数将 .mp3 文件转换为 .wav。
那么你就有了.wav文件,打开它,跳过wave header然后在aBuffer中读取它。
就是这样。