怎么读取声卡的数据?

Albertleon 2003-01-11 10:54:20
求各位高手帮忙:

比如说我现在正播放一段影碟,声卡也接收到数字声音信号,于是播放出来(当然靠音箱),我能不能把这时声卡收到的声音信号截取起来呢?用VB应该怎么实现呢?还望各位多多给小弟一些建议,或这方面的书籍文章也可,谢谢了!一定给分!
...全文
272 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
bluefireman 2010-05-31
  • 打赏
  • 举报
回复
怎么改采样率啊
xxlroad 2003-02-05
  • 打赏
  • 举报
回复
希望对你有点帮助

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个小时的文件,是完全没有问题的。
FreshAir 2003-02-05
  • 打赏
  • 举报
回复
版主出国过年去了吗?怎么这么久都没有消息了呢?
FreshAir 2003-01-17
  • 打赏
  • 举报
回复
1.启动这个录音程序。
2.按下“变更-音源属性”菜单,将出现新画面(音源属性)。
3.按下画面中间录音框的“音量”按钮,将出现新画面(录音控制)。
4.按下“选项-属性”菜单,将出现新画面(属性)。
5.将显示控件的列表框中的所有项目都选上,尤其是“WAVE混合输出”项。
然后,按下OK按钮,返回3的录音控制画面。
6.将“WAVE混合输出”下的选择打上勾,关闭该画面,返回2的音源属性画面。
7.按下OK按钮,返回3的录音画面。

经过以上设置,就可以录制各种影碟播放的声音了。

注:在XP下,这个“WAVE混合输出”变成了“Stereo Out”。

anshanchengang 2003-01-17
  • 打赏
  • 举报
回复
freshair兄,你说的也太笼统了,我们这些小虾米也听不懂阿,帮人帮到底,再详细点好吗?谢谢
FreshAir 2003-01-16
  • 打赏
  • 举报
回复
录音的音源是可以选择的,如:CD、MIC、Stereo Out等。
如果选择Stereo Out的话,各种影碟播放的声音就可以录制。
我试过WindowsMediaPlayer、RealPlayer,完全没有问题。
Albertleon 2003-01-16
  • 打赏
  • 举报
回复
freshair兄,你说的录音程序好象只能录制从外接音频设备输入进来的声音耶,好象不是直接从声卡读取数据的,不知你以为然否?
FreshAir 2003-01-14
  • 打赏
  • 举报
回复
系统菜单的附件里有个录音程序,不知你用它录过音没有。
上面的方法实际上是通过OLE方式启动这个录音程序。
suntt 2003-01-12
  • 打赏
  • 举报
回复
up
Albertleon 2003-01-12
  • 打赏
  • 举报
回复
FreshAir(FreshAir)兄:是真的吗?这么简单!我试试吧!谢谢了!其他人也请多出主意啊!
FreshAir 2003-01-12
  • 打赏
  • 举报
回复
在Form上放置一个OLE控件,将其Class设成SoundRec即可。
超级大笨狼 2003-01-12
  • 打赏
  • 举报
回复
好主义!

7,763

社区成员

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

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