实例介绍
【实例简介】这是一个采集PCM数据,并可编码为MP3的例子,编码器为lamp
【实例截图】
【核心代码】
// mp3_stream.cpp : Defines the entry point for the console application. // #pragma setlocale(".1251") #include "stdafx.h" #include "INCLUDE/mp3_simple.h" #include "INCLUDE/waveIN_simple.h" //--------------------------------------- #include "INCLUDE/BladeMP3EncDLL.h" //---------------------------------------- #include <conio.h> // An example of the implementation. class mp3Writer: public IReceiver{ private: CMP3Simple m_mp3Enc; FILE *f; public: mp3Writer(unsigned int bitrate = 128, unsigned int finalSimpleRate = 0): m_mp3Enc(bitrate, 44100, finalSimpleRate) { f = fopen("music.mp3", "wb"); if (f == NULL) throw "Can't create MP3 file."; }; ~mp3Writer() { fclose(f); }; virtual void ReceiveBuffer(LPSTR lpData, DWORD dwBytesRecorded) { BYTE mp3Out[44100 * 4]; DWORD dwOut; m_mp3Enc.Encode((PSHORT) lpData, dwBytesRecorded/2, mp3Out, &dwOut); fwrite(mp3Out, dwOut, 1, f); }; }; // Prints the application's help. void printHelp(char *progname) { printf("%s -devices\n\tWill list WaveIN devices.\n\n", progname); printf("%s -device=<device_name>\n\tWill list recording lines of the WaveIN <device_name> device.\n\n", progname); printf("%s -device=<device_name> -line=<line_name> [-v=<volume>] [-br=<bitrate>] [-sr=<samplerate>]\n", progname); printf("\tWill record from the <line_name> at the given voice <volume>, output <bitrate> (in Kbps)\n"); printf("\tand output <samplerate> (in Hz).\n\n"); printf("\t<volume>, <bitrate> and <samplerate> are optional parameters.\n"); printf("\t<volume> - integer value between (0..100), defaults to 0 if not set.\n"); printf("\t<bitrate> - integer value (16, 24, 32, .., 64, etc.), defaults to 128 if not set.\n"); printf("\t<samplerate> - integer value (44100, 32000, 22050, etc.), defaults to 44100 if not set.\n"); } // Lists WaveIN devices present in the system. void printWaveINDevices() { const vector<CWaveINSimple*>& wInDevices = CWaveINSimple::GetDevices(); UINT i; for (i = 0; i < wInDevices.size(); i ) { OutputDebugString(wInDevices[i]->GetName()); printf("%s\n", wInDevices[i]->GetName()); } } // Prints WaveIN device's lines. void printLines(CWaveINSimple& WaveInDevice) { CHAR szName[MIXER_LONG_NAME_CHARS]; UINT j; try { CMixer& mixer = WaveInDevice.OpenMixer(); const vector<CMixerLine*>& mLines = mixer.GetLines(); for (j = 0; j < mLines.size(); j ) { ::CharToOem(mLines[j]->GetName(), szName); printf("%s\n", szName); } mixer.Close(); } catch (const char *err) { printf("%s\n",err); } } int main(int argc, char* argv[]) { char *strDeviceName = "FrontMic (Realtek High Definiti"/*NULL*/; char *strLineName = "主音量"; char *strTemp = NULL; UINT nVolume = 100; UINT nBitRate = 128; UINT nFSimpleRate = 0; printWaveINDevices(); setlocale(LC_ALL, ".866"); mp3Writer *mp3Wr; printf("\nRecording at %dKbps, ", nBitRate); if (nFSimpleRate == 0) printf("44100Hz\n"); else printf("%dHz\n", nFSimpleRate); printf("from %s (%s).\n", strLineName, strDeviceName); printf("Volume %d%%.\n\n", nVolume); CWaveINSimple& device = CWaveINSimple::GetDevice(strDeviceName); CMixer& mixer = device.OpenMixer(); //mixer.InitLines(); CMixerLine& mixerline = mixer.GetLine(strLineName); mixerline.UnMute(); mixerline.SetVolume(nVolume); mixerline.Select(); mixer.Close(); mp3Wr = new mp3Writer(nBitRate, nFSimpleRate); device.Start((IReceiver *)mp3Wr); printf("hit <ENTER> to stop ...\n"); while (!_kbhit()) ::Sleep(100); device.Stop(); delete mp3Wr; CWaveINSimple::CleanUp(); return 0; } /* int main(int argc, char* argv[]) { mp3Writer *mp3Wr; char *strDeviceName = NULL; char *strLineName = NULL; char *strTemp = NULL; UINT nVolume = 0; UINT nBitRate = 128; UINT nFSimpleRate = 0; printWaveINDevices(); setlocale( LC_ALL, ".866"); try { if (argc < 2) printHelp(argv[0]); else if (argc == 2) { if (::strcmp(argv[1],"-devices") == 0) printWaveINDevices(); else if ((strTemp = ::strstr(argv[1],"-device=")) == argv[1]) { strDeviceName = &strTemp[8]; CWaveINSimple& device = CWaveINSimple::GetDevice(strDeviceName); printLines(device); } else printHelp(argv[0]); } else { if ((strTemp = ::strstr(argv[1],"-device=")) == argv[1]) { strDeviceName = &strTemp[8]; } if ((strTemp = ::strstr(argv[2],"-line=")) == argv[2]) { strLineName = &strTemp[6]; } if ((strDeviceName == NULL) || (strLineName == NULL)) { printHelp(argv[0]); return 0; } for (int i = 3; i < argc; i ) { if ((strTemp = ::strstr(argv[i],"-v=")) == argv[i]) { strTemp = &strTemp[3]; nVolume = (UINT) atoi(strTemp); } else if ((strTemp = ::strstr(argv[i],"-br=")) == argv[i]) { strTemp = &strTemp[4]; nBitRate = (UINT) atoi(strTemp); } else if ((strTemp = ::strstr(argv[i],"-sr=")) == argv[i]) { strTemp = &strTemp[4]; nFSimpleRate = (UINT) atoi(strTemp); } else { printHelp(argv[0]); return 0; } } printf("\nRecording at %dKbps, ", nBitRate); if (nFSimpleRate == 0) printf("44100Hz\n"); else printf("%dHz\n", nFSimpleRate); printf("from %s (%s).\n", strLineName, strDeviceName); printf("Volume %d%%.\n\n", nVolume); CWaveINSimple& device = CWaveINSimple::GetDevice(strDeviceName); CMixer& mixer = device.OpenMixer(); CMixerLine& mixerline = mixer.GetLine(strLineName); mixerline.UnMute(); mixerline.SetVolume(nVolume); mixerline.Select(); mixer.Close(); mp3Wr = new mp3Writer(nBitRate, nFSimpleRate); device.Start((IReceiver *) mp3Wr); printf("hit <ENTER> to stop ...\n"); while( !_kbhit() ) ::Sleep(100); device.Stop(); delete mp3Wr; } } catch (const char *err) { printf("%s\n",err); } CWaveINSimple::CleanUp(); return 0; } */
好例子网口号:伸出你的我的手 — 分享!
小贴士
感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。
- 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
- 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
- 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
- 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。
关于好例子网
本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明
网友评论
我要评论