Звуковая карта в домашней лаборатории

March 20, 2012 by admin Комментировать »

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

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

го  осциллографа» довольно  высокого   качества,  причем  для  программирования  такого устройства нет необходимости писать драйвер устройства, достаточно использовать много численные  программные   средства  (мультимедийные 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 с.: ил.

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

  1. victor says:

    Добрый день! Для компьютерного аналога прибора ДЕТА я пользуюсь NCH тон генераторм, 0,01Гц-22кГц.
    Большое неудобство, я не могу задать последовательность тонов и время звучания каждого тона. Не могу найти такой программный генератор. Буде очень благодарен за помощь.С уважением Виктор.

Оставить комментарий

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