最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

使用Matlab實(shí)現(xiàn)錄音與播放功能

 更新時(shí)間:2024年12月24日 10:12:03   作者:rbigbearr  
這篇文章主要為大家詳細(xì)介紹了如何使用Matlab實(shí)現(xiàn)錄音與播放功能,文中的示例代碼簡潔易懂,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下

目的:使用matlab生成特定信號(hào),Speaker循環(huán)播放這組信號(hào)的同時(shí),Microphone啟動(dòng)錄音。

一、生成一個(gè)單頻正弦信號(hào)

clc;clear;close all;
Fs = 48000; % 采樣率為4800Hz
f = 18000; % 正弦波頻率為18000Hz
t = 0:1/Fs:10; % 從0到10秒的時(shí)間向量 
y = sin(2*pi*f*t); % 生成正弦波信號(hào)
signal=[y',y'];   %signal為n行2列,兩列數(shù)據(jù)含義表示左右聲道。
%[signal,fs]=audioread('recorded.wav');  %假如播放wav格式的文件,使用這個(gè)函數(shù)讀取。
signal=signal./max(abs(signal));  %歸一化數(shù)據(jù)

二、播放信號(hào)

1、方式1播放

未能實(shí)現(xiàn)循環(huán)播放

%方式1播放
sound(signal, Fs); % 播放正弦波信號(hào)
display("播放中。。。"); 
system("pause");  %阻塞線程
clear sound;  %停止播放
return;       %結(jié)束程序

2、方式2播放

實(shí)現(xiàn)循環(huán)播放

%方式2播放
% 創(chuàng)建audioplayer對象
player = audioplayer(allaudio, Fs);
% 設(shè)置播放結(jié)束時(shí)的回調(diào)函數(shù)
set(player, 'TimerFcn', {@audioplayerCallback, player});
% 播放音頻
play(player);
display("播放中。。。");
system("pause");
stop(player);
return;

回調(diào)函數(shù)需要放在程序的最下邊,回調(diào)函數(shù)實(shí)現(xiàn)如下:

function audioplayerCallback(obj, event,player)
    if player.CurrentSample == player.TotalSamples
        % 當(dāng)播放結(jié)束時(shí),重新播放音頻
        stop(player);
        play(player);
    end
end

有關(guān)sound和audioplayer更多應(yīng)用可以查看幫助文檔

doc sound
doc audioplayer

三、錄制音頻

使用audiorecorder函數(shù)進(jìn)行錄制,首先設(shè)置錄音格式,選定錄音設(shè)備,錄音設(shè)備ID可以通過指令info=audiodevinfo查看。錄制時(shí)可以設(shè)置錄音時(shí)間,也可以手動(dòng)開始與關(guān)閉。代碼中實(shí)現(xiàn)的是手動(dòng)開始與關(guān)閉。

Fs=48000;    %采樣率   
nBits=16;    %位深
nChannels=2;  %通道數(shù)
%info=audiodevinfo;  %獲取電腦上所有的輸入和輸入的音頻設(shè)備,通過名稱確定您要使用的聲卡,并記錄其ID值
ID=-1;   %默認(rèn)輸入設(shè)備
recObj = audiorecorder(Fs,nBits,nChannels,ID);
disp("開始錄音.")
%recDuration = 20; %定時(shí)錄音
%recordblocking(recObj,recDuration);  %定時(shí)錄音方式
record(recObj)     %手動(dòng)錄音
disp("press any key...")
pause   %阻塞線程
stop(recObj)%停止錄音
disp("結(jié)束錄音.")
%獲取錄音數(shù)據(jù)
Recording=getaudiodata(recObj);
%play(recObj);   %播放錄音
Lrecord=Recording(:,1);  %左聲道數(shù)據(jù)
Rrecord=Recording(:,2);  %右聲道數(shù)據(jù)
%plot(abs(fft(Lrecord,Fs)));  %對錄音數(shù)據(jù)進(jìn)行fft變換
return;

三、同時(shí)播放與錄制完整代碼

clc;clear;close all;
Fs = 48000; % 采樣率為4800Hz
f = 18000; % 正弦波頻率為18000Hz
t = 0:1/Fs:10; % 從0到10秒的時(shí)間向量 
y = sin(2*pi*f*t); % 生成正弦波信號(hào)
signal=[y',y'];   %signal為n行2列,兩列數(shù)據(jù)含義表示左右聲道。
 
%[signal,fs]=audioread('recorded.wav');  %假如播放wav格式的文件,使用這個(gè)函數(shù)讀取。
signal=signal./max(abs(signal));  %歸一化數(shù)據(jù)
%方式1播放
% sound(signal, Fs); % 播放正弦波信號(hào)
% display("播放中。。。"); 
% system("pause");  %阻塞線程
%方式2
player = audioplayer(signal, Fs);
% 設(shè)置播放結(jié)束時(shí)的回調(diào)函數(shù)
set(player, 'TimerFcn', {@audioplayerCallback, player});
% 播放音頻
play(player);
 
 
Fs=48000;    %采樣率   
nBits=16;    %位深
nChannels=2;  %通道數(shù)
%info=audiodevinfo;  %獲取電腦上所有的輸入和輸入的音頻設(shè)備,通過名稱確定您要使用的聲卡,并記錄其ID值
ID=-1;   %默認(rèn)輸入設(shè)備
recObj = audiorecorder(Fs,nBits,nChannels,ID);
disp("開始錄音.")
%recDuration = 20; %定時(shí)錄音
%recordblocking(recObj,recDuration);  %定時(shí)錄音方式
record(recObj)     %手動(dòng)錄音
disp("press any key...")
pause   %阻塞線程
stop(recObj)%停止錄音
stop(player);  %停止播放
disp("結(jié)束錄音.")
%獲取錄音數(shù)據(jù)
Recording=getaudiodata(recObj);
%play(recObj);   %播放錄音
Lrecord=Recording(:,1);
Rrecord=Recording(:,2);
plot(abs(fft(Lrecord,Fs)));  %對錄音數(shù)據(jù)進(jìn)行fft變換
return;
 
function audioplayerCallback(obj, event,player)
    if player.CurrentSample == player.TotalSamples
        % 當(dāng)播放結(jié)束時(shí),重新播放音頻
        stop(player);
        play(player);
    end
end

結(jié)果

生成的正弦波信號(hào)是18k,故將錄制到的音頻數(shù)據(jù)進(jìn)行fft變換,得到18k.

到此這篇關(guān)于使用Matlab實(shí)現(xiàn)錄音與播放功能的文章就介紹到這了,更多相關(guān)Matlab錄音與播放內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 關(guān)于c語言中輸出字符指針的相關(guān)問題

    關(guān)于c語言中輸出字符指針的相關(guān)問題

    這篇文章主要介紹了關(guān)于c語言中輸出字符指針的相關(guān)問題,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-07-07
  • C語言實(shí)現(xiàn)電影院選座管理系統(tǒng)

    C語言實(shí)現(xiàn)電影院選座管理系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了C語言實(shí)現(xiàn)電影院選座管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-12-12
  • 分享C++三種類型new類型的運(yùn)算符使用詳情

    分享C++三種類型new類型的運(yùn)算符使用詳情

    這篇文章主要介紹了C++三種類型new運(yùn)算符的使用詳情,文章基于C++運(yùn)算展開主題內(nèi)容,具有一定的參考價(jià)值,需要的小伙伴可以參考一下
    2022-04-04
  • 深入串的模式匹配算法(普通算法和KMP算法)的詳解

    深入串的模式匹配算法(普通算法和KMP算法)的詳解

    本篇文章是對串的模式匹配算法(普通算法和KMP算法)的應(yīng)用進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-05-05
  • C語言內(nèi)存管理及初始化細(xì)節(jié)示例詳解

    C語言內(nèi)存管理及初始化細(xì)節(jié)示例詳解

    這篇文章主要為大家介紹了C語言內(nèi)存管理及初始化細(xì)節(jié)示例的詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步
    2022-02-02
  • 判斷機(jī)器大小端的兩種實(shí)現(xiàn)方法

    判斷機(jī)器大小端的兩種實(shí)現(xiàn)方法

    第一種方法,思路:利用指針的強(qiáng)制類型轉(zhuǎn)換。第二種方法,思路:利用共用體所有數(shù)據(jù)都從同一地址開始存儲(chǔ)。
    2013-03-03
  • C/C++函數(shù)參數(shù)聲明解析int?fun()?與?int?fun(void)?的區(qū)別講解

    C/C++函數(shù)參數(shù)聲明解析int?fun()?與?int?fun(void)?的區(qū)別講解

    C++中int fun()和int fun(void)的區(qū)別在于函數(shù)參數(shù)的聲明方式,前者默認(rèn)允許任意參數(shù),而后者表示沒有參數(shù),通過清晰的實(shí)例源代碼,詳細(xì)解釋了它們在函數(shù)聲明和調(diào)用中的不同之處,這篇文章介紹了C/C++函數(shù)參數(shù)聲明int?fun()與int?fun(void)的差異,需要的朋友可以參考下
    2024-01-01
  • 如何在Qt中實(shí)現(xiàn)關(guān)于Json?的操作

    如何在Qt中實(shí)現(xiàn)關(guān)于Json?的操作

    JSON是一種輕量級(jí)數(shù)據(jù)交換格式,常用于客戶端和服務(wù)端的數(shù)據(jù)交互,不依賴于編程語言,在很多編程語言中都可以使用JSON,這篇文章主要介紹了在Qt中實(shí)現(xiàn)關(guān)于Json的操作,需要的朋友可以參考下
    2023-08-08
  • OpenGL繪制三次Bezier曲線

    OpenGL繪制三次Bezier曲線

    這篇文章主要為大家詳細(xì)介紹了OpenGL繪制三次Bezier曲線,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-04-04
  • 基于C++的數(shù)據(jù)庫連接池的實(shí)現(xiàn)示例

    基于C++的數(shù)據(jù)庫連接池的實(shí)現(xiàn)示例

    本文主要介紹了基于C++的數(shù)據(jù)庫連接池,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2025-11-11

最新評(píng)論

临澧县| 略阳县| 红桥区| 桦南县| 开封县| 体育| 额尔古纳市| 固原市| 平顶山市| 壶关县| 阳春市| 石嘴山市| 罗江县| 库伦旗| 新宁县| 昌图县| 丰顺县| 宁南县| 镇安县| 渭源县| 泊头市| 鹤峰县| 金阳县| 大厂| 黄山市| 监利县| 黄石市| 潢川县| 石阡县| 灵宝市| 景德镇市| 垣曲县| 岐山县| 察哈| 邵东县| 冕宁县| 永州市| 宁化县| 通辽市| 连州市| 灵丘县|