четверг, 14 января 2010 г.

Проигрывание звука с помощью BASS

Когда-то я рассказывал про проигрывание звука. Там для этого использовался компонент MediaPlayer. Однако на нём серьёзных программ для проигрывания не построить. Гораздо лучше воспользоваться профессиональными компонентами BASS, которые в HiAsm находятся на вкладке "Мультимедиа".

Для работы понадобится библиотека bass.dll. Она находится в папке рядом в HiAsm, её нужно скопировать в папку Windows. Можно, конечно, поместить её в папку с программой, но тогда её придётся помещать в папку с каждой программой, использующей BASS, а при копировании в Windows библиотека будет работать для всех программ на компьютере.
Если распространяете программу в Интернете, тоже не забудьте поставлять эту библиотеку.

А теперь перейдём к программированию. Найдите группу компонентов "BASS2.4". Это версия текущей библиотеки. Нам понадобится самый первый компонент - BASS_Init. Он инициализирует подсистему BASS, что необходимо для работы с BASS. Идеально это делать сразу при входе в программу, т.е. по событию формы onCreate.

У компонента также есть события. onInit происходит при успешной инициализации, и по нему можно выполнять какие-нибудь действия. onError - при ошибке инициализации. Это событие выдаёт в поток код ошибки, а его значение можно узнать из файла Elements\Delphi\code\bass.pas. Там они написаны в самом начале.

Ещё у компонента есть точки данных и параметры. Назначение точек данных вполне понятно, как и некоторых параметров. Но вот в группе параметров Flags назначение параметров не указано, поэтому я их здесь опишу.
8bit - использовать 8-битное разрешение или 16-битное.
mono - использовать моно или стерео.
3D - включить или отключить трёхмерные возможности устройства.




Кроме этого, в группе "BASS2.4" есть ещё компоненты. BASS_CPU и BASS_Version нужны для получения информации (о загрузке процессора и версии BASS соответственно), а BASS_Device и BASS_Volume - для получения и установки нужных значений (устройства для вывода звука и громкости всей подсистемы BASS). Эти компоненты просты, с ними не составит труда разобраться.

Теперь посмотрим на группу "BASS потоки". Компоненты здесь нужны для загрузки или создания звука. Возьмём первый - BASS_StreamCreateFile. Даже по названию понятно, для чего он нужен. Он может проигрывать следующие форматы: MP3, MP2, MP1, OGG, WAV, AIFF. У компонента есть множество параметров в группе Flags, некоторые из которых совпадают с рассмотренными выше.
Loop - циклическое проигрывание файла.
Software - не использовать аппаратное микширование.
FX - разрешить использование эффектов DirectX 8.

Эти определения я брал из справки по bass, к сожалению, в HiAsm никаких справок на эту тему нет.

Компонент BASS_StreamCreateURL делает то же самое, что и предыдущий компонент, только предназначен для загрузки музыки из Интернета. Он снабжён некоторыми дополнительными параметрами и точками, но в целом работа с ним не сильно отличается от работы с BASS_StreamCreateFile.

BASS_StreamCreate предназначен для создания звука из потока. Для него не нужен файл - для него нужны 2 байта для создания соответствующего звука. Очень хорошо работу с этим компонентом демонстрирует стандартный пример Elements\Delphi\Example\Media\BASS\PlayStreamMix.sha.

Остаётся ещё один компонент - BASS_MusicLoad. Он загружает музыку форматов MO3 / IT / XM / S3M / MTM / MOD / UMX. В подсказке к этому компоненту HiAsm версии 4.02 build 179 есть ошибка: неправильно указаны форматы. Поэтому обратите на это внимание.

Мы разобрались с загрузкой, но теперь надо как-то проиграть загруженный файл. Поэтому переходим к новой группе компонентов - "BASS каналы". Вообще, компоненты с этой вкладки полностью управляют проигрыванием и позволяют получить разную информацию из проигрываемого потока. Самый нужный сейчас для нас - это BASS_ChannelPlay. Он проигрывает звуковой поток.

Сейчас вам главное - понять, как указать компоненту, какой поток проигрывать (ведь загрузить можно несколько потоков). Раньше, в предыдущих версиях HiAsm, создавался идентификатор потока в виде точки внизу и подключался к верхней точке компонента для управления потоком. Сейчас используется технология менеджеров. В компоненте BASS_StreamCreateFile (и ему подобных) нужно указать имя звукового потока в параметре Name. Оно выбирается произвольно. А в BASS_ChannelPlay нужно выбрать в параметре Channel желаемый поток (имя).



В примере потоку дано имя firststream, но вы можете называть потоки как угодно.

Рассмотрим и другие компоненты для управления звуковым потоком.



Разобраться здесь будет несложно, однако обратите внимание на некоторые особенности.
Чтобы после паузы запустить проигрывание, нужно вновь нажать "Пуск", а не "Пауза".
Компонент BASS_ChannelPlay содержит нижнюю точку, по которой можно узнать, проигрывается ли поток.
Громкость в BASS изменяется в пределах от 0 (минимум) до 1 (максимум). Разумеется, возможны дробные значения, но ScrollBar выдаёт только целые числа, поэтому ставить максимум 1 в нём нельзя: не будет градации звука (т.е. возможности плавного изменения). Я в примере выставил максимум 100, а полученные значения делю на 100. У Math при этом ResultType=Real. Вот и получаются дробные значения, которые можно передавать компоненту.
Конечно, можно установить максимум 1000 и делить на 1000 - так будет больше градаций (плавности изменения звука). Можно выбрать любое число.

Обратите внимание на два последних компонента: BASS_ChannelEnumTags и BASS_ChannelFX_Eq. Первый вытаскивает из звукового потока теги, второй компонент - эквалайзер.

В первом важно правильно выбрать тип тегов в параметре Type. Обычные mp3-теги - это ID3v2 теги (просто ID3 - это старая версия таких тегов).






Экологически чистый продукт - капсулы для похудения лида. Изготавливается из трав провинции Юньнань.

Немедленно запретить курительные смеси! Самые разные легальные миксы goaspirit (гоаспирит), hydro fire (гидро фаер), eclipse moon (эклипс мун), goamoon (гоамун), goasun (гоасан) и по низким ценам - запретить.

Комментариев нет:

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