Voice Recording/Playing back using simple classes
来源:互联网 发布:天刀明星捏脸数据库 编辑:程序博客网 时间:2024/06/05 05:57
- Download source files - 4.41 Kb
Introduction
Most of us are familiar with at least one multimedia recording software. Windows has one of the simplest ones: Sound Recorder. In this article I want to introduce some simple but useful classes for recording/playing back of voice that wrap the WAVE APIs.
WAVE APIs
Here is the list of all the Wave APIs that I have used:
Recording
waveInOpen
Open the Wave device for recording. waveInPrepareHeader
Prepare the Wave header for recording. waveInAddBuffer
Add buffer waveInStart
Start recording. Recorded data will be saved in a specified buffer. waveInUnprepareHeader
After finishing the record process, should un-prepare Wave header. waveInClose
Close the recording device. Playing
waveOutOpen
Open the Wave device for playing. waveOutPrepareHeader
Prepare the Wave header for playing. waveOutWrite
Play the buffer. waveOutUnprepareHeader
Un-prepare the Wave header. waveOutClose
Close the playing device. As you can see, working with these APIs are straightforward but if you want to skip them and simply do a copy/paste code in your project, my classes are for you.
Here is the definition of the classes:
class CVoiceBase {public: CString m_result; MMRESULT res; enum { SPS_8K=8000, SPS_11K=11025, SPS_22K=22050, SPS_44K=44100 }; enum { CH_MONO=1, CH_STEREO=2 }; char* buffer; WAVEHDR WaveHeader; WAVEFORMATEX PCMfmt; void SetFormat(DWORD nSamplesPerSec, WORD wBitsPerSample,WORD nChannels); BOOL CopyBuffer(LPVOID lpBuffer, DWORD ntime); CString GetLastError(); void GetMMResult(MMRESULT res); void DestroyBuffer(); BOOL PrepareBuffer(DWORD ntime); CVoiceBase(); virtual ~CVoiceBase();};class CVoiceRecording : public CVoiceBase {public: void RecordFinished(); BOOL IsOpen(); BOOL Close(); BOOL Open(); BOOL Record(); HWAVEIN hWaveIn; CVoiceRecording(); virtual ~CVoiceRecording();};class CVoicePlaying : public CVoiceBase {public: void PlayFinished(); BOOL IsOpen(); BOOL Close(); BOOL Open(); BOOL Play(); HWAVEOUT hWaveOut; CVoicePlaying(); virtual ~CVoicePlaying();};
Also, for notifying of events, such as finishing recording/playing, I have used two callback functions:
BOOL CALLBACK VoiceWaveInProc(HWAVEIN hwi, UINT uMsg, DWORD dwInstance, DWORD dwParam1, DWORD dwParam2 );BOOL CALLBACK VoiceWaveOutProc(HWAVEOUT hwi, UINT uMsg, DWORD dwInstance, DWORD dwParam1, DWORD dwParam2 );
Example
Just declare two variables of type CVoiceRecording
and CVoicePlaying
. Use SetFormat
, PrepareBuffer
, Open
and Record
or Play
member functions to work with them:
CVoiceRecording m_Record;CVoicePlaying m_Play;m_Record.PrepareBuffer(10); //prepare buffer for recording 10 seconds.m_Record.Open(); m_Play.PrepareBuffer(10); //prepare buffer for playing of 10 seconds of datam_Play.Open(); if (m_Record.IsOpen()){ m_Record.Record();}//after finishing the record scenario,//play the buffer, first copy recorded buffer to m_Play bufferm_Play.CopyBuffer(m_Record.buffer, 10); if (m_Play.IsOpen()){ m_Play.Play();}
Enjoy!
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
About the Authors
A. RiaziI was born in Shiraz, a very beautiful famous city in Iran. I started programming when I was 12 years old with GWBASIC. Since now, I worked with various programming languages from Basic, Foxpro, C/C++, Visual Basic, Pascal to MATLAB and now Visual C++.
I graduated from Iran University of Science & Technology in Communication Eng., and now work as a system programmer for a telecommunication industry.
I wrote several programs and drivers for Synthesizers, Power Amplifiers, GPIB, GPS devices, Radio cards, Data Acqusition cards and so many related devices.
I'm author of several books like Learning C (primary and advanced), Learning Visual Basic, API application for VB, Teach Yourself Object Oriented Programming (OOP) and etc.
I'm winner of January, May, August 2003 and April 2005 best article of month competetion, my articles are:
- Add GPS Support to your Desktop
- Solving Engineering Problem Using MATLAB C API
- Text2PDF
- Scan2PDF
You can see list of my articles, by clicking here
Occupation: Software Developer (Senior) Company: Misbah3Com Location: Iran, Islamic Republic Of
Shafiee
Occupation: Web Developer Location: Iran, Islamic Republic Of
- Voice Recording/Playing back using simple classes
- Recording and playing back data
- Simple audio recording program
- Playing .wav files using C#
- recording and play using Waveform audio interface
- Recording
- recording
- OER Voice Traffic Optimization Using Active Probes
- Voice Conversion using Convolutional Neural Networks 翻译
- How to Draw Waveform While Recording Using NAudio and WPF
- Recording MP3 Using Only HTML5 and JavaScript (Recordmp3.js)
- Using Predefined CSS Margin Classes
- Back to Basics: Using KVO
- how to program using ROCKWELL's Voice/Fax/Data
- simple model fitting using R
- Simple Packet Sniffer using Java
- Using dllimport and dllexport in C++ Classes
- Using Collection Classes Safely in Multithreaded Applications
- 右键菜单添加命令行窗口
- 去掉网页中Flash对象虚线框的官方解决方案
- 提取摄像头视频(Dephi)
- 去掉flash载入时的虚线框
- 什么是NDIS?
- Voice Recording/Playing back using simple classes
- 如何判断电脑电源是否烧坏!不用替换的情况下!
- 去掉flash载入时的虚线框
- Sound recording and encoding in MP3 format.
- Simple audio recording program
- 网络驱动程序接口规范NDIS
- CSS文本样式
- recording and play using Waveform audio interface
- StretchBlt用法