delphi - 如何在 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 中的样本数量。
解决方案
这可以很快解决我的问题,我希望它有所帮助:
使用此链接运行此命令行:
ffmpeg.exe -ss 60 -t 20 -y -i input.mp3 -ac 1 -ar 6000 -acodec pcm_u8 output.wav
这将使用给定的参数将 .mp3 文件转换为 .wav。
然后你就有了 .wav 文件,打开它,跳过波头,然后在 aBuffer 中读取它。
而已。
推荐阅读
- ios - ARC 如何循环工作?
- java - 在以下示例代码中,如何使用分页(限制/偏移)从选择查询中检索块中的数据?
- spring-data-jpa - spring 5.1.0.RC1 maven 3.8 java 10 事务未找到
- r - 在 R 中使用级别时日期格式发生变化
- google-cloud-platform - 如何批量加载从另一个来源生成的自定义 Avro 数据?
- python-3.x - python请求库的标头中的“内容类型”是什么意思,如果值为text/html;charset = UTF-8?
- vsto - VSTO 插件崩溃 Outlook
- php - 如何将新项目文件夹连接到现有 MAMP 数据库?
- drools - 作为 Maven 构建的一部分的 KIE Workbench 测试场景
- c - 从C中的函数推入堆栈