我有一个应用程序,用于记录麦克风的音频,并使用BASSenc
使用LAME
将录音编码为MP3。
如果退出应用程序并稍后重新启动,则可以加载并继续(录制)会话。
到目前为止一切正常。但是,我想知道继续录制/编码流的正确方法是什么?
目前我使用BASS_StreamCreateFile
打开旧文件,启动录制和编码器,并使用BASS_ChannelGetData
和BASS_Encode_Write
读取整个文件,以“传输”之前的数据。
我担心这可能不是“正确”的方式吗?录制得越大,此步骤将花费越来越长的时间。我也认为它是有损的,因为我加载了一个有损MP3并重新编码,丢失了更多的信息。不是吗?或者我错了吗?
有没有办法告诉BASSenc / LAME只使用现有文件并直接添加内容?或者我已经使用了正确的方法吗?
(Delphi XE7,Windows,VCL)
答案 0 :(得分:1)
您无法直接将新的未压缩数据附加到压缩流中,而无需先将其解压缩。所以你的方法似乎有道理。
尺寸可能确实成为问题,具体取决于录制的最大预期长度。我处理的是未压缩和压缩的流,最高可达1 GB,到目前为止还没有遇到延迟的重大问题。至少在现代台式机上没有。
但是,优化流程的一种方法是不在记录新数据之前加载旧会话数据,而是在将新会话保存到磁盘之前读取它。这样,您可以立即开始录制,而无需每次都为流程分配越来越多的RAM。
"右"并且"错误"结果变得明显。最好的方法总是能够以最少的努力实现它。
据我所知,如果您没有使用有损编解码器,多重编码不应对质量产生任何影响。
如果您需要支持源代码,请告诉我。