matlab读取wav,播放wav,改变速率后绘制波形图
时间: 2023-07-16 15:16:59 浏览: 117
以下是一个示例代码,可以读取 WAV 文件、改变速率并绘制波形图:
```matlab
% 读取 WAV 文件
filename = 'example.wav';
[y, Fs] = audioread(filename);
% 播放 WAV 文件
sound(y, Fs);
% 改变速率
speed_factor = 0.5; % 降低一半速率
y_new = resample(y, round(length(y)*speed_factor), length(y));
% 绘制波形图
t = (0:length(y)-1)/Fs;
t_new = (0:length(y_new)-1)/Fs/speed_factor;
figure;
subplot(2,1,1);
plot(t, y);
title('Original Waveform');
xlabel('Time (s)');
ylabel('Amplitude');
subplot(2,1,2);
plot(t_new, y_new);
title('New Waveform');
xlabel('Time (s)');
ylabel('Amplitude');
```
其中,`audioread` 函数可以读取 WAV 文件中的音频数据和采样率,`sound` 函数可以播放音频,`resample` 函数可以改变速率,`plot` 函数可以绘制波形图。注意,在绘制新波形图时,时间轴需要除以速率因子以保持时间长度一致。
相关问题
signal = wavread('test.wav');使用AUDIOREAD代替WAVREAD 对于读取WAV文件的需求,可以直接采用audioread函数:
### 使用 `audioread` 函数替代 `wavread` 读取 WAV 文件
在较新的 MATLAB 版本中,推荐使用 `audioread` 来代替已弃用的 `wavread` 函数来处理音频文件[^1]。以下是具体实现方式:
#### 基础语法
- **仅返回音频数据**
```matlab
[y] = audioread(filename);
```
- **同时获取采样率**
```matlab
[y, Fs] = audioread(filename);
```
其中,`filename` 是要读取的音频文件路径;`y` 表示音频信号的数据矩阵;对于单声道声音,它是一个列向量,而对于多声道,则每一列为一个声道的数据;`Fs` 则代表该音频文件的采样频率。
#### 完整示例代码
假设有一个名为 `example.wav` 的 WAV 文件位于当前工作目录下,下面这段程序展示了如何利用 `audioread` 加载此文件并显示其基本信息以及绘制波形图:
```matlab
% 指定待读取的WAV文件名
filename = 'example.wav';
% 调用audioread加载音频文件
[audioData, sampleRate] = audioread(filename);
% 显示一些关于所读取音频的信息
disp(['Sample Rate (Hz): ', num2str(sampleRate)]);
disp(['Total Samples: ', num2str(length(audioData))]);
% 绘制原始音频信号的波形图
figure;
plot((0:length(audioData)-1)/sampleRate,audioData,'LineWidth',1.5);
xlabel('Time(s)');
ylabel('Amplitude');
title({'Audio Signal Waveform'; filename});
grid on;
% 如果是立体声或多声道则分别画出各通道图像
if size(audioData,2)>1
track_number=size(audioData,2);
figure('Name','Waveforms of Each Channel','NumberTitle','off');
for i=1:track_number
subplot(track_number,1,i);
plot((0:size(audioData,1)-1)/sampleRate,audioData(:,i));
xlabel('Time(s)');
ylabel('Amplitude');
title(['Channel ',num2str(i)]);
grid on;
end
end
```
上述脚本不仅实现了基本功能——即通过 `audioread` 将选定的 `.wav` 文件的内容存储到变量 `audioData` 中,并记录下了它的采样速率 `sampleRate` ——还进一步提供了可视化手段帮助理解音频特性[^3]。
matlab绘制单通道时序信号图
### 使用Matlab绘制单通道时域信号图形
为了实现这一目标,可以按照如下方法编写代码:
首先读取音频文件并提取其数据以及采样频率。接着计算样本数量,并依据采样率转换成对应的时间向量用于绘图。
```matlab
% 读取音频文件
[x, Fs] = audioread('C:\Users\swh\Desktop\1.wav');
% 获取样本总数N
N = length(x);
% 计算时间轴上的点数
t = (0:N-1)/Fs;
% 创建一个新的图形窗口来展示结果
figure;
plot(t, x);
xlabel('Time(s)');
ylabel('Amplitude');
title('Single Channel Time Domain Signal Plot');
grid on;
```
上述代码实现了从指定路径加载WAV格式的声音文件[^2],并通过`audioread()`函数获得声音数据及其对应的采样速率\(Fs\)。随后创建了一个时间序列数组`t`用来表示每一个采样的时刻位置。最后通过调用`plot()`命令画出了随时间变化的声音振幅曲线图,并设置了坐标标签和图表标题以便更好地理解图像含义。
阅读全文
相关推荐
















