Click here to Skip to main content
12,997,943 members (58,790 online)
Click here to Skip to main content
Add your own
alternative version


76 bookmarked
Posted 1 Jan 2006

Simple audio recording program

, 12 Jul 2007
Rate this:
Please Sign up or sign in to vote.
Simplest way to record sound...

Sample Image - SoundRecord.jpg


This sample program make use of waveInxxxx functions to read from an audio input device like a sound card and write it to a .wav file using mmioxxx functions. It is one of the simplest way to record sound with all the format capabilities supported by the hardware device

Initially, by using waveInGetNumDevs, we can find all the devices and then by using waveInGetDevCaps, we can find the formats it is supported.

To start recording, first select a device and then open the device with waveInOpen API call with the specified format (i.e. 16 bit etc). The output file is also prepared with all the headers filled in properly. Here i am using only PCM format which is easy. If you have more codecs installed on your PC, you can change that one also. But be sure that you supplied the proper values in the WAVEFORMATEX structure.

waveIn needs buffers to start recording. It is better to give more buffers for buffering to avoid any delays. I have used 3 here, but you can add more if your PC needs more time in writing to the HDD and thus causing the delay. Once the buffers are added in the queue, waveInStart will start recording. For each data chunk, the callback function specified in the waveinOpen will get the buffers. Just write it to the file and mark the buffer again for recording by calling the same addbuffer fn.

Once done with recording, adjust the chunk headers using the mmioascend APIs. Thats it.


This article has no explicit license attached to it but may contain usage terms in the article text or the download files themselves. If in doubt please contact the author via the discussion board below.

A list of licenses authors might use can be found here


About the Author

Software Developer (Senior)
United States United States
I am from the beautiful sea side town called Kochi ( cochin), Kerala, South India.

You may also be interested in...

Comments and Discussions

GeneralRe: Using your program Pin
Saneesh13-Jan-09 4:21
memberSaneesh13-Jan-09 4:21 
GeneralMemory Leak Pin
yktan15-Dec-08 1:37
memberyktan15-Dec-08 1:37 
GeneralRe: Memory Leak Pin
Saneesh15-Dec-08 8:08
memberSaneesh15-Dec-08 8:08 
GeneralI need VC6 version pls... Pin
krishna Vuppala1-Nov-08 22:29
memberkrishna Vuppala1-Nov-08 22:29 
GeneralRe: I need VC6 version pls... Pin
Saneesh3-Nov-08 9:41
memberSaneesh3-Nov-08 9:41 
GeneralRe: I need VC6 version pls... Pin
Member 870123527-Apr-12 22:48
memberMember 870123527-Apr-12 22:48 
QuestionHow can i add my own format to the drop down Pin
Member 465536511-Jul-08 0:36
memberMember 465536511-Jul-08 0:36 
AnswerRe: How can i add my own format to the drop down Pin
Saneesh13-Jul-08 16:11
memberSaneesh13-Jul-08 16:11 

The code i have can be modified for your use. First read about ACM function (Audio compression manager). Then you will get an idea. Some how for me, i felt like reading in regular format (without any compression) from the microphone and then convert the data using ACM functions to what ever format you need (provided you have the required codec's installed.. .acm files).

How ever if you want, you can do it in single shot. In the function CSoundRecDlg::OpenDevice(), look for m_stWFEX.wFormatTag=WAVE_FORMAT_PCM; Change it to WAVE_FORMAT_DIGIADPCM or the required one. But you need to make sure that you need to specify the proper parameters for the structure. This way you use the proper codec directly.

Good luck


GeneralVC V6 Pin
dave7dave7-Oct-07 12:09
memberdave7dave7-Oct-07 12:09 
GeneralRe: VC V6 Pin
Saneesh4-Jan-08 6:08
memberSaneesh4-Jan-08 6:08 
GeneralVB.NET Pin
BIRDENT30-Jul-07 21:38
memberBIRDENT30-Jul-07 21:38 
GeneralRe: VB.NET Pin
Saneesh31-Jul-07 5:56
memberSaneesh31-Jul-07 5:56 
GeneralSaving sound (*wav) into access database Pin
indray2j16-Jul-07 22:31
memberindray2j16-Jul-07 22:31 
GeneralRe: Saving sound (*wav) into access database Pin
Saneesh17-Jul-07 4:07
memberSaneesh17-Jul-07 4:07 
GeneralRe: Saving sound (*wav) into access database Pin
indray2j17-Jul-07 20:14
memberindray2j17-Jul-07 20:14 
GeneralComplete Program.. Pin
indray2j8-Jul-07 22:05
memberindray2j8-Jul-07 22:05 
GeneralRe: Complete Program.. Pin
Saneesh9-Jul-07 4:18
memberSaneesh9-Jul-07 4:18 
GeneralRe: Complete Program.. Pin
indray2j10-Jul-07 21:47
memberindray2j10-Jul-07 21:47 
GeneralRe: Complete Program.. Pin
Saneesh11-Jul-07 4:04
memberSaneesh11-Jul-07 4:04 
GeneralRe: Complete Program.. Pin
indray2j12-Jul-07 3:46
memberindray2j12-Jul-07 3:46 
GeneralRe: Complete Program.. Pin
Saneesh12-Jul-07 5:02
memberSaneesh12-Jul-07 5:02 
GeneralRe: Complete Program.. Pin
indray2j13-Jul-07 2:27
memberindray2j13-Jul-07 2:27 
GeneralRe: Complete Program.. Pin
Member 870123527-Apr-12 20:49
memberMember 870123527-Apr-12 20:49 
Generaloutput wav can't play on Vista Pin
binsonl4-May-07 7:35
memberbinsonl4-May-07 7:35 
GeneralRe: output wav can't play on Vista Pin
Saneesh4-May-07 16:46
memberSaneesh4-May-07 16:46 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Praise Praise    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.

Permalink | Advertise | Privacy | Terms of Use | Mobile
Web02 | 2.8.170622.1 | Last Updated 12 Jul 2007
Article Copyright 2006 by Saneesh
Everything else Copyright © CodeProject, 1999-2017
Layout: fixed | fluid