Chinaunix首页 | 论坛 | 博客
  • 博客访问: 819782
  • 博文数量: 756
  • 博客积分: 40000
  • 博客等级: 大将
  • 技术积分: 4980
  • 用 户 组: 普通用户
  • 注册时间: 2008-10-13 14:40
文章分类

全部博文(756)

文章存档

2011年(1)

2008年(755)

我的朋友

分类:

2008-10-13 16:06:43

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---------------------

阅读(275) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~