Delphi: BASS.dll - как скопировать часть MP3-потока в другой файл - PullRequest
2 голосов
/ 15 ноября 2011

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

С уважением, JK

1 Ответ

3 голосов
/ 15 ноября 2011

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

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

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

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

...