пятница, 22 января 2010 г.

Запись звука через BASS

Запись звука через BASS
В позапрошлой статье я писал про воспроизведение звука с помощью BASS. В следующей статье хотел написать и про запись, но неожиданное "открытие" регионов в HiAsm немного поменяло планы. Однако теперь можно и рассказать про запись звука с помощью BASS.

Итак, опять нам понадобится вкладка "BASS", группа "BASS запись". Вся подготовка к записи сводится к следующим шагам:
1. Выбор устройства для записи.
2. Инициализация этого устройства.
3. Выбор входа на устройстве и установка его параметров.

Для первого шага понадобится компонент BASS_RecordDevices. Он небогат точками и параметрами, так что просто вызовите единственный его метод и соберите выданные устройства в какой-нибудь список. Только нужно помнить, что выдаётся многомерный поток. Элементы MT-потока написаны в описании события: это имя устройства, драйвер и флаги.



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



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


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



Внимание! Не перепутайте MT_MTArray и MT_Array! Последний - это не массив многомерных потоков, а массив элементов одного многомерного потока, он нам не нужен. И компонент здесь для работы с массивом MT-потоков MT_MTArrayRW, а не простой ArrayRW.

А сейчас мы реализуем установку параметров входа.



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

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

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

Компонент MT_MultiData разбивает MT-поток на элементы. Начинает он не с 0-го элемента, а с 1-го, потому что это указано в параметре From. Нам так и нужно, потому что в первом элементе хранится имя входа, а оно нам не нужно.

Громкость изменяется в пределах от 0 до 1, а ползунок может принимать только целые значения. Для этого мы умножаем громкость на 100 и подаём значение на ползунок. А при установке громкости наоборот - делим (обязательно ResultType=Real).

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



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






Отделайте квартиру или дом в итальянском стиле. Ковры, мебель, гобелены смотрим здесь. Элитные итальянские предметы интерьера.

Заболел щенок - обращайтесь в ветеринарную клинику Биоконтроль. Полный спектр услуг: хирургия, онкология и даже пластическая хирургия.

Если вам нужно место для собственного серверного оборудования - colocation москва. Компания предоставляет места в своих дата-центрах.

1 комментарий: