Unit unit1; interfaceuses windows, messages, sysutils, variants, classes, graphics, controls, forms, dialogs, stdctrls; Type tform1 = Class (tform) listbox1: tlistbox; listbox2: tlistbox; button1: tbutton; button2: tbutton; Procedure button1click (Sender: tobject); Procedure button2click (Sender: tobject); end; var form1: tform1; implementation {$ R *. DFM} uses mmsystem; // Device List; the wave_mapper parameter is often used when a device is specified. This automatically selects the appropriate device. procedure tform1.button1click (Sender: tobject); var I: integer; waveoutcaps: twaveoutcaps; waveincaps: twaveincaps; begin listbox1.items. add ('audio output device list: '); for I: = 0 to waveoutgetnumdevs do begin zeromemory (@ waveoutcaps, sizeof (twaveoutcaps); waveoutgetdevcaps (I, @ waveoutcaps, sizeof (twaveoutcaps); listbox1.items. add (waveoutcaps. szpname); end; listbox2.items. add ('audio input device list: '); for I: = 0 to waveingetnumdevs do begin zeromemory (@ waveincaps, sizeof (twaveincaps); waveoutgetdevcaps (I, @ waveincaps, sizeof (twaveincaps); listbox2.items. add (waveincaps. szpname); end; // determine whether the specified wave Format Procedure tform1.button2click (Sender: tobject); var FMT: tpcmwaveformat; begin FMT. WF. wformattag: = wave_format_pcm; FMT. WF. nchannels: = 2; FMT. WF. nsamplespersec: = 22050; FMT. WF. navgbytespersec: = 88200; FMT. WF. nblockalign: = 4; FMT. wbitspersample: = 16; If waveoutopen (nil, 0, pwaveformatex (@ FMT), 0, 0, wave_format_query) = 0 then showmessage ('the first output device supports this format '); if waveinopen (nil, 0, pwaveformatex (@ FMT), 0, 0, wave_format_query) = 0 then showmessage ('the first input device supports this format'); end.
The format-supported judgments are written as functions, such:
Function isformatsupported (FMT: pointer; DeviceID: DWORD): Boolean; begin result: = (waveoutopen (nil, DeviceID, pwaveformatex (FMT), 0, 0, wave_format_query) = 0 ); end;