Звуковую карту, кроме ее прямого назначения, можно использовать и в радиолюбитель ской практике для создания электронных устройств, начиная от самых простых и заканчивая весьма сложными. В этом смысле звуковая карта является уникальным устройством, по скольку позволяет разработать устройства, не прибегая к написанию сложных драйверов, что зачастую невозможно сделать для других устройств.
Например, очень часто звуковая карта применяется в качестве недорогого «электронно
го осциллографа» довольно высокого качества, причем для программирования такого устройства нет необходимости писать драйвер устройства, достаточно использовать много численные программные средства (мультимедийные 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 с.: ил.
- Предыдущая запись: ОСНОВНЫЕ НЕЛИНЕЙНЫЕ ПРЕОБРАЗОВАНИЯ СИГНАЛОВ
- Следующая запись: Цифровые фильтры формулы
- ЗАРЯДНОЕ УСТРОЙСТВО ДЛЯ ЛИТИЙ-НОННОГО ЭЛЕМЕНТА КОНТРОЛЛЕР ЗАРЯДНОГО УСТРОЙСТВА (0)
- ИНДИКАТОР ПОЛОЖЕНИЯ ДВЕРИ (0)
- УСТРОЙСТВО ЗАЩИТЫ ПК C ПОМОЩЬЮ ПАРОЛЯ (0)
- ИНТЕРФЕЙС RS-232 C ПИТАНИЕМ OT КОМПЬЮТЕРА (0)
- CXЕMA ЗВУКОВОЙ СИГНАЛИЗАЦИИ ПРИ КОРОТКОМ ЗАМЫКАНИИ (0)
- ПРЕОБРАЗОВАТЕЛЬ ТОК/НАПРЯЖЕНИЕ ДЛЯ ЗАЗЕМЛЕННЫХ НАГРУЗОК (0)
- КВАРЦЕВЫЙ ГЕНЕРАТОР C ЧАСТОТНОЙ МОДУЛЯЦИЕЙ (0)
Добрый день! Для компьютерного аналога прибора ДЕТА я пользуюсь NCH тон генераторм, 0,01Гц-22кГц.
Большое неудобство, я не могу задать последовательность тонов и время звучания каждого тона. Не могу найти такой программный генератор. Буде очень благодарен за помощь.С уважением Виктор.