YOU CAN CODE!

 

With The Case Of UCanCode.net  Release The Power OF  Visual C++ !   HomeProducts | PurchaseSupport | Downloads  
Download Evaluation
Pricing & Purchase?
E-XD++Visual C++/ MFC Products
Overview
Features Tour 
Electronic Form Solution
Visualization & HMI Solution
Power system HMI Solution
CAD Drawing and Printing Solution

Bar code labeling Solution
Workflow Solution

Coal industry HMI Solution
Instrumentation Gauge Solution

Report Printing Solution
Graphical modeling Solution
GIS mapping solution

Visio graphics solution
Industrial control SCADA &HMI Solution
BPM business process Solution

Industrial monitoring Solution
Flowchart and diagramming Solution
Organization Diagram Solution

Graphic editor Source Code
UML drawing editor Source Code
Map Diagramming Solution

Architectural Graphic Drawing Solution
Request Evaluation
Purchase
ActiveX COM Products
Overview
Download
Purchase
Technical Support
  General Q & A
Discussion Board
Contact Us

Links

Get Ready to Unleash the Power of UCanCode .NET


UCanCode Software focuses on general application software development. We provide complete solution for developers. No matter you want to develop a simple database workflow application, or an large flow/diagram based system, our product will provide a complete solution for you. Our product had been used by hundreds of top companies around the world!

"100% source code provided! Free you from not daring to use components because of unable to master the key technology of components!"


VC++ Example: Classes to Record, Play, and Save WAV File to disk

 
 paulcheffers

The following classes, CRecordSound and CPlaySound, record sound and play PCM sound simultaneously. An example dialog-based program is provided that records, saves to disk, and then echos sound. This example also contains two more classes, CWriteSoundFile and CPlayMMSound. CWriteSoundFile receives sound buffers from CRecordSound and writes them to a WAV disk file. CPlayMMSound opens these WAV files and plays them to the sound device. All sound files are currently 8-bit PCM samples. Be careful with the sample application because it records a PCM WAV file. The PCM WAV file can grow at 8 kilobytes a second, so keep the recorded samples short.

With these classes, sound can be both recorded and played at the same time. Continuous sound can be monitored and, upon appropriate queues, sound can be played back. Simple sound recognition could also, for instance, be put into CRecordSound. The multithreading allows other actions to take place while sound recording and playback go on. As well, recorded sound can be saved to WAV files and played back.

CRecordSound can be invoked by the following code:

m_pRecordSound = new CRecordSound();
m_pRecordSound->CreateThread();

CPlaySound can be invoked by the following code:

m_pPlaySound = new CPlaySound();
m_pPlaySound->CreateThread();

To initiate sound recording from CRecordSound, do the following:

m_RecordThread->PostThreadMessage(WM_RECORDSOUND_STARTRECORDING, 0, 0L);

To stop recording sound:

m_RecordThread->PostThreadMessage(WM_RECORDSOUND_STOPRECORDING,0,0);

Similar calls begin the playing and stopping of sound:

m_PlayThread->PostThreadMessage(WM_PLAYSOUND_STARTPLAYING,0,0);

m_PlayThread->PostThreadMessage(WM_PLAYSOUND_STOPPLAYING,0,0);

The CRecordSound class ferries sound blocks that have been recorded over to the CPlaySound class. The CRecordSound class is notified of the CPlaySound thread via the following:

m_RecordSound->PostThreadMessage(WM_RECORDSOUND_SOUNDPLAYER,
                                 0,(LPARAM)m_PlaySound);

For both CRecordSound and CPlaySound, the virtual member ProcessSoundData(short int* sound, DWORD dwSamples) can be overridden to get access to the actual sound data.

CWriteSoundFile has the following messages associated with it:

m_WriteSoundThread->PostThreadMessage(WM_WRITESOUNDFILE_FILENAME,
                                      0,(LPARAM)(PWRITESOUNDFILE)
                                      &structWriteSoundFile);

m_WriteSoundThread->PostThreadMessage(WM_WRITESOUNDFILE_WRITEBLOCK,
                                      0,(LPARAM)(WAVEHDR)pWaveHdr);

m_WriteSoundThread->PostThreadMessage(WM_WRITESOUNDFILE_CLOSEFILE,0,0);

To write a WAV file, you must provide a WRITESOUNDFILE structure. The WRITESOUNDFILE structure has the following definition:

typedef struct writesoundfile_tag {
   char lpszFileName[MAX_PATH];
   WAVEFORMATEX waveFormatEx;
   TCHAR buffer[100];
} WRITESOUNDFILE, *PWRITESOUNDFILE;

You must provide the filename, and then the WAVEFORMATEX structure that defines the file to be written. With non-PCM formats, there is extra style-specific information at the end of the structure, hence the 100 bytes of buffer space.

This class receives WAVEHDR blocks created by CRecordSound. In the example application, pushing the "Start Recording" button will echo sound and save it to a "sound.wav" file at the same time.

CPlayMMSound will read a WAV file and play it to the sound device. It uses a pointer to a CPlaySound thread to achieve this. Its messages are:

m_pPlayMMSound->PostThreadMessage(WM_PLAYMMSOUND_PLAYFILE,
                                  0,(LPARAM)"sound.wav")

m_pPlayMMSound->PostThreadMessage(WM_PLAYMMSOUND_CLOSEFILE,0,0);

m_pPlayMMSound->PostThreadMessage(WM_PLAYMMSOUND_PLAYSOUNDPTR,0,
                                  (LPARAM)(CPlaySound*)m_pPlaySound);

The WM_PLAYMMSOUND_PLAYFILE messages open a WAV file for processing. It automatically sends off a worker thread to play the file.

You must provide a CPlaySound thread for this to work. That is the job of the WM_PLAYMMSOUND_PLAYSOUNDPTR message. You can stop the play at any time by the WM_PLAYMMSOUND_CLOSEFILE message. Currently, CPlaySound is set to play around 1.5 seconds ahead of any sound actually heard.

About the Author
C++, PERL, and web writer. have baudot code emulator (TTY) on web for deaf at http://www.pctty.com have an interest in encrypted email. worked on old Boston University Custom Operating System in the 80s called VPS/VM on the old IBM mainframes.

Download C++ Source Code
echo.zip - VC++ V7.0 project file

 

 

Copyright ?1998-2024 UCanCode.Net Software , all rights reserved.
Other product and company names herein may be the trademarks of their respective owners.

Please direct your questions or comments to webmaster@ucancode.net