22
Bass.dll
Пожалуй, у каждого delphi-кодера, который хоть раз занимался каким-нибудь серьёзным проектом, возникала мысль отказаться от использования стандартного TMediaPlayer в пользу чего-нибудь более серьёзного. Я, например, даже в простых софтинках уже привык использовать PlaySound (mmsystem), но это в простых… а если, например, появилось желание написать какую-нибудь игрульку?
Отлично подходят для этих целей dxSound и bass.dll. Первый способ хорош (и даже очень), но у меня получалось воспроизводить пока только wav, хотя позже и слышал о способах компрессии. В любом случае, «встраивать» архив всех используемых звуков в exe — не лучший выбор. Библиотека bass.dll хороша тем, что во-первых, позволяет работать (проигрывать, записывать, использовать эффекты, редактировать) с кучей аудио-форматов (есть также и дополнения для работы с FLAC, MIDI и т.п.), а во-вторых, совсем нетребовательна к ресурсам системы.
Для начала необходимо скачать архив с библиотекой и распаковать в папку с прожектом. Подключаем BASS в uses и объявляем глобальные переменные:
var
Chanell : HSTREAM;
Chanel2 : HSTREAM;
seeking: Integer = -1;
Каналов для проигрывания звука в нашем случае два. Также не лишним будет прописать процедуру выдачи ошибки при воспроизведении звука.
procedure TForm1.Error(msg: string);
var s: string;
begin
s := msg + #13#10 + ' (Код ошибки: ' + IntToStr(BASS_ErrorGetCode) + ')';
MessageBox(Handle, PChar(s), 0, 0);
end;
Не забываем добавить в раздел type:
procedure Error (msg: string);
В обработчике Form.OnCreate прописываем:
if (HIWORD(BASS_GetVersion) <> BASSVERSION) then
begin
MessageBox(0,'Недопустимая версия BASS.DLL при загрузке',0,MB_ICONERROR);
Halt;
end;
// Стандартные настройки звука, 44100hz, stereo, 16 bits
if not BASS_Init(-1, 44100, 0, Handle, nil) then
Error('Ошибка при нахождении звуковой карты!');
end;
Вот и все приготовления. Теперь, чтобы проверить как всё работает, кидаем в папку с проектом какой-нибудь аудио-файл, например, yoohoohoo.mp3 и в процедуре возникновении определённого события пишем:
var
i: integerl
f:PChar;
begin
f := PChar('yoohoohoo.mp3');
if fileexists (f) then
begin
Chanel := BASS_StreamCreateFile(false, f, 0, 0, BASS_STREAM_AUTOFREE);
if i >= 0 then
if not BASS_ChannelPlay(Chanell, false) then Error('Что-то пошло не так и воспроизвести файл не удалось.');
end;
Если нужно проигрывать файл по кругу, то указываем параметр BASS_SAMPLE_LOOP. Обо всех остальных параметрах можно прочесть в мануалах.
Остановка воспроизведения будет выглядеть так:
f := PChar('yoohoohoo.mp3');
if fileexists (f) then
if not BASS_ChannelStop(Chanel) then Error('Ошибка остановки воспроизведения!');
Много букв для запуска саунда? Ну так и процедурку отдельную можно состряпать по такому случаю.
3 коммент. к записи “Bass.dll”
Оставить комментарий
Последние комментарии
- Кос к записи Совсем немного Кирово-Чепецка
- UnKnOwn к записи Непонимашки февраля и марта
- Алексей к записи Железнодорожные билеты в кредит
- StM к записи Железнодорожные билеты в кредит
- Алексей к записи Непонимашки февраля и марта
- UnKnOwn к записи Непонимашки апреля
- UnKnOwn к записи Непонимашки февраля и марта
- Алексей к записи Кирово-Чепецк
- Алексей к записи Непонимашки апреля
- Алексей к записи Непонимашки февраля и марта
Облачко
Ссылки
- аренда звука . одежда через интернет недорого оптом .
Андрей пишет:
Полезно™, спасибо. Подумываю о том, чтобы кое-где отказаться от тормоза TMediaPlayer.
Алексей пишет:
@Андрей: тут даже не в тормозах дело (хотя и это тоже немаловажно). Софт с TMediplayer на разных машинах ведёт себя по-разному (с гораздо большим «разбросом», чем при использовании других способов воспроизведения).
alex пишет:
устал искать как не воспроизводить звук а взять готовый уже поющий поток?
нужен эквалайзер перехватывающий уже воспроизводимый медиа плеером или винампом или еще чем то звук bass.dll в этом случае как использовать