Delphi: BASS.dll - как скопировать часть потока MP3 в другой файл

Я использую библиотеку BASS.dll, и все, что я хочу сделать, это «перенаправить» часть MP3, которую я играю, используя, например, BASS_StreamCreateFile, в другой файл (может быть MP3 или WAVe). Я не знаю, как начать? Я пытаюсь использовать помощь, чтобы найти ответ, но все равно ничего. Я могу играть в этот поток. Прочтите некоторые данные, которые мне нужны. Теперь мне нужно скопировать ile например с 2:00 до 2:10 (или по позициям). Любые идеи, как я должен начать?

С уважением, Дж.К.


person Jakub Krol    schedule 15.11.2011    source источник
comment
1) Найдите правильное положение. 2) Скопируйте данные в буфер. 3) Создайте выходной файл. 4) Скопируйте буфер в выходной файл. С какой частью(ями) у вас возникли проблемы?   -  person Mason Wheeler    schedule 15.11.2011
comment
Я не хочу копировать часть файла. Я хочу скопировать часть MP3 в другой MP3. Я не могу просто скопировать, например, X байтов.   -  person Jakub Krol    schedule 15.11.2011


Ответы (1)


Ну, я не знаю конкретно BASS, но я немного знаком с воспроизведением музыки и форматами сжатых данных в целом, и правильное копирование данных включает промежуточный этап декодирования. Вот что вам нужно сделать:

  1. Откройте файл и найдите правильное положение.
  2. Декодируйте звук в буфер в памяти. Размер вашего буфера должен быть (LengthInSeconds * SamplesPerSecond * Channels * BytesPerSample) байт. Таким образом, если это 10 секунд звука с качеством CD, это 10 * 44100 * 2 (стерео) * 2 (16-битное аудио) = 1764000 байт.
  3. Возьмите этот буфер декодированных данных и загрузите его в функцию кодирования MP3 и сохраните полученный MP3 в файл.

Если в BASS есть функции декодирования во внешний буфер и кодирования буфера в MP3, все в порядке; все, что вам нужно сделать, это выяснить, какие из них использовать. Если нет, вам придется найти другую библиотеку для кодирования и декодирования MP3.

Кроме того, следите за потерей поколений. MP3 использует сжатие с потерями, поэтому, если вы распаковываете и повторно сжимаете данные несколько раз, это ухудшит качество звука.

person Mason Wheeler    schedule 15.11.2011
comment
Это хороший момент, спасибо. Я попробую, и я также попытаюсь найти другую библиотеку для этого. И я дам вам знать - если это сработает, я приму этот ответ. - person Jakub Krol; 16.11.2011