CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
山寨机中的战斗机! 程序优化工程师到底对IT界有没有贡献
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VB >  API

十万火急!!!各位大哥、大姐:帮我解决一下用API录音的问题

楼主shanhongbei(阿单)2003-04-01 00:28:53 在 VB / API 提问

我在用API函数mcisendstring录音时,返回植是成功的,可就不能实现录音功能,请各位千万要帮忙!!! 问题点数:0、回复次数:4Top

1 楼JennyVenus()回复于 2003-04-01 01:41:11 得分 0

Public   Sub   RecordWave(TrackNum   As   Integer,   Filename   As   String)  
  '   Tracknum:   track   to   record  
  '   Filename:   file   to   save   wave   as  
   
  On   Local   Error   Resume   Next  
  Dim   i   As   Long,   RS   As   String,   cb   As   Long,   t#  
  RS   =   Space$(128)  
   
  i   =   mciSendString("stop   cdaudio",   RS,   128,   cb)  
  i   =   mciSendString("close   cdaudio",   RS,   128,   cb)  
   
  Kill   filename  
   
  RS   =   Space$(128)  
  i   =   mciSendString("status   cdaudio   position   track   "   &   TrackNum,   RS,   128,   cb)  
  i   =   mciSendString("open   cdaudio",   RS,   128,   cb)  
  i   =   mciSendString("set   cdaudio   time   format   milliseconds",   RS,   128,   cb)  
  i   =   mciSendString("play   cdaudio",   RS,   128,   cb)  
  i   =   mciSendString("open   new   type   waveaudio   alias   capture",   RS,   128,   cb)  
  i   =   mciSendString("record   capture",   RS,   128,   cb)  
   
  t#   =   Timer   +   1:   Do   Until   Timer   >   t#:   DoEvents:   Loop  
   
  i   =   mciSendString("save   capture   "   &   filename,   RS,   128,   cb)  
  i   =   mciSendString("stop   cdaudio",   RS,   128,   cb)  
  i   =   mciSendString("close   cdaudio",   RS,   128,   cb)  
   
  End   Sub  
   
  Top

2 楼since1990(level)回复于 2003-08-08 22:24:36 得分 0

相关文章,但愿对你有帮助:  
   
  http://www.yesky.com/20011222/211169.shtml  
   
  http://expert.csdn.net/Expert/topic/1601/1601749.xml?temp=.7656366  
   
  http://expert.csdn.net/Expert/topic/1494/1494837.xml?temp=.2378046  
   
  http://expert.csdn.net/Expert/topic/1489/1489277.xml?temp=.8521845  
   
  http://expert.csdn.net/Expert/topic/1671/1671411.xml?temp=2.701968E-02  
   
  http://expert.csdn.net/Expert/topic/1821/1821309.xml?temp=.3198358  
   
  http://expert.csdn.net/Expert/topic/1683/1683789.xml?temp=.7732355  
   
  http://expert.csdn.net/Expert/topic/1681/1681224.xml?temp=.3458063  
   
  http://expert.csdn.net/Expert/topic/1671/1671417.xml?temp=.5001337  
   
  http://expert.csdn.net/Expert/topic/1690/1690679.xml?temp=.7765619  
   
  http://expert.csdn.net/Expert/topic/1844/1844862.xml?temp=2.582949E-02  
   
  http://expert.csdn.net/Expert/topic/1845/1845323.xml?temp=.1655084  
   
  http://expert.csdn.net/Expert/topic/1841/1841248.xml?temp=2.329654E-02  
   
  http://expert.csdn.net/Expert/topic/1835/1835231.xml?temp=.8389093  
   
  http://expert.csdn.net/Expert/topic/1906/1906002.xml?temp=.622265  
   
  http://expert.csdn.net/Expert/topic/1383/1383546.xml?temp=.2014582  
   
  http://expert.csdn.net/Expert/topic/1562/1562834.xml?temp=.5607111  
   
  http://expert.csdn.net/Expert/topic/1898/1898040.xml?temp=4.969424E-02  
   
  http://expert.csdn.net/Expert/topic/1688/1688520.xml?temp=.4859125  
   
  http://expert.csdn.net/Expert/topic/1987/1987118.xml?temp=.3315851  
   
  http://expert.csdn.net/Expert/topic/1984/1984984.xml?temp=.465008  
   
  http://expert.csdn.net/Expert/topic/1358/1358689.xml?temp=.1235468  
   
  http://expert.csdn.net/Expert/topic/1383/1383546.xml?temp=.2014582  
   
   
   
  一段示例代码:  
   
  Public   Sub   RecordWave(TrackNum   As   Integer,   Filename   As   String)  
  '   Tracknum:   track   to   record  
  '   Filename:   file   to   save   wave   as  
   
  On   Local   Error   Resume   Next  
  Dim   i   As   Long,   RS   As   String,   cb   As   Long,   t#  
  RS   =   Space$(128)  
   
  i   =   mciSendString("stop   cdaudio",   RS,   128,   cb)  
  i   =   mciSendString("close   cdaudio",   RS,   128,   cb)  
   
  Kill   filename  
   
  RS   =   Space$(128)  
  i   =   mciSendString("status   cdaudio   position   track   "   &   TrackNum,   RS,   128,   cb)  
  i   =   mciSendString("open   cdaudio",   RS,   128,   cb)  
  i   =   mciSendString("set   cdaudio   time   format   milliseconds",   RS,   128,   cb)  
  i   =   mciSendString("play   cdaudio",   RS,   128,   cb)  
  i   =   mciSendString("open   new   type   waveaudio   alias   capture",   RS,   128,   cb)  
  i   =   mciSendString("record   capture",   RS,   128,   cb)  
   
  t#   =   Timer   +   1:   Do   Until   Timer   >   t#:   DoEvents:   Loop  
   
  i   =   mciSendString("save   capture   "   &   filename,   RS,   128,   cb)  
  i   =   mciSendString("stop   cdaudio",   RS,   128,   cb)  
  i   =   mciSendString("close   cdaudio",   RS,   128,   cb)  
   
  End   Sub  
   
   
  Top

3 楼since1990(level)回复于 2003-08-08 22:28:57 得分 0

 
   
   
   
   
  这些问题解决的关键是:了解wav的文件格式,可参考:  
  Windows声音文件.WAV文件格式:  
  http://www.csdn.net/Dev/Format/sound/wave.htm  
  WAVE文件格式及压缩方法:  
  http://www.csdn.net/Dev/Format/windows/wavec.htm  
   
   
   
   
  转贴:  
  ===================================  
  VB制作不受限制的录音机  
  郭东毅  
  说起录音机程序,大家都会想起Windows自带的那个,但是它有一个非常明显的缺点──有时间限制,录制最长时间不超过60秒,否则就会停下,必须自己按下“录音”键才可以继续录音。  
  其实,我们可以用VB来自己编一个不受时间限制的录音机,甚至连Windows   API都可以不用就能够实现。下面笔者向大家介绍具体的实现方法:  
  1.首先新建一个标准的EXE工程。我们需要两个Label控件,一个MMContrl控件,一个CommonDialog控件,一个Slider控件。两个Label控件分别用来显示录音的总时间和当前的录音时间。MMContrl控件用来支持录音和播放,CommonDialog控件用来打开和保存声音文件,Slider控件是用来直观地显示录音机的状态。  
  注:MMContrl控件、CommonDialog控件和Slider控件都不是默认的内部控件,需要添加(在控件工具箱上用右键,选“部件”,在控件列中复选Microsoft   Common   Dialog   Control   6.0(SP3)、Microsoft   Multimedia   Control   6.0   (SP3)、Microsoft   Windows   Common   Controls   6.0)。  
  2.主表单命名为frmMain;把Label控件命名为lblNow和lblTotal,Caption命名为“现在时间”和“总共时间”;把MMContrl控件命名为mci,DeviceType设置为WAVEAudio,FileName设置为c:\windows\temp\~temp.wav(在Windows的临时文件夹中生成临时录音文件,该文件实际上并不存在);把CommonDialog控件命名为cdlg,Filter设置为   声音(波形)文件|*.wav;Slider控件命名为sld,Enable设置为False。  
  3.用菜单编辑器给主表单添加菜单,主菜单项只有一个“文件(mnuFile)”,次级菜单有“新建(mnuFileNew)”、“打开(mnuFileOpen)”、“另存为(mnuFileSaveAs)”,“退出(mnuFileExit)”。  
  4.一切准备就绪的话,就可以开始了,程序源代码如下:  
  Option   Explicit  
  Dim   blnDirty   As   Boolean  
  Dim   intResult   As   Integer  
  Private   Sub   Form_Load()  
  mci.Command   =   "Open"   '打开准备好的文件  
  mci.TimeFormat   =   1   '时间格式设置为秒  
  blnDirty   =   False   '预先把文件更改设置为否  
  End   Sub  
  Private   Sub   Form_QueryUnload(Cancel   As   Integer,   UnloadMode   As   Integer)  
  If   blnDirty   =   True   Then  
  intResult   =   MsgBox("需要保存吗?",   vbYesNoCancel   +   vbQuestion,   "已经有更改!")  
  Select   Case   intResult  
  Case   vbYes  
  cdlg.CancelError=   True   ’把取消错误打开  
  On   Error   GoTo   ccancel   ’设置错误拦截  
  cdlg.ShowSave  
  mci.FileName=cdlg.FileName  
  mci.Command="Save"  
  frmMain.MousePointer=11  
  mci.Command="close"  
  blnDirty=False  
  Case   vbNo  
  mci.Command="close"  
  blnDirty=False  
  Case   vbCancel  
  ccancel:  
  Cancel=1  
  End   Select  
  frmMain.mousepointer=0  
  End   If  
  End   Sub  
  Private   Sub   mci_RecordClick(Cancel   As   Integer)  
  blnDirty   =   True  
  End   Sub  
  Private   Sub   mci_StatusUpdate()  
  lblNow.Caption   =   "现在时间:   "   &   mci.Position   /   1000   &   "   秒"   '现在时间显示  
  lblTotal.Caption   =   "总时间:   "   &   mci.Length   /   1000   &   "   秒"   '总共时间显示  
  sld.Value   =   mci.Position   /   1000   '滑动条的位置显示  
  If   mci.Mode   =   mciModeRecord   Then  
  If   sld.Value   =   sld.Max   Then   '自动加时间  
  sld.Max=sld.Max   +   10  
  End   If  
  End   If  
  End   Sub  
  Private   Sub   mci_StopClick(Cancel   As   Integer)  
  If   mci.Mode   =   mciModeRecord   Then  
  If   sld.Value   >   0   Then'期间如果按下了stop键,那么去掉Slider多余的部分  
  sld.Max   =   sld.Value  
  End   If  
  End   If  
  End   Sub  
  Private   Sub   mnuFileExit_Click()  
  Unload   Me  
  End   Sub  
  Private   Sub   mnuFileNew_Click()  
  If   blnDirty   =   True   Then   ’如果正在录音的话  
  intResult   =   MsgBox("需要保存吗?",   vbYesNo   +   vbQuestion,   "已经有了修改!")  
  Select   Case   intResult  
  Case   vbYes  
  cdlg.CancelError   =   True  
  On   Error   GoTo   ccancel  
  cdlg.ShowSave  
  mci.FileName   =   cdlg.FileName  
  mci.Command   =   "Save"  
  frmMain.MousePointer   =   11  
  GoTo   ExitFileNew  
  Case   vbNo  
  GoTo   ExitFileNew  
  End   Select  
  ccancel:  
  Exit   Sub  
  End   If  
  ExitFileNew:  
  frmMain.MousePointer   =   0  
  mci.Command   =   "close"  
  mci.Command   =   "open"  
  blnDirty   =   False  
  End   Sub  
  Private   Sub   mnuFileOpen_Click()  
  cdlg.CancelError   =   True  
  On   Error   GoTo   CancelOpen  
  cdlg.ShowOpen  
  mci.Command   =   "close"   ’打开新的文件之前先要关闭已经打开的播放/录音  
  mci.FileName   =   cdlg.FileName  
  frmMain.MousePointer   =   11  
  mci.Command   =   "open"  
  blnDirty   =   False  
  frmMain.MousePointer   =   0  
  CancelOpen:  
  Exit   Sub  
  End   Sub  
  Private   Sub   mnuFileSaveAs_Click()  
  cdlg.Flags=cdlOFNOverwritePrompt+cdlOFNNoChangeDir+cdlOFNHideReadOnly’确认保存是否覆盖原来的文件以及保存的位置是打开的位置、不显示“只读”复选  
  cdlg.ShowSave  
  mci.FileName   =   cdlg.FileName  
  frmMain.MousePointer   =   11  
  blnDirty   =   False  
  frmMain.MousePointer   =   0  
  End   Sub  
  这样,我们的录音机程序就编写完了。大家还可以在这个基础上按照自己的喜好来做进一步的修改,这个录音机程序不仅可以录音,也可以播放,它是没有录音时间限制的。至于它究竟可以录多久,笔者尝试用它录制了一个长达3个小时的文件,是完全没有问题的。  
   
   
   
   
   
   
   
  在你的程序里调用录音机  
   
  Private   Declare   Function   ShellExecute   Lib   "shell32.dll"   Alias   "ShellExecuteA"   (ByVal   hwnd   As   Long,   ByVal   lpOperation   As   String,   ByVal   lpFile   As   String,   ByVal   lpParameters   As   String,   ByVal   lpDirectory   As   String,   ByVal   nShowCmd   As   Long)   As   Long  
   
  Private   Sub   Form_Load()  
   
  ShellExecute   Me.hwnd,   "open",   "C:\WINDOWS\system32\sndrec32.exe",   vbNullString,   vbNullString,   SW_SHOW  
   
  End   Sub  
   
  Top

4 楼since1990(level)回复于 2003-08-08 22:30:42 得分 0

编制自已的电话录音小程序    
     
  2001-12-22·   ·   ··Yesky  
   
     
  1   2     下一页  
   
    或许你会认为用计算机进行电话录音需要昂贵的专用软件,其实只要懂得VB和Access的一些基本知识,我们也可以自己制作一个具备电话录音、录音数据保存、查询功能的小系统。大概只需1500元左右,其费用主要用于增添所需的声卡、音箱及具有语音功能的Modem(当然还有你的脑力劳动),比起两三万元的专用录音软件,可以说是物美价廉了。  
   
   
    首先介绍该系统的工作原理:利用VB5.0的OLE容器控件,在运行时创建嵌入对象的方法,激活在WIN95注册过的录音软件,将输入到声卡的电话语音信号录制为WAV文件,嵌入OLE容器控件中。由于把OLE容器控件与某个数据库绑定,在声音文件嵌入OLE容器控件的同时也存入了数据库。以下将详细地介绍小系统的实现过程,主要有设备的连接、数据库的建立、简单的VB编程。  
   
   
  一、设备的连接  
   
   
    设备的连接主要指Modem与电话线、电话机,Modem与声卡之间的连接方式。先将墙上的电话进线插到Modem的接口上,再用另一根电话线接在Modem与电话机之间,把Modem与电话机串联起来。Modem与电话机之间的顺序必须被考虑到。如果电话进线先进入电话机,当提起电话听筒时,信号将先被电话机截取,而不能进入Modem。接下来用双向音频输入输出线把Modem的SPK端口和声卡的LINE   INC端口连起来;将Modem的声音信号输入到声卡。好了,完成设备的连接后,我们就可以开始进行软件方面的制作了。  
   
   
  二、用Access建立一个收藏录音数据的数据库  
   
   
    首先建立一个存放声音数据的数据库,数据库可以是存储在Microsoft   Jet数据库引擎中的Microsoft  
  Access、dBASE、Microsoft   Foxpro、Excel等。由于需保存的数据并不复杂,我选用了小型而易用的Microsoft   Access97,建立一个名为Recorder的数据库来管理录音数据。在Recordeer数据库中生成表Recording,该表包含四个字段:ID、录音文件、Day、Time。结构如下:  
   
  字段名称   数据类型   字段属性  
   
  ID   自动编号   递增  
  录音齐件   OLE对象  
  Day   日期/时间   默认值=Date();格式=长日期  
  Time   日期/时间   默认值=Time();格式=长时间  
    把数据库Recorder保存在C:\下,以待后用。数据库方面的工作暂时到此为止,接着将要用VB来编写一个小程序,实现录音、自动将数据存入数据库的功能。  
   
   
     
   
   
  编制自已的电话录音小程序    
     
  2001-12-22·   ·   ··Yesky  
   
     
  上一页     1   2      
   
   
  三、用VB5.0   建立录音小程序  
    在VB5.0下新建一“标准EXE”工程,打开工程中的空白窗体Form1。在Form1上添加各种控件。  
   
   
  1.在Form1上添加Data控件  
   
   
  将Data控件添加到窗体上,Data控件属性设置如下:  
   
   
   
  (名称)   Data1  
   
  Connect   Access  
  DatabaseName   C:\RECORDER.mdb  
  Recordsource   recording  
     
   
  以上属性设置把Data控件绑定到刚才建立的Access数据库Recorder的recording表。  
   
   
  2.在Form1上添加Text   Box控件  
   
   
    在Form1上添加三个Text   Box控件,并在适当位置增添相应的标签。文本框属性设置如下:  
   
  Text   Box控件1   Text   Box控件2   Text   Box控件3  
   
   
   
  (名称)   Text1   Text2   Text3  
  Data   Field   ID   Day   Time  
  Datasource   Data1   Data1   Data1    
   
    以上属性设置使三个Text   Box绑定到Data控件,用于从与Data控件连接的数据库中分别显示字段ID、Day、Time。  
   
   
  3.在Form1上添加OLE容器控件  
   
   
  在Form1上添加OLE容器控件,属性设置如下:  
   
  (名称)   OLE1  
   
   
  Data   Field   录音文件  
  Datasource   Data1  
  Autoactivate   2-Doubleclick    
   
    通过属性设置把它与Data控件绑定,从Recorder数据库中显示字段“声音文件”。当OLE容器中的录音数据被更新时,被更新或新增的声音对象将自动被写回数据库。当双击OLE容器中的数据时,将自动播放声音文件。  
   
   
  4.在Form1上添加Command   Button控件  
   
   
    添加两个Command   Button控件到Form1上,其中一个命令按钮用于调用录音机以录制通话数据,并将录音的声音数据嵌入到OLE容器中。该按钮属性设置如下:  
   
  (名称)   Command1  
   
  Caption   开始录音  
   
  双击Command1,在Private   Sub   Command1_Click()中输入以下代码:  
  Data1.DatabaseName="C:\recorder.mdb"  
  Data1.Recordsource="Recording"  
  Data1.Refresh   创建一条新记录  
  Data1.Recordset.AddNew   创建一个嵌入声音对象  
  OLE1.CreateEmbed   "","SOUNDREC"   激活WIN95附件下的录音机  
  OLE1.DoVerb   0  
  End   Sub  
   
   
  另一个按钮用于关闭程序,属性设置如下:  
   
   
  (名称)   Command2  
   
  Caption   退出  
   
  双击Command2,在Private   Sub   Command2_Click()中输入以下代码:  
  Unload   Form1  
  End  
  End   Sub    
   
  5.编写Form1的Activate过程  
   
   
    Form1的Activate过程代码,用于在Form1打开的同时打开通信软件SuperVoice2.2并激活Command1的功能。双击Form1,弹出编写代码窗口,在对象下拉列表中选择Form,在过程下拉列表中选择Activate,在Pri  
  vate   Sub   Form_Activate()中输入以下代码:  
   
   
   
  激活Command1的功能  
  Call   Command1_Click  
  调用安装在d:\supervoc\program\中的通信程序SuperVoice2.2,来启动Modem的语音功能  
  dim   tel  
  tel=shell("d:\supervoc\program\supervoc.exe",1)  
  appactivate   tel  
  End   Sub  
     
   
  四、程序运行结果  
   
   
    保存工程,并将其生成可执行程序“录音.EXE”,放在C:\下面。好了,大功告成。现在退出VB,试一试在WIN95下运行。  
   
   
    当双击“录音.EXE”时,程序自动打开通信软件SuperVoice2.2(一般购买Modem时都随机附送SuperVoice2.2),在SuperVoice2.2的系统设置中将语音输入设备设为电话听筒,及启动SuperVoice2.2时弹出仿真电话拨号盘(只需在第一次使用时设置)。设为电话听筒的好处是通话时不需要麦克风,直接使用电话机。接着出现窗体Form1,并自动启动附件下的录音机。进行通话录音时,单击仿真电话拔号盘上的免提键及录音机上的录制按钮,开始录音。录制的声音文件被嵌入OLE容器中,同时被写到与OLE容器连接的数据库Recorder.mdb中,并自动生成录音的日期时间。除了录音功能外,还可以通过点击Data控件上的箭头按钮选择记录查询,双击OLE容器(显示为喇叭图标);自动播放选择的通话录音。如果再给窗体Form1添上DBComboBox、DBGrid控件,将使其查询功能更为完善。  
   
   
    顺便提一下,刚写完这篇文章,我又找到一个可在Win95注册的录音软件,就是创新的SoundOLE,由于界面漂亮且没有限制录音长度(附件的录音机的录音长度只有一分钟),我将准备拿它来取代那土里上气的录音机,使得我的小程序更具专业性。  
   
   
    以上代码在VB5.0、Win95系统上调试通过。  
   
     
   
  Top

相关问题

  • 大哥大姐帮忙
  • 各位大哥、大姐!!!
  • 大哥大姐帮帮忙
  • 大哥大姐帮帮忙!!
  • 哪位大哥大姐有用VB做的WINSOCK API的原代码给兄弟学习学习!!!!!!
  • 哪位大哥,大姐知道国内那个网站有jdk1.4的API下载,告诉小弟一下
  • 大哥大姐,帮帮忙吧
  • 大哥大姐帮帮我吧!
  • 各位大哥大姐救救我吧。。。。
  • 各位大哥 大姐 救救我吧!

关键词

  • .net
  • win95
  • 控件
  • 数据库
  • 文件
  • 属性
  • 数据
  • 小程序
  • 字段
  • 代码

得分解答快速导航

  • 帖主:shanhongbei

相关链接

  • Visual Basic类图书
  • Visual Basic类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo