Реалізація наскрізного каналу передачі звуку засобами бібліотеки Стрілець Coder

Наскрізний канал – пряма передача звукового сигналу зі звукознімаючою на звуковідтворюючу апаратуру [2].

Вхідний звуковий сигнал до ЕОМ надходить на лінійний або мікрофонний вхід звукової карти (ЗК). Вихідний звуковий сигнал подається на вихід динаміків.

Зазвичай лінійний та мікрофонний входи звукової карти використовуються для запису звуку або передачі його по мережі Internet (наприклад, за допомогою програми Skype). У свою чергу вихід для динаміків, як правило, використовується для відтворення звуку записаного раніше (наприклад, у форматі MP3) або прийнятого по мережі.

Однак є ряд завдань, для вирішення яких корисна або просто необхідна організація наскрізного каналу.

Нижче наведено частковий перелік таких завдань:

  • Налаштування апаратури та операційної системи (ОС) (звукова карта, динаміки, мікшер ОС);
  • Трансляція звуку в реальному часі через динаміки або інше звуковідтворювальне обладнання;
  • Обробка звуку для трансляції в реальному часі через динаміки або інше звуковідтворювальне обладнання;
  • Передача мовного сигналу систему голосового управління;
  • Обробка вхідного звукового сигналу (ВЗС), зокрема з його від шуму.

Найпростіший наскрізний канал можна організувати за допомогою графічного інтерфейсу драйвера звукової карти. На малюнку 1 наведено приклад графічного інтерфейсу драйвера звукової карти від Realtek.

передачі

Рис.1. Графічний інтерфейс драйвера звукової карти від компанії Realtek

Якщо у графічному інтерфейсі драйвера звукової карти від компанії Realtek (рис.1) на вкладці «Мікрофон» пересунути повзунок «Гучністьвідтворення» з крайнього лівого положення вправо, то в динаміках відтворюватиметься звук, що надходить на мікрофон.

Однак як діяти у випадку, якщо драйвер або його графічний інтерфейс не підтримують роботу в режимі наскрізного каналу, або потрібна обробка вхідного звукового сигналу (ВЗС), яку неможливо здійснити штатними засобами драйвера звукової карти або його графічного інтерфейсу?

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

Бібліотека bass містить низку функцій для запису, відтворення та обробки звуку. Для реалізації СК необхідні такі [1]:

  • BASS_RecordInit - ініціалізує пристрій для запису;
  • BASS-RecordFree – звільняє всі ресурси, задіяні для запису;
  • BASS_Init - ініціалізує пристрій для відтворення;
  • BASS_Free – звільняє всі ресурси, задіяні для відтворення;
  • BASS_RecordStart - починає запис;
  • BASS_ChannelGetData – отримує дані відтворення безпосередньо з каналу записи;
  • BASS_StreamCreate – створює потік відтворення;
  • BASS_ChannelPlay – запускає запис у потік чи відтворення;
  • BASS_ChannelStop – зупиняє запис у потік чи відтворення.

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

Повний опис усіх вищезгаданих функцій, включаючи функцію зворотного дзвінка, наведено в документації bass. Нижче наведено приклад реалізації функції зворотного дзвінка для наскрізного каналу мовою програмування Delphi.