2

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

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

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

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

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

(德尔福 XE7、Windows、VCL)

4

1 回答 1

1

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

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

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

“正确”和“错误”在结果中变得明显。最好的方法总是以最少的努力达到最好的效果。

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

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

于 2016-09-17T03:35:48.490 回答