2016-06-15 17 views
2

У меня есть приложение, которое записывает аудио с микрофона и использует BASSenc для кодирования записи в формате MP3 с использованием LAME. Если вы выйдете из приложения и перезапустите его позже, вы можете загрузить и продолжить сеанс (запись).BASS/LAME Enc: Как правильно продолжить запись/кодирование MP3?

Все работает до сих пор. Тем не менее, мне интересно, как правильно продолжить поток записи/кодирования?

На данный момент я открыть старый файл, используя BASS_StreamCreateFile, начать запись и кодировщик и прочитать весь файл, используя BASS_ChannelGetData и BASS_Encode_Write к «передача» предыдущие данные по.

Я обеспокоен тем, что это не может быть «правильным» способом? Этот шаг займет больше времени и больше, чем больше запись. И я также думаю, что это потеря, потому что я загружаю MP3 с потерями и переписываю его, теряя еще больше информации. Не так ли? Или я ошибаюсь?

Есть ли способ сказать BASSenc/LAME просто использовать существующий файл и добавить к нему материал напрямую? Или я уже использую правильный подход?

(Delphi XE7, Windows, VCL)

ответ

0

Вы не можете непосредственно добавлять новые, несжатые данные в сжатом поток без распаковки его первого. Поэтому ваш подход кажется правдоподобным.

Размер может действительно стать проблемой в зависимости от максимальной предполагаемой длины ваших записей. Я обрабатываю несжатые и сжатые потоки до 1 ГБ, до сих пор не испытывая серьезных проблем с задержками. По крайней мере, на современных настольных компьютерах.

Однако способ оптимизации процесса состоял бы в том, чтобы не загружать старые данные сеанса перед записью новых данных, а вместо этого читать его перед сохранением нового сеанса на диск. Таким образом, вы можете начать запись сразу, не выделяя все больше и больше ОЗУ для процесса каждый раз.

«Правильное» и «неправильное» становится очевидным с результатами. Лучшим методом всегда является тот, который лучше всего работает с наименьшими усилиями по его достижению.

Множественное повторное кодирование, насколько мне известно, не должно оказывать никакого влияния на качество, если вы не использовали кодек с потерями.

Дайте мне знать, если вам нужен исходный код для этого.