
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.
CDialogDlgenheritsCPipeand overloads a function thatCPipecan call when it has finished playing the wave file. - Another callback function make it possible for
CSoundInto callback toCPipewhen it has filled the input buffer. ThusCPipecan giveCSoundIna 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
本文介绍了一个简单的Windows平台应用,演示如何使用旧版多媒体API进行声音的录制和播放。文章详细介绍了关键类如CSoundIn、CSoundOut和CSoundFile的功能及使用方法,并讨论了回调函数的设计。
692

被折叠的 条评论
为什么被折叠?



