MATLAB GUI 音频文件读取与显示函数 open_pushbutton1_Callback
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
代码功能:
-
声明全局变量:
x: 用于存储原始音频信号。Fs: 用于存储音频信号的采样率。tl: 用于存储时间轴数据。x2: 用于存储原始音频信号的副本,用于后续处理。
-
打开文件选择窗口:
- 使用
uigetfile函数打开文件选择窗口,允许用户选择要打开的音频文件。 - 文件类型限定为 '*.wav'。
- 使用
-
读取音频文件:
- 如果用户选择了一个文件,则使用
audioread函数读取该文件,并将数据存储在handles.x中,并将采样率存储在handles.Fs中。 - 将
handles.x和handles.Fs赋值给全局变量x和Fs。
- 如果用户选择了一个文件,则使用
-
绘制音频波形:
- 使用
axes(handles.axes1)指定在 GUI 界面上的第一个坐标轴上绘制。 - 计算时间轴数据
tl。 - 使用
plot(tl, handles.x)绘制音频波形。 - 设置标题、横坐标标签和网格线。
- 使用
-
绘制音频频谱:
- 使用
axes(handles.axes2)指定在 GUI 界面上的第二个坐标轴上绘制。 - 计算 FFT 的频率轴
w和幅度谱X。 - 使用
plot(w, abs(X)/max(abs(X)))绘制幅度谱。 - 设置坐标轴范围、标题、横坐标标签和网格线。
- 使用
-
保存原始音频信号:
- 将原始音频信号存储在
x2变量中,以便后续处理使用。
- 将原始音频信号存储在
总结:
该函数通过用户点击'打开文件'按钮,实现打开音频文件、读取数据、绘制波形和频谱图的功能。用户可以选择任意 WAV 格式的音频文件,并将其信息显示在 GUI 界面上,方便后续进行音频处理和分析。
原文地址: https://www.cveoy.top/t/topic/nKeH 著作权归作者所有。请勿转载和采集!