首页 > 其他分享 >Matlab的录音与播放

Matlab的录音与播放

时间:2024-03-14 15:35:51浏览次数:17  
标签:Fs signal 录音 recObj player Matlab 播放

目的:使用matlab生成特定信号,Speaker循环播放这组信号的同时,Microphone启动录音。

一、生成一个单频正弦信号

clc;clear;close all;
Fs = 48000; % 采样率为4800Hz
f = 18000; % 正弦波频率为18000Hz
t = 0:1/Fs:10; % 从0到10秒的时间向量 
y = sin(2*pi*f*t); % 生成正弦波信号
signal=[y',y'];   %signal为n行2列,两列数据含义表示左右声道。
%[signal,fs]=audioread('recorded.wav');  %假如播放wav格式的文件,使用这个函数读取。
signal=signal./max(abs(signal));  %归一化数据

二、播放信号

1、方式1播放

未能实现循环播放

%方式1播放
sound(signal, Fs); % 播放正弦波信号
display("播放中。。。"); 
system("pause");  %阻塞线程
clear sound;  %停止播放
return;       %结束程序

2、方式2播放

实现循环播放

%方式2播放
% 创建audioplayer对象
player = audioplayer(allaudio, Fs);
% 设置播放结束时的回调函数
set(player, 'TimerFcn', {@audioplayerCallback, player});
% 播放音频
play(player);
display("播放中。。。");
system("pause");
stop(player);
return;

回调函数需要放在程序的最下边,回调函数实现如下:

function audioplayerCallback(obj, event,player)
    if player.CurrentSample == player.TotalSamples
        % 当播放结束时,重新播放音频
        stop(player);
        play(player);
    end
end

有关sound和audioplayer更多应用可以查看帮助文档

doc sound
doc audioplayer

三、录制音频

使用audiorecorder函数进行录制,首先设置录音格式,选定录音设备,录音设备ID可以通过指令info=audiodevinfo查看。录制时可以设置录音时间,也可以手动开始与关闭。代码中实现的是手动开始与关闭。

Fs=48000;    %采样率   
nBits=16;    %位深
nChannels=2;  %通道数
%info=audiodevinfo;  %获取电脑上所有的输入和输入的音频设备,通过名称确定您要使用的声卡,并记录其ID值
ID=-1;   %默认输入设备
recObj = audiorecorder(Fs,nBits,nChannels,ID);
disp("开始录音.")
%recDuration = 20; %定时录音
%recordblocking(recObj,recDuration);  %定时录音方式
record(recObj)     %手动录音
disp("press any key...")
pause   %阻塞线程
stop(recObj)%停止录音
disp("结束录音.")
%获取录音数据
Recording=getaudiodata(recObj);
%play(recObj);   %播放录音
Lrecord=Recording(:,1);  %左声道数据
Rrecord=Recording(:,2);  %右声道数据
%plot(abs(fft(Lrecord,Fs)));  %对录音数据进行fft变换
return;

三、同时播放与录制完整代码

clc;clear;close all;
Fs = 48000; % 采样率为4800Hz
f = 18000; % 正弦波频率为18000Hz
t = 0:1/Fs:10; % 从0到10秒的时间向量 
y = sin(2*pi*f*t); % 生成正弦波信号
signal=[y',y'];   %signal为n行2列,两列数据含义表示左右声道。

%[signal,fs]=audioread('recorded.wav');  %假如播放wav格式的文件,使用这个函数读取。
signal=signal./max(abs(signal));  %归一化数据
%方式1播放
% sound(signal, Fs); % 播放正弦波信号
% display("播放中。。。"); 
% system("pause");  %阻塞线程
%方式2
player = audioplayer(signal, Fs);
% 设置播放结束时的回调函数
set(player, 'TimerFcn', {@audioplayerCallback, player});
% 播放音频
play(player);


Fs=48000;    %采样率   
nBits=16;    %位深
nChannels=2;  %通道数
%info=audiodevinfo;  %获取电脑上所有的输入和输入的音频设备,通过名称确定您要使用的声卡,并记录其ID值
ID=-1;   %默认输入设备
recObj = audiorecorder(Fs,nBits,nChannels,ID);
disp("开始录音.")
%recDuration = 20; %定时录音
%recordblocking(recObj,recDuration);  %定时录音方式
record(recObj)     %手动录音
disp("press any key...")
pause   %阻塞线程
stop(recObj)%停止录音
stop(player);  %停止播放
disp("结束录音.")
%获取录音数据
Recording=getaudiodata(recObj);
%play(recObj);   %播放录音
Lrecord=Recording(:,1);
Rrecord=Recording(:,2);
plot(abs(fft(Lrecord,Fs)));  %对录音数据进行fft变换
return;

function audioplayerCallback(obj, event,player)
    if player.CurrentSample == player.TotalSamples
        % 当播放结束时,重新播放音频
        stop(player);
        play(player);
    end
end

结果

生成的正弦波信号是18k,故将录制到的音频数据进行fft变换,得到18k.

标签:Fs,signal,录音,recObj,player,Matlab,播放
From: https://blog.csdn.net/rbigbearr/article/details/136709275

相关文章

  • C#使用NAudio录音,并导出录音数据
    一、枚举电脑录音设备,指定设备录音1、使用Vs2019的Nuget包管理器安装NAudio包。如图所示:2、创建录音对象并指定录音格式//录音对象WaveInEventwaveIn=newWaveInEvent();intsampleRate=48000;//采样率intchannels=2;//录音通道数intbitsPerSa......
  • 基于遗传优化的协同过滤推荐算法matlab仿真
    1.算法运行效果图预览  最后得到推荐的商品ID号:推荐商品的ID号:ans=98381758221911149021490212352247322307123499117901547165501655016550......
  • 反演问题求解:基于MATLAB的反演问题求解算法实现和应用,包括反演问题数值模拟、反演问题
    鱼弦:公众号【红尘灯塔】,CSDN内容合伙人、CSDN新星导师、全栈领域优质创作者 、51CTO(Top红人+专家博主) 、github开源爱好者(go-zero源码二次开发、游戏后端架构https://github.com/Peakchen)基于MATLAB的反演问题求解:原理、应用、实现与分析反演问题是指由间接观测数......
  • vue2播放音频组件mp3
    贴代码直接使用,配合了el-slider组件完成父组件data(){return{queryParams{visitTapesList:[{url:'xxxxxx'},{url:'xxxxxx'},{url:'xxxxxx'}]}}}<Audiov-for="(item,inde......
  • 考虑功率均分与电压频率的事件触发分布式二次控制MATLAB模型
    微❤关注“电气仔推送”获得资料(专享优惠)模型简介此模型是在《基于事件触发机制的孤岛微电网二次电压与频率协同控制MATLAB仿真模型》上进一步创作的,之前的模型只考虑了二次电压与频率控制,并没有考虑均分这一项点。因此此模型在事件触发机制的基础上,继续创作了基于事件触发......
  • 【MATLAB源码-第140期】基于matlab的深度学习的两用户NOMA-OFDM系统信道估计仿真,对比L
    操作环境:MATLAB2022a1、算法描述深度学习技术在无线通信领域的应用越来越广泛,特别是在非正交多址接入(NOMA)和正交频分复用(OFDM)系统中,深度学习技术被用来提高信道估计的性能和效率。信道估计是无线通信系统中的关键技术之一,它直接影响着系统的通信质量和可靠性。本文将详细介......
  • 【MATLAB源码-第146期】基于matlab的信源编码仿真GUI,对比霍夫曼编码,算术编码和LZ编码
    操作环境:MATLAB2022a1、算法描述霍夫曼编码、算术编码和LZ编码是三种广泛应用于数据压缩领域的编码技术。它们各自拥有独特的设计哲学、实现方式和适用场景,因此在压缩效率、编解码速度和内存使用等方面表现出不同的特点。接下来详细描述这三种编码技术,并对它们进行比较。......
  • Matlab启动时实现自动切换到自定义的工作目录
    前言因为最近在学习数学建模,正好还需要用到Matlab这个软件来辅助学习。而我每次上课的时候启动我的Matlab都会从我的安装位置打开工作区(在我电脑上是:Z:\Matlab\bin),但是我自己为了整洁,从而新建了一个专门的文件夹来存放我的文件(在我电脑上是:D:\MatlabProject)。这就不得......
  • 触发器的用法:同一视频,设置三个触发器,控制播放、暂停、退出
    控制按钮的设置1.用自选图形绘制“播放”“暂停”“退出”控制按钮,视频插入2.在PowerPoint中插入视频,点击视频选择,选择动画菜单,出现播放、暂停、停止动画,(WPS中似乎没有这个功能,也可能是本人使用的版本的原因)可以设置视频的播放、暂停、停止。添加动画效果3.分别为视频添加......
  • 从零开始利用MATLAB进行FPGA设计(一):建立脉冲检测模型的Simulink模型2
    目录1.模块的总体结构1.1从工作空间导入输入信号1.2FIR滤波器2.Subsystem3.MATLABFunction文章灵感来源于MATLAB官方免费教程:HDLCoderSelf-GuidedTutorial考虑到MATLAB官网的英文看着慢,再加上视频讲解老印浓浓的咖喱味,我决定记录利用MATLAB&Simulink&SystemGenerat......