Я обновил код из-за комментариев, которые показывают некорректную работу предыдущей версии кодировщика.И я полностью согласен с этими комментариями.
Чтобы создать кодировщик для FLAC, мы должны перейти на сайт un4seen и скачать следующие файлы:
- BASS аудио библиотека 2.4
- BASSFLAC 2.4.4
- BASSenc 2.4.14
- BASSenc_FLAC 2.4.1.1
Пройти черезэти папки и ищите следующие файлы:
bass.pas
bassenc.pas
bassenc_flac.pas
Сейчас местоэти pas-файлы в одну папку и добавьте их в Library
с помощью параметров Delphi's
.
После этого создайте новый проект, сохраните его в отдельной папке.
Затем перейдите в папки BASS_XXX и найдите *.dll
файлы.
Объедините их вместе в папке, где вы сохранили свой проект!
Теперь давайте напишем некоторый код.
Добавить в uses
предложение bass.pas
, bassenc.pas
и bassenc_flac.pas
.Затем скопируйте код, показанный ниже.
uses ..., BASS, BASSEnc, BASSEnc_FLAC;
...
TForm1 = class(TForm)
ProgressBar1: TProgressBar;
public
{ Public declarations }
procedure StartEncode(SourceFileName, OutputFileName: String);
procedure StopEncode;
end;
...
procedure TForm1.StartEncode(SourceFileName, OutputFileName: String);
var
PercentDone: Cardinal;
Buffer: array [0..1024] of Byte;
begin
Channel := BASS_StreamCreateFile(false, PChar(SourceFileName), 0, 0, BASS_MUSIC_DECODE or BASS_UNICODE);
BASSEnc_FLAC.BASS_Encode_FLAC_StartFile(Channel, 0, BASS_ENCODE_FP_AUTO or BASS_UNICODE, PChar(OutputFileName));
while BASS_ChannelIsActive(Channel) > 0 do
begin
BASS_ChannelGetData(Channel, @Buffer, 1024);
PercentDone := Trunc(100 * (BASS_ChannelGetPosition(Channel, BASS_POS_BYTE) / BASS_ChannelGetLength(Channel, BASS_POS_BYTE)));
ProgressBar1.Position := PercentDone;
end;
StopEncode;
end;
procedure TForm1.StopEncode;
begin
BASS_Encode_Stop(Channel);
BASS_StreamFree(Channel);
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
BASS_Init(-1, 44100, 0, Application.Handle, nil);
try
// Set name of file to convert it to FLAC and save it with output name
StartEncode('SourceFileName', 'OutputFileName');
finally
BASS.BASS_Free;
end;
end;
Одно замечание:
Действительно, файл, закодированный с предыдущей версией кода, имел неправильный заголовок (я мог видеть это, когда открывал файл в Notepad.exe
).После обновления кода я вижу действительный заголовок (конечно, в Блокноте, потому что у меня нет профессиональных инструментов для работы с аудио-файлами).
Теперь вам даже не нужно добавлять плагин к BASS
, как я это сделалранее.После этого я думаю, что кодер работает так, как ожидалось.