Июн
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”

  • Полезно™, спасибо. Подумываю о том, чтобы кое-где отказаться от тормоза TMediaPlayer.

  • @Андрей: тут даже не в тормозах дело (хотя и это тоже немаловажно). Софт с TMediplayer на разных машинах ведёт себя по-разному (с гораздо большим «разбросом», чем при использовании других способов воспроизведения).

  • устал искать как не воспроизводить звук а взять готовый уже поющий поток?
    нужен эквалайзер перехватывающий уже воспроизводимый медиа плеером или винампом или еще чем то звук bass.dll в этом случае как использовать

Оставить комментарий

Также Вы можете войти с помощью: Yandex Google Вконтакте Mail.ru Twitter Loginza MyOpenID OpenID WebMoney

Последние комментарии

Облачко

.рф 02 2012 Apple avidemux Beeline Canon delphi facebook fail Google Intellect Money Italiano LOL Mail.ru MoneyMail OTP-банк PayPal PR Qiwi roverpad roverpc RURU Tele2 twitter ubuntu WebMoney wifi WikiLeaks wikipedia YouTube Адлер Александр II Астана Банк Русский Стандарт Белоруссия Белых Богородск Волгателеком Вятка Две звезды ЕГЭ ЕдРо Екатеринбург ЖКХ Жириновский Задорнов Идеи Израиль КХСМ Казахстан Карусель Каспаров Киев Кирово-Чепецк Котельнич Ленин Лукашенко МТС МакДоналдс Мегафон Михалков Молоток Москва Московская область Наша Russia Нижегородская область Нижний Новгород Николай II Нововятск Один против всех Одноклассники Павел I Пенза Плехов Польша Путин Пятёрочка РЖД Распутин Роисся Романовы Российская империя Россия США Санкт-Петербург Саранск Сбербанк Сергиев Посад Слободской Соловьёв Украина Фарафонов Финляндия Ходорковский Царское село Челябинск ЭПС Эр-телеком Яндекс аварии банки безопасность блог большая разница бюрократизм вКонтакте видеообработка визы винда виртуальная карта власть вредные привычки выборы выставка глупости глюки гости дела военные дела духовные долги дом-2 забавное законы катаклизмы кино кодинг конкурсы копирайты кредит культура лотереи ляпота медицина метро мытищи налоги непонимашки образование олимпиада опросы открытая студия памятники паранойя паспорт переписка перепись персональные данные пластиковые карты поединок поезда показуха полезные ссылки политика посткроссинг почта праздники программа передач пусть говорят путешествия пьянство работа реклама русский язык сберкнижки связь сервис совок спам справедливость среда обитания страхование сувениры таможня телевидение терминалы технологии транспорт фауна финансы фотосъёмка футбол футубра хамство химия хостеры цены чтиво

Ссылки

Статистика

Рейтинг блогов