Такой вопрос как это можно делать, надо в реальном времени выдавать на выход определённый уровень сигнала... Ну или хотя бы для начала сигнал определённого вида и частоты...
Типа как делают на вход осцилогроф... К стати может у кого такое есть....
Прогромирование звуковой карты
Модераторы: Hawk, Romeo, Absurd, DeeJayC, WinMain
Тупо кидаю статью с другого форума... Мож поможет 

Программирование Sound Blaster DSP.
Операционная система: MS-DOS 3+
Среда: Borland Pascal
Введение
Sound Blaster способен воспроизводить оцифрованные и модулированные звуки. FM чипсет полностью
совместим с Adlib, поэтому для программирования модулированных звуков, руководствуйтесь
документацией по Adlib. Эта статья будет сконцентрирована на воспроизведении и записи оцифрованных
звуков используя DSP чипсет CT1321 или совместимый.
Порты ввода и вывода
Цифровой сигнальный процессор (DSP) программируется через 4 порта, которые определяются
относительно базового адреса Sound Blaster:
Адрес порта Описание
2x6h Сброс
2xAh Чтение
2xCh (Вывод) Запись команды
2xCh (Ввод) Чтение состояния
2xEh Статус данных
где x = 1 для базового адреса 210h, x = 2 для базового адреса 220h, ... , x = 6 для базового адреса 260h.
Сброс цифрового сигнального процессора
Перед тем как программировать DSP, необходимо его сбросить. Для этого нужно проделать следующую
операцию:
1) Записать 1 в порт сброса (2x6h)
2) Подождать 3 мкс
3) Записать 0 в порт сброса (2x6h)
4) Читать байт из порта статуса (2xEh) пока бит 7 не установится в состояние 1.
5) Получить байт из порта чтение (2xAh)
Если вы получили в результате значение 0AAh значит адаптер присутствует, иначе ошибка. Обычно для
сброса DSP достаточно 100-200 мкс. Поэтому если возникает ошибка, то скорее всего это по причине
неверного базового адреса.
Запись в DSP
Значение в DSP может быть записано в таком порядке:
1) Читаем порт состояния (2xCh) до тех пор пока не выключится бит 7 в состояние 0.
2) Записываем значение в порт записи команды (2xCh).
Чтение из DSP
Значение из DSP может быть прочитано в таком порядке:
1) Читаем порт статуса (2xEh) до тех пор пока не включится бит 7 в состояние 1.
2) Читаем данные из порта чтение (2xAh).
Включение динамиков и управление контроллером DMA
Динамики и DMA управляются записью соответствующих байтов в DSP.
Значение Описание
D0h Остановка DMA
D1h Включить динамики
D3h Выключить динамики
D4h Возобновление DMA
О контроллере DMA будет рассказано далее.
Использование цифрово-аналогового преобразователя (DAC)
ЦАП - часть звуковой платы, которая преобразовывает цифровое значение в звук. Программирование
ЦАП в режиме прямой записи требует постоянной активности программы. В этом режиме доступен
только 8 разрядный режим работы. Для прямой записи необходимо послать в DSP команду 10h, а за ней
значение звука для воспроизведения. Данный метод прост в реализации, но очень неудобен.
Поэтому для программирования ЦАП используют контроллер DMA. Для активизации этого режима
необходимо послать значение 40h в DSP, а затем константу времени.
TIME_CONSTANT = 256 - 1000000 / частота
Существует несколько режимов для воспроизведения с DMA.
Вот таблица с режимами:
Режим Описание Частота
14h 8 bit 4KHz -> 23 KHz
74h 4 bit ADPCM 4KHz -> 12 KHz
75h 4 bit ADPCM + и/б 4KHz -> 12 KHz
76h 2.6 bit ADPCM 4KHz -> 13 KHz
77h 2.6 bit ADPCM + и/б 4KHz -> 13 KHz
16h 2 bit ADPCM 4KHz -> 11 KHz
17h 2 bit ADPCM + и/б 4KHz -> 11 KHz
* и/б - информационный байт
ADPCM стандарт для адаптированной импульсно-кодовой модуляции. Технология сжатия звука, в
которой для кодирования используется ограниченное количество байт. В режимах с информационным
байтом, каждый блок начинается с байта, общего для значения импульса.
Для организации воспроизведения при помощи контроллера DMA, необходимо:
1) Загрузить звуковые данные в память
2) Настроить контроллер DMA для передачи
3) Отправить TIME_CONSTANT
4) Записать DMA режим в DSP
5) Записать размер звуковых данных SizeOfBytes -1 (сначала младшую часть, а затем старшую).
Контроллер DMA должен быть запрограммирован раньше, чем DSP.
Использование аналогово-цифрового преобразователя (ADC)
Чтение звуков из АЦП может также быть осуществлено в режиме прямого чтения или через DMA. Для
чтения звуков в прямом режиме, отправьте команду 20h в DSP, а затем прочтите значение. Это очень
просто!
Для включения режима передачи через DMA, следуйте этой процедуре:
1) Подготовить буфер памяти для хранения звука
2) Настроить контроллер DMA для передачи
3) Записать TIME_CONSTANT
4) Записать значение 24h в DSP
5) Записать размер буфера SizeOfBytes -1 (сначала младшую часть, а затем старшую).
Контроллер DMA должен быть запрограммирован раньше, чем DSP.
Чтение в DMA режиме осуществляется только в режиме 8 бит. Режимы сжатия осуществляются только
программно и сохраняются в файлах VOC.
Программирование контроллера DMA
Для программирования контроллера DMA в режиме сегментной адресации (ОЗУ < 1 Мб).
1) Рассчитать 20 битный адрес для звукового буфера. (Базовый адрес = Сегмент * 16 + Смещение)
2) Записать значение 5h в порт 0Ah (запретить канал 1)
3) Записать значение 0h в порт 0Ch (Очистить внутренний DMA flip/flop)
4) Записать значение 49h (воспроизведение) или 45h (запись) в порт 0Bh
5) Записать младшую часть 20 битного адреса памяти в порт 02h
6) Записать старшую часть 20 битного адреса памяти в порт 02h
7) Записать номер страницы памяти для 20 битного адреса памяти в порт 83h
Записать младшую часть размера буфера памяти в порт 03h
9) Записать старшую часть размера буфера памяти в порт 03h
10) Записать значение 01h в порт 0Ah (активировать канал 1)
Обработка прерывания от DMA
Когда пересылка данных от DMA закончилась, вырабатывается прерывание. Номер вектора прерывания
зависит от аппаратного IRQ адаптера:
Аппаратное, IRQ Вектор
2 0Ah
3 0Bh
5 0Dh
7 0Fh
Для обработки одного из этих прерываний необходимо:
1) Проверить порт статус данных (2xEh)
2) Если есть блоки для передачи, подготовить их
3) Записать значение 20h (EOI) в порт 20h контроллера прерываний
DEMO программа для воспроизведения звука на Pascal
Unit DSP;
Interface
{ ResetDSP returns true if reset was successful base should be 1 for base address 210h, 2 for 220h etc... }
function ResetDSP(base : word) : boolean;
{ Write DAC sets the speaker output level }
procedure WriteDAC(level : byte);
{ ReadDAC reads the microphone input level }
function ReadDAC : byte;
{ SpeakerOn connects the DAC to the speaker }
function SpeakerOn: byte;
{ SpeakerOff disconnects the DAC from the speaker, but does not affect the DAC operation }
function SpeakerOff: byte;
{ Functions to pause DMA playback }
procedure DMAStop;
procedure DMAContinue;
{ Playback plays a sample of a given size back at a given frequency using DMA channel 1.
The sample must not cross a page boundry }
procedure Playback(sound : Pointer; size : word; frequency : word);
Implementation
Uses Crt;
var DSP_RESET : word;
DSP_READ_DATA : word;
DSP_WRITE_DATA : word;
DSP_WRITE_STATUS : word;
DSP_DATA_AVAIL : word;
function ResetDSP(base : word) : boolean;
begin
base := base * $10;
{ Calculate the port addresses }
DSP_RESET := base + $206;
DSP_READ_DATA := base + $20A;
DSP_WRITE_DATA := base + $20C;
DSP_WRITE_STATUS := base + $20C;
DSP_DATA_AVAIL := base + $20E;
{ Reset the DSP, and give some nice long delays just to be safe }
Port[DSP_RESET] := 1;
Delay(10);
Port[DSP_RESET] := 0;
Delay(10);
if (Port[DSP_DATA_AVAIL] And $80 = $80) And (Port[DSP_READ_DATA] = $AA) then
ResetDSP := true
else ResetDSP := false;
end;
procedure WriteDSP(value : byte);
begin
while Port[DSP_WRITE_STATUS] And $80 <> 0 do;
Port[DSP_WRITE_DATA] := value;
end;
function ReadDSP : byte;
begin
while Port[DSP_DATA_AVAIL] and $80 = 0 do;
ReadDSP := Port[DSP_READ_DATA];
end;
procedure WriteDAC(level : byte);
begin
WriteDSP($10);
WriteDSP(level);
end;
function ReadDAC : byte;
begin
WriteDSP($20);
ReadDAC := ReadDSP;
end;
function SpeakerOn: byte;
begin
WriteDSP($D1);
end;
function SpeakerOff: byte;
begin
WriteDSP($D3);
end;
procedure DMAContinue;
begin
WriteDSP($D4);
end;
procedure DMAStop;
begin
WriteDSP($D0);
end;
procedure Playback(sound : Pointer; size : word; frequency : word);
var time_constant : word; page, offset : word;
begin
SpeakerOn;
size := size - 1; { Set up the DMA chip }
offset := Seg(sound^) Shl 4 + Ofs(sound^);
page := (Seg(sound^) + Ofs(sound^) shr 4) shr 12;
Port[$0A] := 5;
Port[$0C] := 0;
Port[$0B] := $49;
Port[$02] := Lo(offset);
Port[$02] := Hi(offset);
Port[$83] := page;
Port[$03] := Lo(size);
Port[$03] := Hi(size);
Port[$0A] := 1; { Set the playback frequency }
time_constant := 256 - 1000000 div frequency;
WriteDSP($40);
WriteDSP(time_constant); { Set the playback type (8-bit) }
WriteDSP($14);
WriteDSP(Lo(size));
WriteDSP(Hi(size));
end;
end.
Усложнять - легко, упрощать - сложно
Удалите плз не то создал .
Здравствуйте форум заработка в интернете Bizzteam предлагает вам принять участие в новогоднем конкурсе по написанию статей и выиграть призы. Призовой фонд конкурса более 100 000рублей. Если вы хотите зарабатывать в интернете и любите принимать участие и выигрывать призы , то можете посетить нашу официальную страницу вот она