Matlab 实时录音及频谱显示

本次主要使用 Matlab 进行 GUI 编程,以实现实时录音及频谱显示。界面简单高效。

一: 创建 GUI 界面设计

matlab—>在命令行执行guide—>出现gui编辑界面,选择一个默认的空白模板—>在界面上添加两个坐标轴axes1、axes2,再添加一个按钮 改名为 ‘’录音‘’,调整好位置,这样一个简单的界面就做好了,想要美观一些,可以自己再编辑。

二:编辑应用程序
保存设计后就会自动生成一个.fig的文件和一个.m的文件。
打开.m的文件,Matlab 已默认为我们添加了按钮的 Callback 回调函数。(如有其他需求,可以自行在界面设计环节进行修改)

录音按钮的功能是:按下时,实时从声卡录入音频,并实时显示时域和频域的波形。
程序步骤:先判断当前窗口句柄的isrecording的值,然后执行if语句,当isrecording值为0时,执行if下的语句,调用record(gcf,handles)函数,record函数会另外写出来,运行的时候把它们放在同一个文件夹下就可以了。当isrecording为1时,表示当前窗口正在运行,表示在录音,这时按下这个按钮,就会执行else,将isrecording设置为0,从而停止录音。所以录音按钮第一次按下开始录音,第二次按下停止录音,都是通过设置isrecording的值实现。为了保证在界面刚打开的时候,为停止录音的状态,我们需要在打开函数function yin_OpeningFcn(hObject, eventdata, handles, varargin)中添加setappdata(gcf,’isrecording’,0)命令,即一开始设置isrecording为0;

具体程序如下:

% --- Executes on button press in pushbutton1.
function pushbutton1_Callback(hObject, eventdata, handles)
% hObject    handle to pushbutton1 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
isrecording=getappdata(gcf,'isrecording');
if ~isrecording
setappdata(gcf,'isrecording',1);
recorder(gcf,handles);
else
setappdata(gcf,'isrecording',0);
end

record函数的代码:(record函数的作用是建立声卡对象,控制声卡实现录音,并对录音的数据进行实时的时域和频域显示)

function aa= recorder(cf,handles)
%RECORDER Summary of this function goes here
% Detailed explanation goes here
% h=figure(soundrec);h=cf;
thehandles=handles;
setappdata(h,'isrecording',1);Ai=analoginput('winsound'); % 创建一个模拟信号输入对象
% 添加通道
addchannel(Ai,1);
Ai.SampleRate=48000; % 采样频率
Ai.SamplesPerTrigger=Inf; % 采样数start(Ai); % 开启采样
warning off % 当采样数据不够时,取消警告
while isrunning(Ai) % 检查对象是否仍在运行if getappdata(h,'isrecording')data=peekdata(Ai,Ai.SampleRate);% 获取对象中的最后Ai.SampleRate个采样数据plot(thehandles.axes1,data) % 绘制最后Ai.SampleRate个采样数据的图形,因此表现出来就是实时的了set(handles.axes1,'ylim',[-1 1],'xlim',[0 Ai.SampleRate]);y1=fft(data,2048); %对信号做2048点FFT变换f=Ai.SampleRate*(0:1023)/2048;bar(handles.axes2,f,abs(y1(1:1024)),0.8,'g') %做原始语音信号的FFT频谱图set(handles.axes2,'ylim',[0 10],'xlim',[0 20000]);%设置handles.axes2的横纵坐标范围drawnow; % 刷新图像elsestop(Ai);num=get(Ai,'SamplesAvailable');aa=getdata(Ai,num);axes(thehandles.axes1);plot(thehandles.axes1,aa) % 绘制所有采样数据的图形y1=fft(data,2048); %对信号做2048点FFT变换f=Ai.SampleRate*(0:1023)/2048;bar(handles.axes2,f,abs(y1(1:1024)),0.8,'g') %做原始语音信号的FFT频谱图%set(handles.axes2,'ylim',[0 10],'xlim',[0 20000]);%设置handles.axes2的横纵坐标范围drawnow; % 刷新图像setappdata(h,'sounds',aa);end
end

备注:采样频率及其他参数可以根据需要和声卡实际情况进行选择。

注意:确保录音设备栏目中有已存在的录音工具。否则无法正常录音。

如需去除AGC,可以调整取消麦克风增强。

三:调试运行
至此,基本的设计就已经基本完成。下一步调试运行,体验其功能吧。

四:可能出现的问题:
博主使用的是 Matlab 2014B 64bit,使用过程中报错 “错误使用 analoginput(line 46)”。
经过资料查找基本总结了两条原因:
1. 声卡驱动不正常。
如若是该原因,就卸载声卡驱动重新安装即可。
2. 64 位不兼容问题。
如果是该情况的话,只能更换使用 32 bit 的Matlab。 博主更换使用 Matlab 2015B 32bit。就解决了该情况。
下面附上 Matlab 2015B 32bit 安装及破解: 链接:http://pan.baidu.com/s/1eRWhsEe 密码:poqg

Matlab 实时录音(声卡)及频谱显示相关推荐

  1. MATLAB实现实时录音,语音采集与读写用matlab实现录音以及语谱图的绘制.pdf

    <语音信号处理>仿真作业 院 系 电气与电子工程学院 专业班级 姓 名 学 号 指导教师 2020 年 3 月 作业题目:语音采集与读写 一.目的 (1)了解matlab 采集语音信号的原 ...

  2. 四轴飞行器1.4 姿态解算和Matlab实时姿态显示

    四轴飞行器1.4 姿态解算和Matlab实时姿态显示 MPU6050数据读取出来后,经过一个星期的努力,姿态解算和在matlab上的实时显示姿态终于完成了. 1:完成matlab的串口,并且实时通过波 ...

  3. Elecraft KX3频谱显示专用USB声卡

    前段时间在台式机上实现了Elecraft KX3频谱显示,现在想在笔记本电脑上用,但是笔记本自带声卡麦克风输入是单声道的,带双声道LINE IN的外置USB声卡都在500以上,不如自己做一个来的实在. ...

  4. 音频频谱显示-基于fmod设计音乐播放器并动态显示频谱图(二)

    音频频谱显示-显示音频文件静态频谱图(一) https://blog.csdn.net/xiaolong1126626497/article/details/126971535 音频频谱显示-基于fm ...

  5. 51DIY音乐频谱显示

    以前,每当看到家里的音箱功放上的几排小灯,随着播放的音乐如波浪般跳跃,或者在电脑上打开千千静听这个音乐播放软件时,看到那动感的频谱跟随音乐节奏优美的舞动着时,不禁思绪万千,要是自己某天能亲手用普通的单 ...

  6. 音乐频谱显示小玩具——FFT在STM32中的实现与应用

    0.前言 音乐频谱显示说白了就是"儿童版"频谱仪.笔者平时比较喜欢听音乐,闲暇之余听音乐的时候如果有个频谱显示的小玩具在旁边跳来跳去的也挺有意思的,所以笔者去万能的某宝上搜索了一下 ...

  7. xcode 怎么调用midi开发录音_音频应用专业录音声卡:雅马哈UR242声卡教程

    音频应用专业录音声卡:雅马哈UR242声卡教程 I  m" L" ~" f, i8 kwww.audioapp.cn  audio app不少用户在拿到雅马哈UR242这 ...

  8. matlab数据显示格式,如何使用MATLAB以图形格式记录和显示数据

    图形表示形式总是有助于可视化数据,并且通过查看趋势和模式非常容易.有很多软件可以根据输入值绘制图形,但是在嵌入式系统中,MATLAB是最受欢迎的软件之一,它不仅可以以图形形式显示结果,而且可以轻松地与 ...

  9. 音频频谱显示-显示音频文件静态频谱图(一)

    音频频谱显示-显示音频文件静态频谱图(一) https://blog.csdn.net/xiaolong1126626497/article/details/126971535 音频频谱显示-基于fm ...

  10. matlab中带脚咪头怎么找,Matlab实时麦克风/摄像头声音视频捕获及处理

    升升不息 &nbsp2018年08月06日 怎么看不到下载链接 YXJ1280 &nbsp2018年04月12日 谢谢你的分享! sy666666 &nbsp2018年01月3 ...

最新文章

  1. 《Gradle权威指南》--Android Gradle多项目构建
  2. H5页面--Android滑动屏幕图片误触
  3. 想了很久,我还是来了;天天看blog我也就想自己拥有一个了,好事。。。。坚持。。。。...
  4. 2020华为软挑成渝赛区初赛复赛方案分享
  5. C语言结构体struct LNode *p ,LNode *p ,Linklist p
  6. 23、Camunda DMN决策初探
  7. qpushbutton设置居中_在右侧对齐图标并将文本居中放置在QPushButton中
  8. 智能额温枪软件设计红外测温仪方案开发
  9. android 如何去获取手机Gps的信号强度
  10. Windows 程序设计基础
  11. 华为鸿蒙dba,人生中最重要的决策|读在职博士DBA
  12. nginx教程(一)--nginx是什么?能干什么?
  13. android录制视频实现
  14. C语言身份证信息查询系统(可验证输入身份证是否合法)
  15. 耗时一周整体,这4款黑科技电脑软件,功能强大到离谱
  16. Cordova中第三方UI插件的使用(2)--Topcoat
  17. Malloc for kernel output failed, Memory isnt enough
  18. 关系运算符lt, gt全拼
  19. Oracle 10g在RHEL6上的另类安装方法
  20. ymb是什么缩写_【快看】skr、xswl、zqsg……00后的这些暗语到底是什么意思?

热门文章

  1. SQL Server“对象名无效”报错的解决方法
  2. [33期] 穿越地平线的渴望
  3. C++的protected
  4. shopnc linux im安装教程,shopnc编译安装IM服务器node.js
  5. rabbitmq:publisher confirms
  6. voyage-linux系统,从Live CD安装Voyage linux到硬盘
  7. 加入洛谷OJ,开通洛谷博客
  8. adbdriver的安装
  9. Qt模仿360系统托盘
  10. PeopleSoft