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

Delphi BASS/LAME Enc:如何正确继续MP3录制/编码?,delphi,mp3,audio-recording,lame,bass,Delphi,Mp3,Audio Recording,Lame,Bass,我有一个应用程序,可以从麦克风录制音频,并使用BASSenc将录音编码为MP3,使用LAME。 如果退出应用程序并稍后重新启动,则可以加载并继续(录制)会话 到目前为止一切正常。但是,我想知道继续录制/编码流的正确方法是什么 此时,我使用BASS\u StreamCreateFile打开旧文件,开始录制和编码器,并使用BASS\u ChannelGetData和BASS\u Encode\u Write读取整个文件,以“传输”上一个数据 我担心这可能不是“正确”的方式?录音越大,这一步需要的时间

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

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

此时,我使用
BASS\u StreamCreateFile
打开旧文件,开始录制和编码器,并使用
BASS\u ChannelGetData
BASS\u Encode\u Write
读取整个文件,以“传输”上一个数据

我担心这可能不是“正确”的方式?录音越大,这一步需要的时间就越长。我还认为它是有损的,因为我加载了一个有损的MP3并重新编码,丢失了更多的信息。不是吗?还是我错了

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


(Delphi XE7,Windows,VCL)

如果不先解压缩,就不能将新的未压缩数据直接附加到压缩流中。所以你的方法似乎是可行的

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

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

“对”和“错”随着结果变得明显。最好的方法总是用最少的努力达到最好的效果

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

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