guok's blog

  博客园 :: 首页 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::
  9 随笔 :: 0 文章 :: 132 评论 :: 0 Trackbacks


用ATL写了一个ActiveX控件,可以进行音频的录/放、并支持文件上传。

下载地址:http://files.cnblogs.com/guok/MicroRecorder.rar

文件说明:
MicroRecorder.dll:ActiveX控件
Setup.exe:由于控件没有签名,另外做了一个安装程序
test.htm:控件测试页面

方法:
1. bool Init()
   说明:设备初始化
   返回:初始化是否成功
 
2. bool RecordStart()
   说明:开始录音,录音时间限制为1分钟
   返回:是否成功

3. RecordStop()
   说明:停止录音
  
4. bool PlayStart()
   说明:播放录制的声音
   返回:是否成功

5. PlayStop()
   说明:停止播放
 
6. Update()
   说明:轮询缓冲区
  
7. Encode(bstrFormat)
   说明:音频编码
   bstrFormat:编码格式,目前支持三种格式
                   Pcm:PCM 8000Hz 16位 单声道
                   ALaw:CCITT A-Law 8000Hz 8位 单声道
                   ULaw:CCITT u-Law 8000Hz 8位 单声道

8. bool SaveHttp(bstrHost, lPort, bstrPath, bstrName)
   说明:将编码后的文件通过http上传(RFC-1867)
   bstrHost:主机地址
   lPort:端口
   bstrPath:网页路径
   bstrName:表单字段名,即input type=file元素的name属性
   返回:是否成功(http应答码为200)
  
9. bool SaveFtp(bstrHost, lPort, bstrFileName)
   说明:将编码后的文件通过ftp上传
   bstrHost:主机地址
   lPort:端口
   bstrFileName:上传文件名(可以包含路径)
   返回:是否成功
  
10. bool SaveFile(bstrFileName)
   说明:将编码后的文件保存在本地
   bstrFileName:文件名
   返回:是否成功
  
属性:
1. State
   说明:录音机状态,0-停止,1-录音,2-放音

 

posted on 2007-03-19 16:05 guok 阅读(2391) 评论(9)  编辑 收藏

评论

#1楼  2007-03-19 17:09 flower.b      
非常不错.特别是上传功能。
  回复  引用  查看    

#2楼  2007-03-19 17:11 yunhuasheng      
Great!!
  回复  引用  查看    

能讲下上传怎么实现的思路吗/
  回复  引用  查看    

#4楼 [楼主] 2007-03-20 09:36 guok      
@Phinecos(洞庭散人)
http上传需要先通过抓包研究浏览器的实现方法
  回复  引用  查看    

录音时间能无限长吗?
  回复  引用    

#6楼  2007-03-20 16:09 guok      
@hao[匿名]
如果需要定制控件可以和我联系
  回复  引用  查看    

能不能把源代码公开下,我想了解你如何将pcm 无符号的格式转换为alaw的
,我的qq是120905524,谢谢!!
  回复  引用    

#8楼 [楼主] 2007-05-30 16:37 guok      
int MicroRecorder::ALawEncode(char *destBuf, const char *srcBuf, int srcSize)
{
    srcSize 
/= 2;
    
short *pcmBuf = (short *)srcBuf;
    
short *pcmEndBuf = pcmBuf + srcSize;
    
for (; pcmBuf < pcmEndBuf; pcmBuf++, destBuf++)
        
*destBuf = ALawEncode(*pcmBuf);
    
return srcSize;
}

char MicroRecorder::ALawEncode(short pcm)
{
    unsigned alaw;
    
if (pcm < 0)
    {
        pcm 
= ~pcm;
        alaw 
= 0x00;
    }
    
else
        alaw 
= 0x80;
    pcm 
>>= 4;
    
if (pcm >= 0x100)
    {
        pcm 
>>= 4;
        alaw 
+= 0x40;
    }
    
if (pcm >= 0x40)
    {
        pcm 
>>= 2;
        alaw 
+= 0x20;
    }
    
if (pcm >= 0x20)
    {
        pcm 
>>= 1;
        alaw 
+= 0x10;
    }
    alaw 
+= pcm;
    
return alaw ^ 0x55;
}

  回复  引用  查看    

#9楼  2008-01-22 17:48 谢某某 [未注册用户]
能否取消时间限制,是否要收费?
  回复  引用    


标题  
姓名  
主页
Email (只有博主才能看到) 
验证码 *  看不清,换一张 [登录][注册]
内容(请不要发表任何与政治相关的内容)  
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
该文被作者在 2007-03-19 16:29 编辑过
 
另存  打印