birdsinging:顶呀!不过MM编码风格有待再接再厉哦 o(∩_∩)o.
(发表于2007-12-3 23:20:00)
zaodt:女娃娃写的文章很少见,一定要赞一个!
本着严谨的态度,指出一些不合理的地方:
写文件这段代码,MM_WIM_DATA 消息来时每次都会执行一次;看代码,分配的录音缓冲区为 16KB,每秒录音 11025B,大约1.5秒就会收到 MM_WIM_DATA 消息,也就是写一次文件。虽然可以执行,但感觉不是很合理。如果把写文件的代码放入结束那个{...}里,就会在用户点击停止录音时执行一次,比较合理。
另外:部分代码的原始出处其实都在一本书上,它就是《Windows程序设计》的第二十二章【声音与音乐】,大家有时间应该看看这本书。它的下载地址为:
http://blog.csdn.net/zaodt/archive/2007/11/25/1901332.aspx
(发表于2007-12-12 12:11:00)
ariesbi:用低层波形音频函数录、放音的程序我做过一些,对MM的程序提两个小建议:
1、建议定义一个WAV文件头的结构,以避免大量调用赋值或Write()语句。
2、响应录音缓冲区满的消息有很多种方法,除了窗口外还有事件、回调函数、线程等,从你附的代码看不出你用的哪一种。我觉得比较好的是用线程响应。应该把录放音功能封装成类,线程可以用工作者线程(也叫劳工线程),自己写线程的消息循环;也可以用图形界面线程,把CWinthread做为基类。用线程便于多声卡录音的实现。
(发表于2008-1-7 22:12:00)
ariesbi:还有:
m_file.Open(m_csFileName,CFile::modeCreate|CFile::modeReadWrite, &fileException);
这一句使用了文件异常对象,为什么不检查Open的返回值?
应该有诸如:
BOOL bRet = m_file.Open(...);
if(!bRet) {
fileException.ReportError();
...;
return;
}
的调用。
unsigned int Sec=(sizeof pSaveBuffer + m_WaveHeaderSize);
这一句可能会有点问题(我说不准),因为pSaveBuffer是指针,sizeof 运算符会返回指针的大小(一般4字节)而不是它指向的内存块的字节数。如果是数组名就没问题。
还有你说程序不稳定,不知你有没有注意到waveInReset()函数的调用也会产生MM_WIM_DATA消息。
(发表于2008-1-7 22:31:00)
..........................................................................
--------------------next---------------------
阅读(381) | 评论(0) | 转发(0) |