function open_pushbutton1_Callback(hObject, eventdata, handles)

该函数是一个回调函数,当用户点击 GUI 界面上的'打开文件'按钮时,调用该函数,实现读取并显示音频文件的功能。

代码解释:

function open_pushbutton1_Callback(hObject, eventdata, handles)
% hObject    handle to open_pushbutton1 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)

global x;  % 原始音频信号
global Fs; % 采样率
global tl; 
global x2;

[filename, pathname] = uigetfile('*.wav', '选择音频文件');
if isequal(filename,0)
   disp('User selected Cancel')
else
   path = fullfile(pathname, filename);
   [handles.x,handles.Fs]=audioread(path);
   x=handles.x;
   Fs=handles.Fs;
   axes(handles.axes1);
   tl=[0:1/Fs:(length(handles.x)-1)/Fs];  % 时间轴
   plot(tl,handles.x);
   title('音频时域信号');
   xlabel('时间/s');
   grid on;
   
   N=length(handles.x);
   df=Fs/N;
   w=[0:df:df*(N-1)] - Fs/2; % 频率轴
   X=fft(handles.x);
   X=fftshift(X);
   axes(handles.axes2);
   plot(w,abs(X)/max(abs(X)));
   axis([-10000,10000,0,1]);
   title('音频频谱');
   xlabel('频率/Hz');
   grid on;
   x2=x;
end

代码功能:

  1. 声明全局变量:

    • x: 用于存储原始音频信号。
    • Fs: 用于存储音频信号的采样率。
    • tl: 用于存储时间轴数据。
    • x2: 用于存储原始音频信号的副本,用于后续处理。
  2. 打开文件选择窗口:

    • 使用 uigetfile 函数打开文件选择窗口,允许用户选择要打开的音频文件。
    • 文件类型限定为 '*.wav'。
  3. 读取音频文件:

    • 如果用户选择了一个文件,则使用 audioread 函数读取该文件,并将数据存储在 handles.x 中,并将采样率存储在 handles.Fs 中。
    • handles.xhandles.Fs 赋值给全局变量 xFs
  4. 绘制音频波形:

    • 使用 axes(handles.axes1) 指定在 GUI 界面上的第一个坐标轴上绘制。
    • 计算时间轴数据 tl
    • 使用 plot(tl, handles.x) 绘制音频波形。
    • 设置标题、横坐标标签和网格线。
  5. 绘制音频频谱:

    • 使用 axes(handles.axes2) 指定在 GUI 界面上的第二个坐标轴上绘制。
    • 计算 FFT 的频率轴 w 和幅度谱 X
    • 使用 plot(w, abs(X)/max(abs(X))) 绘制幅度谱。
    • 设置坐标轴范围、标题、横坐标标签和网格线。
  6. 保存原始音频信号:

    • 将原始音频信号存储在 x2 变量中,以便后续处理使用。

总结:

该函数通过用户点击'打开文件'按钮,实现打开音频文件、读取数据、绘制波形和频谱图的功能。用户可以选择任意 WAV 格式的音频文件,并将其信息显示在 GUI 界面上,方便后续进行音频处理和分析。

MATLAB GUI 音频文件读取与显示函数 open_pushbutton1_Callback

原文地址: https://www.cveoy.top/t/topic/nKeH 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录