亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

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

目的:使用matlab生成特定信號,Speaker循環(huán)播放這組信號的同時,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列,兩列數(shù)據(jù)含義表示左右聲道。
%[signal,fs]=audioread('recorded.wav');  %假如播放wav格式的文件,使用這個函數(shù)讀取。
signal=signal./max(abs(signal));  %歸一化數(shù)據(jù)

二、播放信號

1、方式1播放

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

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

2、方式2播放

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

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

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

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

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

doc sound
doc audioplayer

三、錄制音頻

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

Fs=48000;    %采樣率   
nBits=16;    %位深
nChannels=2;  %通道數(shù)
%info=audiodevinfo;  %獲取電腦上所有的輸入和輸入的音頻設(shè)備,通過名稱確定您要使用的聲卡,并記錄其ID值
ID=-1;   %默認輸入設(shè)備
recObj = audiorecorder(Fs,nBits,nChannels,ID);
disp("開始錄音.")
%recDuration = 20; %定時錄音
%recordblocking(recObj,recDuration);  %定時錄音方式
record(recObj)     %手動錄音
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ù)進行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列,兩列數(shù)據(jù)含義表示左右聲道。
 
%[signal,fs]=audioread('recorded.wav');  %假如播放wav格式的文件,使用這個函數(shù)讀取。
signal=signal./max(abs(signal));  %歸一化數(shù)據(jù)
%方式1播放
% sound(signal, Fs); % 播放正弦波信號
% display("播放中。。。"); 
% system("pause");  %阻塞線程
%方式2
player = audioplayer(signal, Fs);
% 設(shè)置播放結(jié)束時的回調(diào)函數(shù)
set(player, 'TimerFcn', {@audioplayerCallback, player});
% 播放音頻
play(player);
 
 
Fs=48000;    %采樣率   
nBits=16;    %位深
nChannels=2;  %通道數(shù)
%info=audiodevinfo;  %獲取電腦上所有的輸入和輸入的音頻設(shè)備,通過名稱確定您要使用的聲卡,并記錄其ID值
ID=-1;   %默認輸入設(shè)備
recObj = audiorecorder(Fs,nBits,nChannels,ID);
disp("開始錄音.")
%recDuration = 20; %定時錄音
%recordblocking(recObj,recDuration);  %定時錄音方式
record(recObj)     %手動錄音
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ù)進行fft變換
return;
 
function audioplayerCallback(obj, event,player)
    if player.CurrentSample == player.TotalSamples
        % 當(dāng)播放結(jié)束時,重新播放音頻
        stop(player);
        play(player);
    end
end

結(jié)果

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

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

相關(guān)文章

  • CMake的簡單應(yīng)用

    CMake的簡單應(yīng)用

    這篇文章主要介紹了CMake的簡單應(yīng)用,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-03-03
  • 用C語言實現(xiàn)井字棋游戲代碼

    用C語言實現(xiàn)井字棋游戲代碼

    大家好,本篇文章主要講的是用C語言實現(xiàn)井字棋游戲代碼,感興趣的同學(xué)趕快來看一看吧,對你有幫助的話記得收藏一下,方便下次瀏覽
    2022-01-01
  • C語言 分支語句詳解分析

    C語言 分支語句詳解分析

    分支結(jié)構(gòu)的執(zhí)行是依據(jù)一定的條件選擇執(zhí)行路徑,而不是嚴格按照語句出現(xiàn)的物理順序。分支結(jié)構(gòu)的程序設(shè)計方法的關(guān)鍵在于構(gòu)造合適的分支條件和分析程序流程,根據(jù)不同的程序流程選擇適當(dāng)?shù)姆种дZ句
    2021-10-10
  • C++實現(xiàn)簡易版掃雷游戲

    C++實現(xiàn)簡易版掃雷游戲

    大家好,本篇文章主要講的是C++實現(xiàn)簡易版掃雷游戲,感興趣的同學(xué)趕快來看一看吧,對你有幫助的話記得收藏一下
    2022-01-01
  • .h和.cpp文件的區(qū)別(zt)詳細介紹

    .h和.cpp文件的區(qū)別(zt)詳細介紹

    特別是對源文件和頭文件的概念,需要深入對它了解,本文將詳細介紹,需要了解的朋友可以參考下
    2012-11-11
  • 實例詳解C++中指針與引用的區(qū)別

    實例詳解C++中指針與引用的區(qū)別

    引用是C++引入的重要機制(C語言沒有引用),它使原來在C中必須用指針來實現(xiàn)的功能有了另一種實現(xiàn)的選擇,在書寫形式上更為簡潔,那么引用的本質(zhì)是什么,它與指針又有什么關(guān)系呢?這篇文章主要給大家介紹了關(guān)于C++中指針與引用的區(qū)別,需要的朋友可以參考下
    2021-07-07
  • vscode編譯運行c語言報錯亂碼的解決

    vscode編譯運行c語言報錯亂碼的解決

    本文主要介紹了vscode編譯運行c語言報錯亂碼,文中通過圖文介紹的的非常詳細,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-07-07
  • C語言 位段的詳細介紹

    C語言 位段的詳細介紹

    這篇文章主要介紹了C語言 位段的詳細介紹的相關(guān)資料,學(xué)習(xí)C語言基礎(chǔ)的朋友,可以參考本文,需要的朋友可以參考下
    2016-11-11
  • 關(guān)于C語言多線程pthread庫的相關(guān)函數(shù)說明

    關(guān)于C語言多線程pthread庫的相關(guān)函數(shù)說明

    下面小編就為大家?guī)硪黄P(guān)于C語言多線程pthread庫的相關(guān)函數(shù)說明。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-05-05
  • 淺析_tmain()與main()的區(qū)別

    淺析_tmain()與main()的區(qū)別

    _tmain()是為了支持unicode所使用的main一個別名,既然是別名,應(yīng)該有宏定義過的,在哪里定義的呢?就在那個讓你困惑的<stdafx.h>里
    2013-03-03

最新評論