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

Наприклад, дуже часто звукова карта застосовується в якості недорогого «електронно

го осцилографа »досить високої якості, причому для програмування такого пристрою немає необхідності писати драйвер пристрою, досить використовувати багато чисельні програмні засоби (Мультимедійні API функції операційної системи Windows або, наприклад, бібліотечні функції DirecSound з пакету DirectX SDK).

Ми не будемо тут розглядати принципи розробки та програмування «електрон них осцилографів» – тема досить складна і вимагає великих знань апаратної і про програмне частини як цифрових процесорів звукових карт, так і самого комп’ютера. В Ін тернет є багато різних програм «електронних осцилографів», які можна використовувати для вимірювання аналогових сигналів низької частоти з досить докладними описами їх роботи.

Звукова карта може з успіхом застосовуватися в якості генератора сигналів різної форми (синусоїди, меандру, пілообразной і трикутної форми і т. д.). Це досить розповсюдження страненіе застосування цього пристрою, і на ринку присутній цілий ряд програм «тон генераторів», призначених для генерації сигналів різних частот.

Однією з відносно недорогих програм, присутніх на ринку програмних про дуктів, є, наприклад, NCH Tone Generator, за допомогою якої можна генерувати на виході звукової карти сигнали різної форми. На її прикладі ми розглянемо принципи роботи таких програм, тим більше що такі програмні тон генератори можна успішно використовувати і при розробці власних проектів.

На рис. 5.3 показані установки парамет рів програми для отримання сигналу прямо вугільної форми з частотою 1000 Гц.

З цього малюнка видно, що обраний прямо вугільний сигнал (меандр) з частотою 1000 Гц і тривалістю звучання 1000 мс (1 с). Для запуску генератора необхідно натиснути ле вую кнопку. В результаті на лінійному вихо де звукової карти протягом 1 с буде програний прямокутний сигнал з частотою 1000 Гц.

Рис. 5.10

Вікно конструктора програми

У цьому проекті з’явився новий компонент NumericUpDown, що дозволяє вибрати значення паузи між програванням звукового файлу. Задамо мінімальне значення компонента рівним 1, а максимальне – 32000. Властивість Value цього компонента буде

містити поточне значення затримки в мілісекундах з діапазону 1-32000 і буде іс

користуватися потокової функцією для формування паузи між пачками імпульсів.

Ось вихідний текст програми:

Imports   Microsoft.DirectX

Imports   Microsoft.DirectX.DirectSound

Imports   System.Threading

Public Class  Form1

Public  device   As Microsoft.DirectX.DirectSound.Device Public  buf  As Microsoft.DirectX.DirectSound.Buffer Public sthread  As Thread

Public tStart  As Threading.ThreadStart

Public delay  As Integer

Sub  ThreadProc() While (True)

buf.Play(0, BufferPlayFlags.Default) Thread.Sleep(delay)

End While

End Sub

Private Sub Form1_FormClosed(ByVal  sender   As Object, ByVal e  As System.Windows.Forms.FormClosedEventArgs)  Handles  Me.FormClosed sthread.Abort()

End Sub

Private Sub Form1_Load(ByVal  sender   As Object, ByVal e  As

System.EventArgs)  Handles  Me.Load delay  = 0

device   = New  Microsoft.DirectX.DirectSound.Device

device.SetCooperativeLevel(Me,  CooperativeLevel.Priority) “

tStart = New  ThreadStart(AddressOf  Me.ThreadProc)

sthread = New  Thread(tStart) End Sub

Private Sub Button1_Click(ByVal   sender   As System.Object,  ByVal e  As

System.EventArgs)  Handles  Button1.Click

If ofd.ShowDialog  Then

TextBox1.Text  = ofd.FileName

buf  = New  Microsoft.DirectX.DirectSound.Buffer(ofd.FileName,  device)

delay  = UpDown1.Value sthread.Start()

End If End Sub End Class

У цьому додатку при його запуску (подія Form1_Load) створюється і запускається від слушну потік sthread, функція ThreadProc якого програє тоновий сигнал, а потім засинає на час delay, яке визначається властивістю UpDown1.Value.

При завершенні роботи програми працюю щий потік повинен бути знищений, що і виконує ся в обробнику події Form1_FormClosed за допомогою методу Abort потоку sthread.

Вікно працюючого додатку може виглядати

наступним чином (рис. 5.11).

Як видно з наведених прикладів, створення програм для роботи зі звуковими файлами

за допомогою бібліотеки функцій DirectSound не так і складно.

Є ще простіший спосіб, хоча і набагато менше гнучкий спосіб генерації звуку в системі Windows. Він заснований на використанні функції Beep. Якщо в середовищі Microsoft Vi sual Studio ви працюєте з будь-якою мовою програмування, крім Visual C + +. NET, то функція Beep вказується без аргументів і працює на частоті 1000 Гц, при цьому звук надсилається тільки на вбудований динамік комп’ютера.

Трохи більше можливостей має функція Beep в Visual C + +. NET. Тут допускається завдання двох аргументів: частоти і тривалості звучання, хоча сигнал посилається тільки на вбудований динамік комп’ютера і має прямокутну форму.

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

Проста програма, написана на Visual C + +. NET, демонструє, як можна ставити частоту і тривалість звучання послідовності прямокутних імпульсів. Ось її ис Ходна текст:

#include  <stdio.h>

#include  <windows.h>

void  main(int argc,  char  *argv[])

{

int freq = 1000;

int  duration = 1000;

if (argc !=  3)

{

printf("Usage: %s  freq duration\n",  argv[0]); Beep(freq, duration);

return;

}

freq = atoi(argv[1]); duration   = atoi(argv[2]); Beep(freq,  duration); return;

}

При запуску цього додатка частоту і тривалість слід задавати як аргу ментів командного рядка. Якщо аргументи не задані, то генерується звуковий сигнал часто тій 1000 Гц протягом 1 с.

Ми розглянули деякі програмні принципи генерації звуку за допомогою звуко вої карти. Тонові послідовності, крім їх використання в якості джерел звукових сигналів, можна застосувати і для інших цілей, але це вимагає підключення елект ронних пристроїв до лінійного входу / виходу звукової карти. Це досить прості влаштуй ства, але вони дозволяють значно розширити можливості застосування звукової карти. Розглянемо деякі з них.

Джерело: Магда Ю. С. Комп’ютер в домашній лабораторії. – М.: ДМК Пресс, 2008. – 200 с.: Іл.