Внедряване на канал за аудио предаване от край до край с помощта на инструментите на библиотеката, Sagittarius Coder

Проходният канал е директно предаване на аудиосигнал от оборудване за запис на звук към оборудване за възпроизвеждане на звук [2].

Входящият звуков сигнал към компютъра се подава към линейния или микрофонния вход на звуковата карта (SC). Изходният аудио сигнал се изпраща към изхода на високоговорителя.

Обикновено линейните и микрофонните входове на звуковата карта се използват за запис на звук или за предаването му по интернет (например чрез програмата Skype). На свой ред, изходът на високоговорителя обикновено се използва за възпроизвеждане на предварително записано аудио (например във формат MP3) или получено по мрежата.

Има обаче редица задачи, за които е полезно или просто необходимо да се организира канал от край до край.

По-долу е даден частичен списък на такива задачи:

  • Настройка на хардуер и операционна система (ОС) (звукова карта, високоговорители, OS миксер);
  • Аудио излъчване в реално време чрез високоговорители или друго звуковъзпроизвеждащо оборудване;
  • Обработка на звук за излъчване в реално време чрез високоговорители или друго оборудване за възпроизвеждане на звук;
  • Предаване на говорен сигнал към системата за гласово управление;
  • Обработка на входящия аудио сигнал (VZS), по-специално с цел намаляване на шума му.

Най-простият канал от край до край може да бъде организиран с помощта на графичния интерфейс на драйвера на звуковата карта. Фигура 1 показва пример на GUI драйвер за звукова карта от Realtek.

аудио

Фиг. 1. Графичен интерфейс на драйвера за звукова карта realtek

Ако в графичния интерфейс на драйвера на звуковата карта от Realtek (фиг. 1) в раздела "Микрофон", преместете плъзгача "Сила на звукаВъзпроизвеждане” от най-лявата позиция надясно, високоговорителите ще възпроизвеждат входния звук към микрофона.

Но какво да направите, ако драйверът или неговият графичен интерфейс не поддържат работа в режим на канал от край до край или е необходима обработка на входящия аудио сигнал (VZS), която не може да се извърши със стандартните средства на драйвера на звуковата карта или нейния графичен интерфейс?

В този случай трябва сами да внедрите канала за преминаване, като използвате инструменти, предоставени директно от операционната система (например DirectSound или DirectShow) или компоненти на трети страни. Например библиотеката bass.dll (бас) от Un4seen Developments Ltd. Текущата версия на bass е 2.4.12.7 [3].

Бас библиотеката съдържа редица функции за запис, възпроизвеждане и обработка на звук. За прилагане на СК са необходими следните от тях [1]:

  • BASS_RecordInit - инициализира записващото устройство;
  • BASS-RecordFree - освобождава всички ресурси, използвани за запис;
  • BASS_Init - инициализира устройството за възпроизвеждане;
  • BASS_Free - освобождава всички ресурси, използвани за възпроизвеждане;
  • BASS_RecordStart - започва запис;
  • BASS_ChannelGetData - получава данни за възпроизвеждане директно от канала за запис;
  • BASS_StreamCreate - създава поток за възпроизвеждане;
  • BASS_ChannelPlay - стартира запис или възпроизвеждане на поточно предаване;
  • BASS_ChannelStop - Спира записа или възпроизвеждането на поток.

В допълнение към всички функции, изброени по-горе, за реализиране на проходен канал е необходима и функция за обратно извикване за запис на данни в потока за възпроизвеждане, създаден от функцията BASS_StreamCreate. Всъщност това е тяинтерфейси между потока за запис и възпроизвеждане.

За пълно описание на всички горепосочени функции, включително функцията за обратно извикване, вижте документацията за баса. По-долу е даден пример за изпълнение на функция за обратно извикване за канал от край до край в езика за програмиране Delphi.