Bass.NET записываем звук правильно

Библиотека Bass.NET позволяет не только воспроизводить, но и записывать звук. Но в тоже время многие наверняка сталкивались с тем, что качество записи с её помощью оставляет желать лучшего (запись имеет характерное прерывистое звучание).

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

Запись согласно документации

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

А, сам процесс записи осуществлять в методе (функции) обратного вызова по следующему алгоритму.

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

Правильный способ записи

Получить качественную запись с помощью Bass.NET на самом деле несложно.

Для этого требуется отказаться от использования вышеупомянутых закрытых полей, перенести переменную-буфер в саму функцию обратного вызова и выполнять с буфером только действительно необходимые действия.

В результате такой записи будет получен уже «чистый» звук.

Пример использования

Рассмотрим пример прямой записи в файл.

Описываем закрытые члены класса :

  • Делегат для функции обратного вызова;
  • Поток записи;
  • Файловый поток;

Создадим метод создающий пустой файл формирующий в нём заголовок WAV.

Так как продолжительность записи заранее не известна, в последнюю секцию заголовка (где хранится информация о длительности) записываем ноль.

Запишем функцию обратного вызова.

Для того чтобы начать запись. Инициализируем поток записи и создадим пустой WAV файл с заголовком.

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

Теперь можно приступить собственно к записи.

После завершения записи вычисляем её продолжительность и записываем её значение в заголовок.

Остаётся только корректно освободить ресурсы и можно прослушать записанный звук (например, в проигрывателе).

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

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