Основы работы с Bass.NET

Библиотека Bass.dll хорошо зарекомендовала себя при написании приложений для работы со звуком. Единственный серьёзный недостаток – она не предназначена для использования в .NET приложениях. Для того чтобы его исправить была создана библиотека Bass.NET.

Bass.NET это «обёртка» для Bass.dll, которая позволяет использовать эту библиотеку в среде .NET Framework.

Подготовка к работе

Для начала необходимо скачать с официальной страницы на сайте разработчика сразу две библиотеки:

  1. Обычную или нативную Bass.dll;
  2. Библиотеку Bass.NET

После этого нужно распаковать архив с Bass.NET и запустить программу установки. Сам процесс установки интуитивно понятен и не представляет сложностей.

Чтобы при работе не появлялась заставка Bass.NET необходимо зарегистрировать Ваш экземпляр библиотеки и получить лицензию. На момент написания данной статьи лицензия для freeware разработчиков предоставлялась бесплатно. Для коммерческой разработки цена составляла от 29 до 499 € в зависимости от условий использования.

Подготовка проекта

Если установка Bass.NET выполнена правильно, то в списке расширений появится сборка BASS.NET API for .Net.

Сборка в списке

После того как сборка будет подключена нужно выполнить компиляцию проекта и скопировать в папку со скомпилированной программой нативную библиотеку bass.dll. Чтобы это не приходилось делать постоянно, можно поместить эту библиотеку в корневую папку проекта, а затем добавить её в проект и установить для свойства «Копировать в выходной каталог» значение «Всегда копировать».

Библиотеку Bass.NET.dll обычно копировать не требуется, так как она копируется автоматически при компиляции программы.

Инициализация библиотеки

Вначале необходимо подключить пространство имён Un4seen.Bass.

 Инициализация библиотеки Bass.NET выполняется с помощью метода Init класса Bass. Нижеприведён пример инициализации Bass.NET для устройства воспроизведения по умолчанию с параметрами по умолчанию.

 Первый параметр обозначает устройство воспроизведения (-1, устройство по умолчанию);
  • Второй параметр частоту дискредитации;
  • Третий параметр – флаги инициализации (BASSInit.BASS_DEVICE_DEFAULT соответствует инициализации с параметрами по умолчанию);
  • Четвёртый параметр — Handle окна, если приложение имеет оконный интерфейс. Однако, даже в оконных приложениях можно передавать не Handle, а IntPtr.Zero. На работу библиотеки это существенно не повлияет.
Воспроизведение звуковых файлов.

Чтобы воспроизвести звуковой файл необходимо создать защищённое целочисленное поле, через которое будет осуществляться обращение к потоку воспроизведения.

 По сути это идентификатор потока воспроизведения.

Далее необходимо создать этот поток. Для этого служит ряд методов класса Bass.

Если нужно воспроизвести файл с диска используется метод BASS_StreamCreateFile.

 Первый параметр – полный путь к файлу;
  • Второй параметр – позиция относительно начала файла, с которой начинается формирование потока (0 – данные поступают в поток с самого начала файла);
  • Третий параметр – длина считываемых данных из файла (0 – в поток считывается весь файл);
  • Четвёртый параметр – флаги (BASSFlag.BASS_DEFAULT соответствует формированию потока с параметрами по умолчанию).

Если же требуется воспроизвести потоковое аудио используется метод BASS_StreamCreateURL.

 Первый параметр – URL, с которого осуществляется потоковая передача;
  • Второй параметр – позиция с которой начинается формирование потока. По своей сути он аналогичен второму параметру метода BASS_StreamCreateFile;
  • Третий параметр – флаги. По своей сути он аналогичен четвёртому параметру метода BASS_StreamCreateFile;
  • Четвёртый параметр – метод обратного вызова, который будет выполнять по мере получения данных (null – метод обратного вызова не используется).
  • Пятый параметр – пользовательские данные для передачи в метод обратного вызова (IntPtr.Zero – если отсутсвуют).

Когда поток будет создан, можно начинать его воспроизведение с помощью метода BASS_ChannelPlay.

 Этот метод принимает только два параметра.
  • Поток воспроизведения (точнее целочисленное поле с его идентификатором);
  • Признак циклического воспроизведения. Если данные нужно воспроизвести только один раз нужно передать значение false. В противном случае, значение true

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

Воспроизведение звука с диска.

 Потоковое воспроизведение.

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

Управление громкостью воспроизведения осуществляется с помощью метода BASS_ChannelSetPosition класса Bass вызванного с флагом BASSAttribute.BASS_ATTRIB_VOL.

 Первый параметр – поток воспроизведения;
  • Второй параметр — флаг;
  • Третий параметр – уровень громкости.

Уровень громкости может принимать значение от 0 (без звука) до 1 (максимальная громкостьи имеет тип float.

Поэтому, если вычисляемое значение громкости имеет другой тип данных (например, при использовании TrackBar в качестве регулятора громкости), обязательно приведение типов.

 Смена позиции при воспроизведении (слайдер доступа)

При реализации слайдеров доступа необходимо решить три основные задачи.

  • Сопоставление параметров слайдера и продолжительности воспроизведения
  • Собственно переход к нужному месту воспроизводимого файла или потока.
  • Отображение текущей позиции во время воспроизведения. Например, перемещение ползунка у TrackBar;

Вначале необходимо обязательно сопоставить параметры слайдера продолжительности воспроизведения.

Любой элемент управления, который позволяет манипулировать своими свойствами в графическом интерфейсе пользователя, может это делать только в рамках некоторого диапазона значений. Например, у TrackBar по умолчанию положение ползунка может изменяться от 0 до 10. То есть, всего 11 положений.

Для того чтобы обеспечить удовлетворительное позиционирование при воспроизведении такой точности недостаточно. Поэтому, при запуске воспроизведения нужно обязательно установить соответствующее значение максимального перемещения ползунка.

Для этого получаем продолжительность звукозаписи в файле на диске или сетевом ресурсе с помощью метода BASS_ChannelGetLength класса Bass.

 Этот метод принимает только один параметр – поток воспроизведения.

Он возвращает продолжительность в байтах. Гораздо проще и удобнее работать с продолжительностью в секундах. Для этого служит метод BASS_ChannelBytes2Seconds класса Bass.

 Первый параметр – поток воспроизведения;
  • Второй параметр – текущая позиция с начала файла или потока в байтах.

Пример установки максимального значения перемещения ползунка у TrackBar при его использовании в качестве слайдера.

 Вторая задача решается очень просто при помощи метода BASS_ChannelSetPosition класса Bass.

 Первый параметр – поток воспроизведения;
  • Второй параметр – позиция, на которую необходимо перейти.

Второй параметр имеет тип double. Поэтому, если значение позиции задаётся в другом формате, (например, свойство Value у TrackBar имеет тип int) необходимо приведение типов.

Если этот метод вызвать, например, в обработчике события scroll у TrackBar, то при перемещении ползунка будет выполняться переход к тому или иному месту воспроизводимого файла или потока.

Чтобы отобразить текущую позицию во время воспроизведения, необходим таймер, который через заданный интервал времени будет обновлять слайдер (например, положение ползунка у TarckBar).

Для определения текущей позиции удобнее всего использовать уже упомянутый метод BASS_ChannelBytes2Seconds. Текущую позицию в байтах можно получить с помощью метода BASS_ChannelGetPosition.

 Этот метод принимает только один параметр – поток воспроизведения.

Ниже приведён пример отображения текущей позиции при воспроизведении с помощью перемещения ползунка у TrackBar, который выступает в качестве слайдера. При начале воспроизведения запускается таймер, который перемещает ползунок в требуемое положение с помощью представленного кода.

 Резюме

Библиотека Bass.NET предоставляет .NET разработчиком возможность использовать мощный инструмент для работы со звуком в лице библиотеки Bass.

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

Bass.NET может стать хорошим «помощником» при решении задач связанных с работой со звуком самой различной степени сложности.

Ссылки
  1. Официальная страница на сайте разработчика
  2. Документация по Bass.NET

2 комментария

  1. Adorei o seu artigo, aprendi mais com você do que com o youtube no seu artigo tem exemplos e assim ficou fácil de entender, agora quero tentar achar um exemplo que mostra como equalizar o _stream e alterar a pich.

    1. Перевод комментария с португальского:

      Мне понравилась ваша статья, я узнал больше с вами, чем с youtube в статье есть примеры, и поэтому было легко понять, теперь хочу попробовать найти пример, который показывает, как уравнивание в _stream и изменить пич.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *