Главная » Статьи » Электроника |
Аналого-цифровой преобразователь из звуковой картыО.БАРАНОВСКИЙ Сегодня каждый пользователь ПЭВМ знаком с термином "мультимедиа". У многих он ассоциируется с качественным звуком, анимацией и т.п. Однако звуковую карту Sound Blaster можно использовать как аналого-цифровой и цифро-аналоговый преобразователь с исключительно широкими возможностями обработки данных. Компьютер с такой картой можно использовать в качестве осциллографа, генератора или анализатора сигналов. Дело в том, что ее "сердцем" является цифровой сигнальный процессор DSP (Digital Signal Processor). Для того чтобы использовать его возможности, необходимо иметь непосредственный доступ к буферам, содержащим звуковые данные и управляющим режимом работы DSP, т.е. использовать интерфейс низкого уровня. В этой статье мы рассмотрим устройство звуковой карты и формат стандартных типов файлов данных, в которых в памяти компьютера хранятся данные, полученные в результате оцифровки сигналов, поступающих на вход звуковой карты. Такие же файлы можно синтезировать программно с целью получения сигналов заданной формы. Данные, имеющие отношение к мультимедиа, хранятся в файлах в так называемом RIFF-формате (Resource Interchange File Format — формат файла для обмена ресурсами) [1]. Файл в формате RIFF содержит вложенные фрагменты (chunk's). Внешний фрагмент состоит из заголовка и области данных (рис.2). Первое двойное слово заголовка содержит четырехсимвольный код, который идентифицирует данные, хранящиеся во фрагменте.
uses SysUtils, MMSystem; type TWaveData = array[0..0) of word ; const Discret = 22050; WaveHdr:TWaveHdr=( lpData dwBufferLength dwBytesRecorded dwUser dwFlags dwLoops : 0; IpMext : nil; reserved : 0 ) ; WaveFormat: TWaveFormatEx=( wFormatTag : WAVE_FORMAT_PCM ; nChannels : 1; nSamplesPerSec : Discret; nAvgBytesPerSec : Discret; nBllockAlign : 1; wBitsPerSample : 8; csSize : 0 ) ; var WaveDate : ATWaveDate; HSoundDevice : HWaveln; hfile : HMMIO; res : MMResult; begin with WaveHdr do begin dwBufferLehgth : =round(Discret/10); dwBytesRecorded: =round(Discret/10); GetMem(WaveData, dwBytesRecorded); lpData : =PChar(WaveData); end; res : =waveInOpen (@HSoundDevice, WAVE_MAPPER, @WaveFormat, 0,0,0); res : =waveInPrepareHeader (HSoundDevice, @WaveHdr, SizeOf (WaveHdr)); res : =waveInUnprepareHeader (HSoundDevice, @WaveHdr,SizeOf(WaveHdr)) ; FreeMem (WaveData) ; res: =waveInStart (HSoundDevice) ; hfile:^ranio0pen ("d: \work\data_l. txt",nil, MMIO_CREATE or MMIO_READWRITE) ; mmioWrite(hfile,WaveHdr.lpData, WaveHdr,dwBytesRecorded); mmioClose(hfile,0); wavelnReset(HSoundDevice) ; wavelnClose(HSoundDevice) ; end. В отличие от интерфейса MCI, где многие параметры принимаются по умолчанию, интерфейс низкого уровня требует внимательного и тщательного учета всех деталей процесса записи и чтения. В качестве компенсации за дополнительно затраченные усилия вы получаете большую гибкость и возможность работать не только со звуком, но также и с произвольными сигналами в реальном времени. Литература | |
Просмотров: 1005 | Комментарии: 1 | |
Всего комментариев: 0 | |