Click here to Skip to main content
Click here to Skip to main content
Go to top

How to play and record sounds

, 12 Mar 2001
Rate this:
Please Sign up or sign in to vote.
A simple application that shows how to play and record sounds under Windows

Introduction

This is a simple application that shows you how to play and record sound under windows.
It uses the old multimedia API. A better solution may be to use DirectSound.

Quick Guide to the Code

Start with the two functions in CFisterDlg called OnPlay and OnRecord. Follow them down to the depth you need to use the classes.

Short description

CSoundIn is a wrapper class that will let you retreive sound from the soundcard. The main functions are Start() and Stop()

CSoundOut is a wrapper class that will let you play sound on the soundcard. The main functions are Start() and Stop()

CSoundFile is a wrapper class of a single wave file, it can either be a file reader or a file writer object. See the constructor.

CSoundBase is a very small class that encapsulates the wave format.

CBuffer is a very small class that encapsulates a simple one dimentional buffer.

The project has a number of different callback functions:

  • One callback function makes the Play button change it's label to stop when it has finished playing the file. CDialogDlg enherits CPipe and overloads a function that CPipe can call when it has finished playing the wave file.
  • Another callback function make it possible for CSoundIn to callback to CPipe when it has filled the input buffer. Thus CPipe can give CSoundIn a new buffer to fill.
  • A clone of the above principle is also used in CSoundOut, which enables it to callback to the owner when it is finished playing the sound in a given buffer.

Problems that I encountered

I have spent almost 2 days debugging the following stupid problem. When CSoundIn and CSoundOut inherit from CSoundBase and CWinThread the order in which they are listed must be as shown below. If not, the callback functions, which are started by the WinThread message handler, will not be able to access the member variables of the CSoundIn object.

class CSoundIn : public CWinThread, public CSoundBase

During these two days of fustration I also tried to implement the callback as regular callback functions called by the device driver. This is possible using ::waveInOpen(...). But since this callback function is not allowed to call any of the ::waveInXXX(...) functions it is not of much use.

License

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

Share

About the Author

Thomas Holme
Web Developer
Denmark Denmark
No Biography provided

Comments and Discussions

 
Generalt Pinmemberangshu1201198415-Jun-06 23:54 
GeneralHelp me! Pinmembertrananh19-Jan-06 15:03 
GeneralError Message: Still 3 buffers in waveIn queue Pinmembersrettig15-Nov-05 11:01 
QuestionCan i do this in C# PinmemberKumar Muthu29-Oct-05 0:26 
GeneralMore help in rectifying errors Pinmemberarmimex200028-Oct-05 13:46 
AnswerRe: More help in rectifying errors PinmemberGokcer Gokdal10-Nov-05 11:34 
GeneralAudio and Video PinmemberKisi00719-Oct-05 7:33 
GeneralSave the Recorded Sound to a .Wav File, PinmemberREU7-Oct-05 8:43 
SHALOM
 
Hello everybody I just started with this thing of programing, a few months ago,,
 
I want to know if its possible to save the recorded sound into a .Wav file,, also I I recorded many times can I save many .Wav
 
othe question that I have is ???
 
which Variable or where can I find the Final Final with the Sound data,
I mean if I need to send all the Audio data trough a socket
where can I find the block or the file that contains the Audio Data,, and where can I find the lenght in bytes of the captured file.
 
Can I use Windows sockets to control the Start capture and Stop capture functions, and then send the file through a socket,and when I receive the file in the other side,, how can I save the Audio Data to a .Wav file,,
 
or is it possible to save the Audio Data to .Wav file and then send it through the socket ???
 
its really urgent these questions, if somebody can help me,,
GOD BLEES YOU,,
 
I write my email
 
rubencia@gmail.com
 
Im trying to find solutions and this code is so amazing , simple and amazing to capture the sound that I need,
thanx everybody
 
SHALOM
 

REUBEN
 

GeneralRe: Save the Recorded Sound to a .Wav File, Pinmemberyasar7910-Jan-06 1:08 
Generalselecting two input sources Pinmemberrajeev_geom7-Oct-05 1:03 
GeneralVery nice design PinmemberGokcer Gokdal24-Aug-05 13:13 
QuestionHow can I record playback sound when Only Microphone is selected in Window Record Control Pinmemberjackshelingzhang6-Jun-05 2:31 
Generalhelp in rectifying the errors Pinmembernagulmeera4-Dec-04 0:49 
GeneralRe: help in rectifying the errors PinmemberJordan Walters29-Sep-05 2:10 
GeneralRecord and Play the Sound in two different machine. PinsussJosep Ignatius22-Nov-04 23:56 
Generalhelp me,plz Pinsusschaitanya123215-Jul-04 22:14 
GeneralA simple way to play sound... PinsussMark Sparrow24-May-04 18:42 
GeneralRe: A simple way to play sound... PinmemberDavidCrow8-Jun-04 3:21 
GeneralRe: A simple way to play sound... ? Pinmembermohsen nourian3-Jul-04 22:05 
GeneralRe: A simple way to play sound... ? Pinsusswavefan3-Jul-04 23:33 
General::PostQuitMessage(0)!!! PinmemberAndrew Altham31-Jan-04 2:58 
Generalplay more than one file at a moment PinsussAnonymous19-Jan-04 22:54 
GeneralCSoundIn::Stop() change to avoid "still %d buffers in waveIn queue" Pinmemberfilipverschueren@hotmail.com1-Jan-04 1:55 
GeneralRe: CSoundIn::Stop() change to avoid "still %d buffers in waveIn queue" Pinsussze_seb25-Mar-05 6:39 
Generalplease help me to solve the link errors in the program of how to play and record Pinmemberelaine tan2-Dec-03 5:17 

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

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

| Advertise | Privacy | Mobile
Web04 | 2.8.140922.1 | Last Updated 13 Mar 2001
Article Copyright 2001 by Thomas Holme
Everything else Copyright © CodeProject, 1999-2014
Terms of Service
Layout: fixed | fluid