怎样从声卡实时labviww采集数据实时显示

使用matlab采集声卡信号后,如何显示动态声音波形?_百度知道
使用matlab采集声卡信号后,如何显示动态声音波形?
ai=analoginput('winsound')addchannel(ai,1);durationn=1;ai.samplerate=11000;ai.triggertype='immediate';start(ai)data=getdata(ai);...
ai=analoginput('winsound')addchannel(ai,1);durationn=1;ai.samplerate=11000;ai.triggertype='immediate';start(ai)data=getdata(ai);
答题抽奖
首次认真答题后
即可获得3次抽奖机会,100%中奖。
QIANGONG120
来自电脑网络类芝麻团
QIANGONG120
采纳数:295
获赞数:1367
参与团队:
在matlab中怎样对声卡进行实时采集数据对语音信号采集,有两种方法来实现。方法一:采用对声卡产生一个模拟输入对象的方式进行采集。数据采集过程可以分为四步:1) 初始化。Matlab将声卡等设备都作对象处理,其后的一切操作都不与硬件直接相关,而是通过对该对象的操作来作用于硬件设备,所以首先要对声卡产生一个模拟输入对象:ai = analoginput (’winsound’) ;ai ——Matlab 中的变量,它是一个模拟输入设备对象句柄,所有的数据采集过程都是通过对该句柄的操作来实现;analoginput ( ) ——模拟输入设备对象建立函数,通过该函数将A/ D 转换硬件映射为Matlab workspace 中的一个模拟输入设备对象句柄;winsound——声卡设备驱动程序,Matlab 软件内含该驱动程序。2) 配置。给ai对象添加通道,设置采样频率。addchannel (ai ,1);%添加通道fs = 8000; %采样频率设置为8KHzai.SampleRate = fs ;%设置采样频率3) 采样。启动设备对象,开始采集数据。t = 2s ; %设定采样时间start (ai); %启动设备对象data = get (ai ,t *fs) ; %获得采样数据4) 终止。停止对象并删除对象。stop (ai) ;delete (ai) ;这样便完成了一次完整的数据采集过程,采样频率和采样时间都是由用户输入的,十分方便。方法二:是直接利用MATLAB数据采集箱中提供的的函数命令进行采集,即wavrecord 。wavrecord是利用Windows 音频输入设备记录声音, 其调用格式为:y=wavrecord(n ,fs ,ch ,dtype) ;本命令是得到数字化的语音数据串,,可直接作为Matlab变量参与各种运算,式中n 为采样的点数,决定了录音长度;fs为采样频率,默认值为11025Hz,还可根据要求自己选择合适的采样率;ch为声道数,默认值为1,表示单声道,如果指定为2,则采样为双声道立体声数据;dtype为采样数据的存储格式,用字符串指定,可以是‘double’、‘single’、‘int16’、‘int8’,指定存储格式的同时也就规定了每个采样值量化的精度,int8 对应8 位精度采样,其他都是16 位采样精度。使用Matlab 的wavread 函数也可以采集语音。不过wavread 函数只能读取计算机中已有的、扩展名为“.wav”的声音文件。其调用形式为: y=wavread (file)
spirit3772
spirit3772
采纳数:255
获赞数:1148
用循环或者定时器 隔一段时间读取数据绘图?t = timer('TimerFcn',@callback, 'Period', 10.0);set(t, 'ExecutionMode', 'FixedSpacing')start(t)%%数据满足要求后stop(t)delete(t)function callback(obj, event, string_arg)ai=analoginput('winsound');addchannel(ai,1);ai.samplerate=11000;ai.triggertype='immediate';start(ai);[data,time,abstime,events] = getdata(ai);plot(data);
本回答被提问者采纳
为你推荐:
其他类似问题
您可能关注的内容
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。基于声卡的数据采集与分析 - LabVIEW论坛 -
中国电子技术论坛 -
最好最受欢迎电子论坛!
后使用快捷导航没有帐号?
基于声卡的数据采集与分析
<div class=""
有需要可以下载看看哦
下载积分: 积分 -1 分
136.48 KB, 下载次数: 292, 下载积分: 积分 -1 分
已退回5积分
23:28:27  
该类别下有 95 个回答。
该类别下有 61 个回答。
该类别下有 54 个回答,其中被选为最佳答案 1 次。
该类别下有 47 个回答。
该类别下有 46 个回答。
该类别下有 43 个回答。
该类别下有 40 个回答。
该类别下有 30 个回答。
该类别下有 30 个回答。
该类别下有 30 个回答。
该类别下有 29 个回答。
该类别下有 29 个回答。
该类别下有 27 个回答。
该类别下有 26 个回答,其中被选为最佳答案 1 次。
该类别下有 26 个回答。
该类别下有 26 个回答。
该类别下有 25 个回答。
该类别下有 25 个回答。
该类别下有 25 个回答。
该类别下有 25 个回答。
我看看!!!!
我也看看!!!!
好好好。。。。。。。。。。。。。。。。。。
看一看。。。。
看一看。。。。
有用、、、、、、、、、、、、、、、、
下载下来看看 是不是我需要的
下载下来看看 是不是我需要的
不知道为什么不能运行???
我也看看&&最近在做这个&&谢谢分享!
找不到子VI?
文件不全 缺少子VI
下载下来看看 是不是我需要的
棒棒棒!!!
感谢分享!下载下来看看,是不是我需要的、
文件不全 缺少子VI
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
Powered by
供应链服务
版权所有 (C) 深圳华强聚丰电子科技有限公司C_Builder的声卡数据实时采集的实现_苏旭武_百度文库
您的浏览器Javascript被禁用,需开启后体验完整功能,
享专业文档下载特权
&赠共享文档下载特权
&100W篇文档免费专享
&每天抽奖多种福利
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
C_Builder的声卡数据实时采集的实现_苏旭武
阅读已结束,下载本文需要
定制HR最喜欢的简历
下载文档到电脑,同时保存到云知识,更方便管理
&#xe64e;加入VIP
还剩1页未读,
定制HR最喜欢的简历
你可能喜欢转自:http://shanewfx.github.io/blog//caprure-audio-on-windows/
前一段时间接到一个任务,需要采集到声卡的输出信号,以便与麦克风的输入信号进行混音。
在考虑如何实现这个需求前,我们先讨论下电脑声音的三种模式:
1) render模式
该方式实际上就是播放(output)声音,常见的API如PlaySound, WaveOutXXX, DirectSound等
2) capture模式
该方式实际上就是录入(input)声音, 也就是我们通过麦克风输入声音,常见API如WaveInXXX
3)loopback模式
该方式就是我们需要实现的方式,即把扬声器里播放的声音抓取下来。
对于上面3种方式,render和capture方式应该比较好理解, 也都是系统有API直接支持的方式, loopback方式就比较奇怪了,在XP上该方式系统实际都没有正式支持, loopback的录制方式实际上也涉及到CD的版权问题。
之前一直没有研究过音频的相关技术,这次就顺便抽出一点时间去了解了一下Windows上采集音频的相关技术。
对于音频处理的技术,主要有如下几种:
采集麦克风输入
采集声卡输出
将音频数据送入声卡进行播放
对多路音频输入进行混音处理
1.Windows上音频处理的API
在Windows操作系统上,常用的音频处理技术主要包括:
Wave系列API函数、
DirectSound、
Core Audio。
其中,Core Audio只可以在Vista以上(包括Vista)的操作系统中才能使用,主要用来取代Wave系列API函数和DirectSound。
Core Audio实现的功能也比较强大,能实现对麦克风的采集、声卡输出的采集、控制声音的播放。
而Wave系列的API函数主要是用来实现对麦克风输入的采集(使用WaveIn系列API函数)和控制声音的播放(使用后WaveOut系列函数)。
DirectSound能够实现的功能估计和Wave系列API差不多,可能会更强一些(由于没有使用过DirectSound,不太肯定!)。
为了实现采集模块对操作系统的兼容性更好,基本上对麦克风输入的采集使用WaveIn系列API函数比较多;
在Windows XP系统中,没有直接提供对声卡输出进行采集的API,因此,在Windows XP要实现对声卡输出的采集会比较麻烦。
通常可选用支持混音的声卡,然后通过使用声卡的混音模块来实现采集,但并不是所有的声卡都支持混音的功能,这样的方案不具备通用性。
要实现通用性,可以采用虚拟声卡的方式来实现,从驱动层获取声卡的输出数据,但这种方案实现难度会比较大。
而在Vista以上的系统中,如Win7,则可以使用Core Audio中的API函数来实现采集声卡输出的功能。
对于混音模块的实现,目前基本是使用自定义的混音算法来完成功能,系统没有直接的API函数可供调用。
2.使用WaveIn系列API函数实现麦克风输入采集
涉及的API函数:
waveInOpen
开启音频采集设备,成功后会返回设备句柄,后续的API都需要使用该句柄
调用模块需要提供一个回调函数(waveInProc),以接收采集的音频数据
waveInClose
关闭音频采集模块
成功后,由waveInOpen返回的设备句柄将不再有效 ?
waveInPrepareHeader
准备音频采集数据缓存的空间
waveInUnprepareHeader
清空音频采集的数据缓存
waveInAddBuffer
将准备好的音频数据缓存提供给音频采集设备
在调用该API之前需要先调用waveInPrepareHeader
waveInStart
控制音频采集设备开始对音频数据的采集
waveInStop
控制音频采集设备停止对音频数据的采集
音频采集设备采集到音频数据后,会调用在waveInOpen中设置的回调函数。
其中参数包括一个消息类型,根据其消息类型就可以进行相应的操作。
如接收到WIM_DATA消息,则说明有新的音频数据被采集到,这样就可以根据需要来对这些音频数据进行处理。
(示例以后补上)
3.使用Core Audio实现对声卡输出的捕捉
涉及的接口有:
IMMDeviceEnumerator
IAudioClient
IAudioCaptureClient
主要过程:
创建多媒体设备枚举器(IMMDeviceEnumerator)
通过多媒体设备枚举器获取声卡接口(IMMDevice)
通过声卡接口获取声卡客户端接口(IAudioClient)
通过声卡客户端接口(IAudioClient)可获取声卡输出的音频参数、初始化声卡、获取声卡输出缓冲区的大小、开启/停止对声卡输出的采集
通过声卡采集客户端接口(IAudioCaptureClient)可获取采集的声卡输出数据,并对内部缓冲区进行控制
(示例以后补上)
4.常用的混音算法
混音算法就是将多路音频输入信号根据某种规则进行运算(多路音频信号相加后做限幅处理),得到一路混合后的音频,并以此作为输出的过程。
我目前还做过这一块,搜索了一下基本有如下几种混音算法:
将多路音频输入信号直接相加取和作为输出
将多路音频输入信号直接相加取和后,再除以混音通道数,防止溢出
将多路音频输入信号直接相加取和后,做Clip操作(将数据限定在最大值和最小值之间),如有溢出就设最大值
将多路音频输入信号直接相加取和后,做饱和处理,接近最大值时进行扭曲
将多路音频输入信号直接相加取和后,做归一化处理,全部乘个系数,使幅值归一化
将多路音频输入信号直接相加取和后,使用衰减因子限制幅值
下面是XP时代的Audio架构图, 该架构下audio的合成和压缩都是在系统内核里进行的:
在XP这种方式下,我们要抓去声卡播放的声音没有正规的方式, 一般来说只有2中:&
一种是虚拟声卡,还有一种就是Hook audio 播放相关的API (很多时候我们会发现API hook是没有办法时的全能办法 ^_^)
但是在Vista之后,微软修改了原来的媒体架构, 以COM的方式重新封装了core audio API:
以看到原来Auido的API (waveXXX, mixerXXX和DirectSound)都依赖下层的新封装的Core Audio
APIs,而且这些APi都工作在用户模式, 也就是说声音的合成是在用户模式下通过软件实现的。在Vista之后,
可以看到我们可以单独控制每个应用程序的声音了, 因为每路Audio都可以工作在不同的Audio session了。通过新的Core Audio
API, 我们可以很容易的实现声卡声音的抓取
阅读(...) 评论()&&&&&&&&&&&&&&&&&&
阅读排行榜
评论排行榜
工作中有个需求是关于抓取扬声器的声音, 为什么会有这个需求?&试想我们在共享远程桌面时,如果能够把本地桌面应用程序的声音也一起发给对方, 用户体验该是多么棒。
在考虑如何实现这个需求前,我们先讨论下电脑声音的三种模式:
1) render模式
该方式实际上就是播放(output)声音,常见的API如PlaySound, WaveOutXXX, DirectSound等
2) capture模式
该方式实际上就是录入(input)声音, 也就是我们通过麦克风输入声音,常见API如WaveInXXX
3)loopback模式
该方式就是我们需要实现的方式,即把扬声器里播放的声音抓取下来。
对于上面3种方式,render和capture方式应该比较好理解, 也都是系统有API直接支持的方式, loopback方式就比较奇怪了,在XP上该方式系统实际都没有正式支持, loopback的录制方式实际上也涉及到CD的版权问题。
下面是XP时代的Audio架构图, 该架构下audio的合成和压缩都是在系统内核里进行的:
在XP这种方式下,我们要抓去声卡播放的声音没有正规的方式, 一般来说只有2中:&
一种是虚拟声卡,还有一种就是Hook audio 播放相关的API (很多时候我们会发现API hook是没有办法时的全能办法 ^_^)
但是在Vista之后,微软修改了原来的媒体架构, 以COM的方式重新封装了core audio API:
可以看到原来Auido的API (waveXXX, mixerXXX和DirectSound)都依赖下层的新封装的Core Audio APIs,而且这些APi都工作在用户模式, 也就是说声音的合成是在用户模式下通过软件实现的。在Vista之后, 可以看到我们可以单独控制每个应用程序的声音了, 因为每路Audio都可以工作在不同的Audio session了。通过新的Core Audio API, 我们可以很容易的实现声卡声音的抓取, 具体可参考这里:
但是很快我们又发现了另外一个问题, 在一个网络会议里面, 如果共享自己桌面的人加入了VOIP, 另外也有其他与会者也加入了VOIP, 与会者说话的声音会在共享桌面端播放出来,但是该声音和共享的应用程序的声音又被一起被抓下来后发给了原来的与会者, 这样就有回声了。
这里就涉及到抓取声卡声音时能否排除掉某个声音,可惜答案是系统WASAPI不支持这种方式。但是因为与会者VOIP的声音是我们自己播放的,所以我们有该声音样本, 理论上我们可以通过噪声消除从混音里过滤掉与会者的声音,当然这块知识太高深,需要专门的人才能做了。
&一些Audio相关的例子:&个人写的一个小Demo:&
阅读(8668)
&re: 如何抓取扬声器的声音
恩,这里代码不错的。正在学习中。&&&&&&
&re: 如何抓取扬声器的声音[未登录]
8错。关于声卡的LOOPBACK模式,这里也有介绍&&&&&&
&re: 如何抓取扬声器的声音
博主,你好!首先感谢你的代码分享,我从中受益不少。但有个问题想向你反馈,不知道你有没有解决方法。在点击startCapture以后,程序开始采集播放声卡上的声音。但在这个过程中,我打开Audition软件,并有频繁切换桌面上文件夹。然后,点击stopCapture停止录音。并打开StartPlay以后,听录下的音源,发现声音存在数据不连续,丢失的现象。于是,也具体到代码和日志里面分析,发现在录音过程中,博主所用的定时器并非完全按照5ms去探测AudioEndpointBuffer上的数据,在桌面上操作或打开一些软件的时候,计时器会受到影响,异常时会出现几次一两百毫秒周期,出现了音频数据的丢失。针对这种情况,博主,你有相关的解决方法吗?&&&&&&
&re: 如何抓取扬声器的声音
@josanna不行就开线程吧,还不行可以尝试提高线程的优先级&&&&&&
&re: 如何抓取扬声器的声音
@Richard Wei好的 我去试试,多谢!&&&&&&

我要回帖

更多关于 摄像头实时采集数据 的文章

 

随机推荐