delphi - 低音/LAME编码: How to properly continue MP3 recording/encoding?

标签 delphi mp3 audio-recording lame bass

我有一个应用程序,可以从麦克风录制音频,并使用 BASSenc 使用 LAME 将录音编码为 MP3。 如果您退出应用程序并稍后重新启动,则可以加载并继续(录制) session 。

到目前为止一切正常。但是,我想知道继续录制/编码流的正确方法是什么?

目前,我使用 BASS_StreamCreateFile 打开旧文件,启动录制和编码器,并使用 BASS_ChannelGetDataBASS_Encode_Write 读取整个文件将之前的数据“转移”过来。

我担心这可能不是“正确”的方式?录音越大,此步骤将花费越来越长的时间。而且我还认为它是有损的,因为我加载了有损 MP3 并重新编码它,丢失了更多信息。不是吗?还是我错了?

有没有办法告诉 BASSenc/LAME 仅使用现有文件并直接向其附加内容?或者我已经使用了正确的方法?

(德尔福 XE7、Windows、VCL)

最佳答案

如果不先解压缩,您无法直接将新的未压缩数据附加到压缩流中。所以你的方法似乎是合理的。

大小确实可能成为一个问题,具体取决于录音的最大预期长度。我正在处理高达 1 GB 的未压缩和压缩流,到目前为止,没有遇到重大延迟问题。至少在现代台式机上不是这样。

但是,优化该过程的一种方法是在记录新数据之前加载旧 session 数据,而是在将新 session 保存到磁盘之前读取它。这样您就可以立即开始录制,而无需每次都为进程分配越来越多的 RAM。

“对”和“错”随着结果变得显而易见。最好的方法始终是用最少的努力实现效果最好的方法。

据我所知,如果您不使用有损编解码器,多次重新编码不会对质量产生任何影响。

如果您需要支持源代码,请告诉我。

关于delphi - 低音/LAME编码: How to properly continue MP3 recording/encoding?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37840379/

相关文章:

javascript - 录制使用javascript播放的声音

delphi - 如何使用Delphi在virtualtree组件中保存/加载文件?

delphi - exceptProc 在 Windows 中未被调用

c++ - 使用 VSC++ 代码在 Pocket PC 上播放 mp3

java - jlayer.javazoom播放器无法停止mp3

linux - 录制音频以进行语音识别

delphi - 随机文件名

delphi - 为什么调试器在 for-in 循环中单步执行析构函数?

audio - 如何检测文件是否使用 mp3PRO 编码?

android - 如何在音频文件中找到特定单词的位置?