电话录音????

cq_hzh93 2003-03-04 12:26:44
我想做一个电话录音:在接电话时让系统将通话内容记录下来转化为声音文件,怎么做???请高手给出一个方向也好!!!感谢.
另:是否有声音采集卡之内的硬件卡.
...全文
65 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
since1990 2003-08-08
  • 打赏
  • 举报
回复





这些问题解决的关键是:了解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

since1990 2003-08-08
  • 打赏
  • 举报
回复
编制自已的电话录音小程序

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系统上调试通过。



since1990 2003-08-08
  • 打赏
  • 举报
回复
相关文章,但愿对你有帮助:

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


nanbingjun2000 2003-04-02
  • 打赏
  • 举报
回复
实用 MS的TAPI焊数库可以实现...
大智 Kevin 2003-04-02
  • 打赏
  • 举报
回复
up
zhzhyan 2003-03-04
  • 打赏
  • 举报
回复
有专门的电话录音卡,
我以前为它写过点东西,
AechoJohn 2003-03-04
  • 打赏
  • 举报
回复
没有用过,向你学习。
cq_hzh93 2003-03-04
  • 打赏
  • 举报
回复
请教zhzhyan:
电话录音卡哪里有卖?对它写代码困难吗??你帮人帮到底吧!!
南京子佩录音盒开发包支持哪些操作系统?有哪些API函数?采用怎样的调用方式? · 二次开发包支持操作系统:win9x/winme/win2000/xp/win2003/vista,win 7 · API接口使用两种模式提供: 1 采用标准的windows DLL库形式提供,可以在支持DLL模式开发的平台下使用。(如:vb,vc,Delphi,vfp,c#,pb,cb等) 1 产用经过数字签名的标准windows 组件模式提供,开发接口跟语言无关,可用在所有windows系统,包括B/S系统开发。支持所有windows开发环境 · 开发包提供API模块分为以下几个模块: o 设备放音相关(包括缓冲时时放音,文件放音等) o 设备录音相关(包括缓冲时时录音,文件录音等) o 标准信号音检测控制(无须人工设置频率,自动识别线路频率) o 软件摘/挂机拨号,来电弹屏相关 o 各种设备型号的功能控制接口 o 单路开发模块提供语音识别控制 o 多路开发包提供软交换控制模块 子佩电话录音盒来电号码显示支持哪些制式?准确精度达到什么程度?是否支持二次电话按键和发码? 子佩USB语音盒支持标准的DTMF与FSK的双制式CID主叫号识别,识别率达到100%。是目前来电号码识别精度最高的电话管理设备之一。子佩USB语音盒支持二次电话按键DTMF识别,支持不同速率对电话线路DTMF发码。最常用的二次开发USB电话语音盒有哪几种? 子佩二次开发USB电话语音盒,除了有电话话机接口与耳麦接口型区分外,大致还可分为两种类型:第一种功能相对简单,支持开发获取CID(主叫号码)来电显示,实现电话通话录音,型号为:R1、C2-R、C4-R、C7-R等。您的客户来电管理软件或CRM软件,只需要获取来电号码,实现资料弹屏的二次开发时,可以选择以上型号。第二种功能相对丰富,除实现第一种所具有的基本功能外,还可实现软件拨号、电话留言、控制话机振铃、软交换、IP网关等,具体视不同型号而定,例如:P1、B3、C2-LP、C7-LPQ等。您的客户来电管理软件或CRM软件,以及电话查询系统、电话通知系统、小型呼叫中心系统,可以选择以上相关型号。 南京子佩科技公司在为合作伙伴提供先进的产品同时、也要为二次开发合作伙伴获得产品整合后的市场竞争优势,包括产品价格和产品性能。子佩更希望在合作伙伴的支持下,实现互惠互利,一起获得双盈。 www.dianhua168.com
Google Android SDK开发范例大全(完整版)共4个分卷 目录 第1章 了解.深入.动手做. 1.1 红透半边天的Android 1.2 本书目的及涵盖范例范围 1.3 如何阅读本书 1.4 使用本书范例 1.5 参考网站 第2章 Android初体验 2.1 安装AndroidSDK与ADTplug-in 2.2 建立第一个Android项目(HelloAndroid!) 2.3 Android应用程序架构——从此开始 2.4 可视化的界面开发工具 2.5 部署应用程序到Android手机 第3章 用户人机界面 3.1 更改与显示文字标签——TextView标签的使用 3.2 更改手机窗口画面底色——drawable定义颜色常数的方法 3.3 更改TextView文字颜色——引用Drawable颜色常数及背景色 3.4 置换TextView文字——CharSequence数据类型与ResourceID应用 3.5 取得手机屏幕大小——DisplayMetrics取得画面宽高的方法 3.6 样式化的定型对象——Style样式的定义 3.7 简易的按钮事件——Button事件处理 3.8 手机页面的转换——setContentView的应用 3.9 调用另一个Activity——Intent对象的使用 3.10 不同Activity之间的数据传递——Bundle对象的实现 3.11 返回数据到前一个Activity——startActivityForResult方法 3.12 具有交互功能的对话框——AlertDialog窗口 3.13 置换文字颜色的机关——Button与TextView的交互 3.14 控制不同的文字字体——Typeface对象使用 3.15 如iPhone拖动相片特效——Gallery画廊 3.16 自制计算器——多按钮的整合应用 3.17 关于(About)程序信息——Menu功能菜单程序设计 3.18 程序加载中,请稍后——ProgressDialog与线程整合应用 3.19 全屏幕以按钮覆盖——动态产生按钮并最大化 3.20 今晚到哪儿打牙祭?——具选择功能的对话框 3.21 Android变脸——主题(Theme)实现 第4章 史上超豪华的手机控件 4.1 EditText与TextView共舞——setOnKeyListener事件 4.2 设计具有背景图的按钮——ImageButton的焦点及事件处理 4.3 给耶诞老人的信息——Toast对象的使用 4.4 我同意条款——CheckBox的isChecked属性 4.5 消费券采购列表——多选项CheckBox的应用 4.6 向左或向右——RadioGroup组与onCheckedChanged事件 4.7 专业相框设计——ImageView的堆栈应用 4.8 自定义下拉菜单模式——Spinner与setDropDownViewResource 4.9 动态添加/删除的Spinner菜单——ArrayList与Widget的依赖性 4.10 心爱小宝贝相片集——Gallery与衍生BaseAdapter容器 4.11 快速的搜索手机文件引擎——JavaI/O的应用 4.12 按钮也能随点击变换——ImageButton选择特效 4.13 具自动提示功能的菜单——AutoCompleteTextView与数组 4.14 数字及模拟小时钟设计——AnalogClock与DigitalClock的原理 4.15 动态输入日期与时间——DatePicker与TimePicker应用 4.16 猜猜红心A在那儿——ImageView点击事件与透明度处理 4.17 后台程序运行进度提示——ProgressBar与Handler的整合应用 4.18 动态文字排版——GridView与ArrayAdapter设计 4.19 在Activity里显示列表列表——ListView的布局 4.20 以动态列表配置选项——ListActivity与Menu整合技巧 4.21 查找程序根目录下所有文件——JavaI/O与ListActivity的结合.. 4.22 加载手机磁盘里的图文件——使用decodeFile方法 4.23 动态放大缩小ImageView里的图片——运用Matrix对象来缩放图文件 4.24 动态旋转图片——Bitmap与Matrix旋转ImageView 4.25 猜猜我在想什么——RadioButtonID 4.26 离开与关闭程序的弹出窗口——对话窗口上的ICON图标 第5章 交互式通信服务与手机控制 5.1 具有正则表达式的TextView——Linkify规则 5.2 ACTION!CALL!拨打电话——Intent

7,786

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧