请选择 进入手机版 | 继续访问电脑版

vc声音录制播放程序(附demo)

[复制链接]
蝶蝶已蝶已蝶蝶 发表于 2021-1-3 12:17:54 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题
  VC++开辟常用功能一系列文章 (接待订阅,一连更新...)
源t步调附demo已百度网盘:永久生效 ,文章尾部附 百度链接
链接:https://pan.baidu.com/s/1sogT-n4iSoBr1LQ3W2KSmA
提取码:tljs
复制这段内容后打开百度网盘手机App,利用更方便哦
 
,可以下载试用哟........

功能先容:
1.播放功能:
立体声播放、左右声音播放
2.录制功能
支持多种模式,支持设置采样
3.调试日志功能
4.耳机功能  动态检测耳机有没插,录制功能
5.音量调治功能,与任务栏音量完全同步
6.另有播放降燥功能

相关源码:
播放:
  1. // CWavePlay.h: interface for the CCWavePlayer class.////#pragma once#include #pragma comment(lib, "winmm.lib")#include #pragma comment(lib, "shlwapi.lib")#define QUEUE_BUFFER_SIZE (4096)#define WM_USER_CLOSE (WM_USER + 2242)#define WM_USER_PROGESS (WM_USER + 833)class CWavePlay: public CWnd  {public:        CWavePlay();        virtual ~CWavePlay();public:        void Init(HWND hwndParent, LPRECT lpRect, DWORD dwBufferSize, UINT nDeviceID = WAVE_MAPPER); // Init params and graphics window        void SetBufferSize(DWORD dwBufferSize);        BOOL Open(CString strFilePath); // Check validity of wav file and open a waveform-audio output device for playback        void Play(CString strFilePath); // Start to playback        void Pause(); // Pause playing        void Restart(); // Resumes playback on a paused waveform-audio output device         void Stop(); // Stop playing        BOOL IsPlaying(){ return m_bPlaying; } // Is playing now        BOOL IsPaused(){ return m_bPaused; } // Is paused now        void SetVolume(DWORD dwVolume); // Set volume for left and right channel volume together        void SetVolumeLR(WORD wLeft, WORD wRight); // Set volume for left and right channel volume dividually        void GetVolume(DWORD& dwVolume); // Get volume level: low-order word contains the left-channel volume        void GetVolumeLR(WORD& wLeft, WORD& wRight); // Get volume level dividually        void GetDevNum(UINT &nDevNum); // Get the number of waveform-audio output devices present in the system        void GetDevID(UINT& nDevID); // Get the device identifier for the given waveform-audio output device        void SetDevID(UINT nDevID); // Set the device identifier - but be valid at next time        void GetProductNames(CStringArray& strArrProductNames); // Get product names of every waveform-audio output devices present in the system        int GetNumDevsOut(){ return waveOutGetNumDevs(); } // Get number of waveform-audio output devices        void GetWaveOutCaps(WAVEOUTCAPS& caps){ caps = m_caps; } // Get capabilities of the waveform-audio output device        void GetWaveFormatEx(WAVEFORMATEX& format){ format = m_format; } // Get the format of waveform-audio data        int GetRangeMax(){ return m_nRangeMax; } // Get max range value for progress        void SetPosition(long lPos); // Set the current playback position        // Note:        // The parameter of these functions below is multiplier value        // Means that the setting or getting indicates the current change         // in pitch or playback rate from the original authored setting or getting        // The multiplier is specified as a fixed-point value        // The high-order word contains the signed integer part of the number        // and the low-order word contains the fractional part: 0x8000 represents 1/2, 0x4000 represents 1/4 ...        // So, 0x0002c000 specifies a multiplier of 2.75        //        void SetPitch(DWORD dwPitch); // Set the pitch for the specified waveform-audio output device        void GetPitch(DWORD& dwPitch); // Get the current pitch setting for the specified waveform-audio output device        void SetPlaybackRate(DWORD dwRate); // Set the playback rate for the specified waveform-audio output         void GetPlaybackRate(DWORD& dwRate); // Get the current playback rate for the specified waveform-audio output device        // Set and get colors for background, waveform, text and split line        void SetColors(COLORREF clrBkgd, COLORREF clrWave, COLORREF clrText, COLORREF clrSplit);        void GetColors(COLORREF& clrBkgd, COLORREF& clrWave, COLORREF& clrText, COLORREF& clrSplit);        private:                void Close(); // Closes the given waveform-audio output device        BOOL Create(HWND hWndParent, LPRECT lpRect = NULL); // Create a window for drawing waveform        void Release(); // Free buffers        void MyMessageBox(CString strErr, UINT nType); // My message box        BOOL CheckValidity(CString strFilePath); // Check the validity of a wave file        BOOL AllocateMemory(DWORD dwBufferSize); // Allocate memory for array of out data and wave header        BOOL ReadSoundDataFromFile(LPVOID pData, int& dwSize); // Read sound data form file        BOOL AddOutputBufferToQueue(int nIndex, int nSize); // Add output buffer to playing queue        void CalcForProgess(); // Calculate parameters(step, range max ... ) for progress silder        // Callback function used with the waveform-audio output device        BOOL static CALLBACK waveOutProc(HWAVEOUT hWaveOut, UINT uMsg, DWORD dwInstance, DWORD dwParam1, DWORD dwParam2);        //        void DrawWindowBG(CDC *pDC); // Draw background of created window        CRect GetDrawRect(BOOL bLeft); // Get drawing rect of left or right        void DrawWave(DWORD dwSize); // Draw waveform         void DrwaWave8(CDC *pDC, BYTE *pData, DWORD dwSize, BOOL bLeft); // Draw 8bits waveform        void DrwaWave16(CDC *pDC, SHORT *pData, DWORD dwSize, BOOL bLeft); // Draw 16bits waveform        DWORD SplitStereo2Mono(WAVEFORMATEX format, PBYTE pByData, DWORD dwSize); // Split stereo data to mono oneprotected:        HWND m_hParentWnd; // Handle of parent window        CRect m_rcDrawWnd; // Rect of drawing window        CPen m_penText; // Pen for text drawing        CPen m_PenWave; // Pen for waveform drawing        CPen m_penLine; // Pen for line drawing        PBYTE m_pByOutDataL; // Pointer point to left channel data        PBYTE m_pByOutDataR; // Pointer point to right channel data        COLORREF m_clrBkgd; // Color of background        COLORREF m_clrWaveform; // Color of waveform        COLORREF m_clrText; // Color of text        COLORREF m_clrSplit; // Color of split line                BOOL m_bPlaying; // Is playing or not        BOOL m_bPaused; // Is paused or not        UINT m_nDeviceID; // Identifier of the waveform-audio output device        UINT m_nNumDevsOut; // Number of waveform-audio output devices present in the system        HMMIO m_hWaveFile; // A handle to an open file        MMCKINFO m_mmckinfoParent; // RIFF chunk information data structure - Parent        MMCKINFO m_mmckinfoSubChunk; // RIFF chunk information data structure - Sub Chunk        DWORD m_dwFmtSize; // "fmt" chunk size        DWORD m_dwQueBufferSize; // Buffer size of playing queque        DWORD m_dwQueue; // Number of playing queues        DWORD m_dwBufferNumInQueue; // Buffer number in playing queue        DWORD m_dwVolume; // Volume value        HWAVEOUT m_hWaveOut; // Handle of open waveform-audio output device        WAVEFORMATEX m_format; // Format of waveform-audio data        WAVEOUTCAPS m_caps; // Capabilities of a waveform-audio output device        PBYTE *m_pArrOutData; // Pointer point to array of out data        PWAVEHDR *m_pArrHdr; // Pointer point to array of wave header                        DWORD m_dwDataSize; // Size of 'data' chunk        DWORD m_dwReadDataCount; // Number of readed bytes        int m_nStep1; // m_nStep1 = m_dwDataSize / m_dwQueBufferSize        int m_nStep2; // m_nStep2 = m_nStep1 / m_nRangeMax        int m_nRangeMax; // range max value for playing control slider        int m_nInitPos; // The pos of file pointer point to 'data' chunk        int m_nStepCount; // Counter for reading sound data from file        enum ERR_TYPES        {                eERR_ERROR, // MB_OK | MB_ICONERROR                eERR_WARNING, // MB_OK | MB_ICONWARNING                eERR_INFO // MB_OK | MB_ICONINFORMATION        };protected:        //{{AFX_MSG(CWavePlay)        afx_msg BOOL OnEraseBkgnd(CDC* pDC);        afx_msg LRESULT OnClose(WPARAM wParam, LPARAM lParam);        //}}AFX_MSG    LRESULT OnMM_WOM_DONE(WPARAM wParam, LPARAM lParam);        LRESULT OnMM_WOM_CLOSE(WPARAM wParam, LPARAM lParam);        DECLARE_MESSAGE_MAP()};
复制代码
录制:
  1. // WaveRecord.h: interface for the CWaveRecord class.////#pragma once#include #pragma comment(lib, "winmm.lib")#include #pragma comment(lib, "shlwapi.lib")#define QUEUE_BUFFER_SIZE (4096)class CWaveRecord : public CWnd  {public:        CWaveRecord();        virtual ~CWaveRecord();public:        void Init(HWND hwndParent, LPRECT lpRect, DWORD dwBufferSize, UINT nDeviceID = WAVE_MAPPER); // Init params and graphics window                void SetBufferSize(DWORD dwBufferSize);        BOOL Record(WORD nChs, DWORD nSamplesPerSec, WORD wBitsPerSample); // Start to record        void StopRecord(); // Stop record        BOOL IsRecording(){ return m_bRecording; } // Is recording now        void SaveWaveFormat(WORD nChs, DWORD nSamplesPerSec, WORD wBitsPerSample); // Set parameters of WAVEFORMATEX        BOOL AllocateMemory(DWORD dwBufferSize); // Allocate memory for record waveform data        BOOL AddInputBufferToQueue(int nIndex); // Add input buffer to recording queue        BOOL SaveRecordData2File(LPCTSTR lpszFileName); // Save recorded data to file        int GetNumDevsIn(){ return waveInGetNumDevs(); }; // Get number of waveform-audio input devices        void GetProductNames(CStringArray& strArrProductNames); // Get product names of every waveform-audio input devices        // Callback function used with the waveform-audio input device        BOOL static CALLBACK waveInProc(HWAVEIN hWaveIn, UINT uMsg, DWORD dwInstance, DWORD dwParam1, DWORD dwParam2);        // Set and get colors for background, waveform, text and split line        void SetColors(COLORREF clrBkgd, COLORREF clrWave, COLORREF clrText, COLORREF clrSplit);        void GetColors(COLORREF& clrBkgd, COLORREF& clrWave, COLORREF& clrText, COLORREF& clrSplit);private:        void Close(); // Close the given waveform-audio input device        void Release(); // Release buffers        BOOL Create(HWND hWndParent, LPRECT lpRect = NULL); // Create a window for drawing waveform        BOOL CreateWaveFile(LPCTSTR lpszWaveFileName, UINT nCh); // Create a wave file to save waveform data        int WriteToFile(PBYTE pByData, DWORD dwSize); // Write recorded data to file        void StopWriteFile(UINT nCh); // Stop write recorded data to file        void MyMessageBox(CString strErr, UINT nType); // My message box        //        void DrawWindowBG(CDC *pDC); // Draw background of created window        CRect GetDrawRect(BOOL bLeft); // Get drawing rect of left or right        void DrawWave(DWORD dwSize); // Draw waveform         void DrwaWave8(CDC *pDC, BYTE *pData, DWORD dwSize, BOOL bLeft); // Draw 8bits waveform        void DrwaWave16(CDC *pDC, SHORT *pData, DWORD dwSize, BOOL bLeft); // Draw 16bits waveform        DWORD SplitStereo2Mono(WAVEFORMATEX format, PBYTE pByData, DWORD dwSize); // Split stereo data to mono oneprotected:        HWND m_hParentWnd; // Handle of parent window        CRect m_rcDrawWnd; // Rect of drawing window        CPen m_penText; // Pen for text drawing        CPen m_PenWave; // Pen for waveform drawing        CPen m_penLine; // Pen for line drawing        COLORREF m_clrBkgd; // Color of background        COLORREF m_clrWaveform; // Color of waveform        COLORREF m_clrText; // Color of text        COLORREF m_clrSplit; // Color of split line                BOOL m_bRecording; // Is recording        UINT m_nDeviceID; // Identifier of the waveform-audio input device to open        UINT m_nNumDevsIn; // Number of waveform-audio input devices present in the system                HWAVEIN        m_hWaveIn; // Handle an waveform-audio input device        WORD m_wInQueue; // Number of recording queue        DWORD m_dwQueBufferSize; // Buffer size of queue        DWORD m_dwBufNumInQueue; // Number of buffers in queue        UINT m_nChs; // Channels for recording: mono, stereo or alone        PBYTE m_pByInDataL; // Pointer point to left channel data        PBYTE m_pByInDataR; // Pointer point to right channel data        PBYTE *m_pArrInData; // Pointer point to array of in data        HMMIO m_hWaveFile[2]; // Handles to an open file        PWAVEHDR *m_pArrHdr; // Pointer point to array of wave header        WAVEFORMATEX m_format; // Format of waveform-audio data        MMCKINFO mmckinfoParent[2]; // RIFF chunk information data structure - Parent        MMCKINFO mmckinfoSubChunk[2]; // RIFF chunk information data structure - Sub chunk        WAVEINCAPS m_caps; // Capabilities of a waveform-audio input device        enum ERR_TYPES        {                eERR_ERROR, // MB_OK | MB_ICONERROR                eERR_WARNING, // MB_OK | MB_ICONWARNING                eERR_INFO // MB_OK | MB_ICONINFORMATION        };public:        enum REC_CHANNELS        {                eCH_MONO, // Mono                eCH_STEREO, // Stereo                eCH_ALONE_L, // Alone: left                eCH_ALONE_R, // Alone: right                eCH_ALONE_ALL // Alone: left and right        };protected:        //{{AFX_MSG(CWavePlay)        afx_msg BOOL OnEraseBkgnd(CDC* pDC);        afx_msg void OnTimer(UINT nIDEvent);        afx_msg LRESULT OnClose(WPARAM wParam, LPARAM lParam);        //}}AFX_MSG    LRESULT OnMM_WIM_DATA(WPARAM wParam, LPARAM lParam);        LRESULT OnMM_WIM_CLOSE(WPARAM wParam, LPARAM lParam);        DECLARE_MESSAGE_MAP()};
复制代码


  • QQMail: 88520350@qq.com
    Webchat: keivin
  • C/C++/VC学习交换QQ群:930432714
 
 
 
 
 
                                    
                                                keivin2006                                           
                CSDN认证博客专家                                        C/C++                vc/qt                音视频                            一名c/c++/vc/qt 的小学生,“醒目”c,“醒目”c++,“醒目”vc++,“醒目”php,“醒目”qt,“醒目”java,</br>“醒目”python,“醒目”c#,“醒目”...!  编不下去了,只要见过名字的都我“醒目”....为哈,因为我现在是csdn“砖家”了!</br>本人qq: 88520350   </br>qq学习群:930432714  (C/C++/QT/VC学习交换群) 海量学习资料都分享在群里</br>指点学习方向,掌握学习要点,快速提高技能水平, 技能分享,共同学习!
来源:https://blog.csdn.net/kaizi318/article/details/112056124
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则


专注素材教程免费分享
全国免费热线电话

18768367769

周一至周日9:00-23:00

反馈建议

27428564@qq.com 在线QQ咨询

扫描二维码关注我们

Powered by Discuz! X3.4© 2001-2013 Comsenz Inc.( 蜀ICP备2021001884号-1 )