BASS / LAME Enc:如何正确继续录制MP3 /编码?

时间:2016-06-15 15:57:46

标签: delphi mp3 audio-recording lame bass

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

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

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

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

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

(Delphi XE7,Windows,VCL)

1 个答案:

答案 0 :(得分:1)

您无法直接将新的未压缩数据附加到压缩流中,而无需先将其解压缩。所以你的方法似乎有道理。

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

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

"右"并且"错误"结果变得明显。最好的方法总是能够以最少的努力实现它。

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

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