I want to write a simple windows app that does a few things with wav files. And i dont want to use Direct Sound b/c that is just too much for what i need (even though i know how to use that :)). But anyway, what i need to do is be able to record as a wav file what ever comes into the line in on my sound card. I need to start recording when a signal appears on the line in and when its gone i need it to stop recording. I also need to play this wav file later on. I have done the playing before just not the recording. I plan on using the playsound function in mmsystem.h to play the sound and in that file, is there also a way to record a wav file when a signal is present on the line in?
The MCI_RECORD command starts recording from the current position or from one specified location to another specified location. VCR and waveform-audio devices recognize this command. Although digital-video devices and MIDI sequencers also recognize this command, the MCIAVI and MCISEQ drivers do not implement it.
To send this command, call the mciSendCommand function with the following parameters.
(DWORD) (LPMCI_RECORD_PARMS) lpRecord
Device identifier of the MCI device that is to receive the command message.
MCI_NOTIFY, MCI_WAIT, or, for digital-video and VCR devices, MCI_TEST. For information about these flags, see The Wait, Notify, and Test Flags.
Pointer to an MCI_RECORD_PARMS structure. (Devices with extended command sets might replace this structure with a device-specific structure.)
Returns zero if successful or an error otherwise.
This command is supported by devices that return TRUE when you call the MCI_GETDEVCAPS command with the MCI_GETDEVCAPS_CAN_RECORD flag. For the MCIWAVE driver, all data recorded after a file is opened is discarded if the file is closed without saving it.
The following additional flags apply to all devices supporting MCI_RECORD:
A starting location is included in the dwFrom member of the structure identified by lpRecord. The units assigned to the position values are specified with the MCI_SET_TIME_FORMAT flag of the MCI_SET command. If MCI_FROM is not specified, the starting location defaults to the current position.
Newly recorded information should be inserted or pasted into the existing data. Some devices might not support this. If supported, this is the default.
Data should overwrite existing data. The MCIWAVE.DRV device returns MCIERR_UNSUPPORTED_FUNCTION in response to this flag.
An ending location is included in the dwTo member of the structure identified by lpRecord. The units assigned to the position values are specified with the MCI_SET_TIME_FORMAT flag of the MCI_SET command. If MCI_TO is not specified, the ending location defaults to the end of the content.
The following additional flags are used with the digitalvideo device type:
An audio-stream number is included in the dwAudioStream member of the structure identified by lpRecord. If you omit this flag, audio data is recorded into the first physical stream.
When recording stops, the screen will hold the last image and will not resume showing the video until an MCI_MONITOR command is issued.
A video-stream number is included in the dwVideoStream member of the structure identified by lpRecord. If you omit this flag, video data is recorded into the first physical stream.
A rectangle is specified in the rc member of the structure identified by lpRecord. The rectangle specifies the region of the external input used as the source for the pixels compressed and saved. This rectangle defaults to the rectangle specified (or defaulted) by the MCI_DGV_PUT_VIDEO flag for the MCI_PUT command. When it is set differently than the video rectangle, what is displayed is not what is recorded
For digital-video devices, lpRecord points to an MCI_DGV_RECORD_PARMS structure.
The following additional flags are used with the vcr device type:
The dwAt member of the structure identified by lpRecord contains a time when the entire command begins, or if the device is cued, when the device reaches the from position given by the cue command.
Seek the device to the start of the media, begin recording blank video and audio, and record timecode, if possible
<taken from micrsoft.com>