⑴ 請教:用MATLAB怎樣打開音頻文件
wavread
(
f
s
t
r
)
在文件f
s
t
r中返回採樣數據。help
wavread可獲得更多信息。
wavwrite
(sv,f,fstr)
以采樣頻率f將采樣聲音向量sv寫入文件fstr中。
⑵ 用matlab實現對音頻文件的播放代碼
[y,fs,bits]=wavread('音頻文件名',[N1 N2]);用於讀來取語音,采樣自值放在向量y中,fs表示采樣頻率(Hz),bits表示采樣位數。[N1 N2]表示讀取從N1點到N2點的值(若只有一個N的點則表示讀取前N點的采樣值)。
sound(x,fs,bits); 用於對聲音的回放。向量y則就代表了一個信號(也即一個復雜的「函數表達式」)也就是說可以像處理一個信號表達式一樣處理這個聲音信號。
⑶ matlab讀取mp3音頻
matlab讀取MP3音頻數據,可以用audioread()函數, 用法很簡單.
[Y, FS]=audioread(FILENAME)
filename為指定載入的音頻文件名稱(單引號引出回的字元串答)
返回數據Y為所讀取的音頻數據,FS為采樣頻率
這個函數可以讀取多種格式的音頻文件,比如wav, mp3, flac, ogg等
例:
[y,Fs]=audioread('1.mp3');
%播放讀入的數據
p=audioplayer(y,Fs);
play(p);
⑷ MATLAB音頻文件讀取
1、用audioread('');函數讀取電腦中的音頻文件,參數是音頻文件的路徑:
[sampledata,FS] = audioread('F:1.mp3');
sampledata保存音頻信號數據,FS是音頻采樣率,MP3格式的采樣率一般為44100;
2、判斷音頻數據是否是雙聲道,如果是雙聲道則保留一個聲道的數據,用calsample.m文件的函數完成此功能,文件內容如下:
function sample = calsample(sampledata,FS)
temp_sample = resample(sampledata,1,FS/11025);
[m,n] = size(temp_sample);
if (n == 2)
sample = temp_sample(:,1);
else
sample = temp_sample;
end
end
3、對音頻數據進行快速傅里葉變換得到頻譜圖,並選取scope區域內的能量最大並且能量增幅最大的點作為峰值點,進行特徵提取,keypoint.m文件內容如下:
function point = keypoint(sample,scope)
%對音頻數據進行快速傅里葉變換,得到變換後的數據為b,頻率為f,時間為t
[b,f,t] = specgram(sample,1024,11025,hanning(1024),256);
specgram(sample,1024,11025,hanning(1024),256);%繪制頻譜圖
hold on;
energy = abs(b);%根據快速傅里葉變換後的數據進行能量計算
%energy = sample;
diffenergy = caldiffenergy(energy);%計算能量差分
[m,n] = size(energy);%獲取能量矩陣的大小
%f = (0:4);
%t = (0:4);
f_unit = max(f)/(length(f)-1);%根據頻率點個數計算頻率單位長度
t_unit = max(t)/(length(t)-1);%根據時間點個數計算時間單位長度
k = 1;
l = 1;
p = 1;
num = 1;
point.t = 0;
point.f = 0;%point結構體數組用來保存峰值點
temp.t = 0;
temp.f = 0;%temp結構體數組用來保存計算中的臨時點
count = 0;%count為零表示在當前scope中未找到峰值點
x_f=0;
y_t=0;
plot(x_f,y_t);
hold on;
for i = 1:m-scope+1
for j = 1:n-scope+1
%找出大小為scope的子矩陣中的最大元素的位置並保存
[x_f,y_t] = find(energy(i:i+scope-1,j:j+scope-1)==max(max(energy(i:i+scope-1,j:j+scope-1))));
x_f = x_f + i - 1;
y_t = y_t + j - 1;
%找出大小為scope的子矩陣中的差分最大元素的位置並保存
[diffx,diffy] = find(diffenergy(i:i+scope-1,j:j+scope-1)==max(max(diffenergy(i:i+scope-1,j:j+scope-1))));
diffx = diffx + i - 1;
diffy = diffy + j - 1;
count = 0;
%如果最大元素和差分最大元素都為同一個位置則該點為峰值點,保存在temp中
for k = 1:length(x_f)
for l = 1:length(diffx)
if (x_f(k) == diffx(l)) && (y_t(k) == diffy(l))
temp(num).f = x_f(k) * f_unit;
temp(num).t = y_t(k) * t_unit;
%plot(temp(num).t,temp(num).f,'.');
num = num + 1;
count = 1;%在scope中找到一個峰值點則不再記錄其它相同的點
break;
end
end
if count == 1%scope中多個峰值點只保留第一個
break;
end
end
end
end
%將temp中保存的峰值點畫在圖上,多個scope中找到的相同峰值點只畫一次
len = 1;
point(1).f = temp(1).f;
point(1).t = temp(1).t;
plot(point(1).t,point(1).f,'.');
for i = 2:num - 1
for j = 1:len
if (temp(i).f == point(j).f) && (temp(i).t == point(j).t)
break;
end
end
if j == len && (temp(i).f ~= point(j).f) && (temp(i).t ~= point(j).t)
len = len + 1;
point(len).f = temp(i).f;
point(len).t = temp(i).t;
plot(point(len).t,point(len).f,'.');
end
end
hold off
end
4、keypoint(sample,scope);函數中用到的caldiffenergy(energy);函數內容在caldiffenergy.m文件中,內容如下:
function diffenergy = caldiffenergy(energy)
v = diff(energy');
[x,y] = size(v);
for i = 1:y
zero(i) = 0;
end
diffenergy = abs(([zero;v])');
end
⑸ 為什麼音頻文件要轉成txt格式再在Matlab里打開
音頻文件可用wavread打開,不須轉為txt文件。但是,若是音頻文件已保存為txt文件了,就不能用wavread打開了,只能用你程序中的方法打開。
⑹ matlab 讀取wav
把音頻文件,假設叫1.wav放入current direcoty裡面,不知道啥叫current dirctory,當前文件夾嘛
然後輸入命令版wavread(1.wav)即可。權
但是如果你不放也可以wavread(你的文件路徑) 比如D盤根目錄下 就是 D:\1.wav 其他你就依葫蘆畫瓢吧