matlab读取mp3音频

作者&投稿:玉翔 (若有异议请与网页底部的电邮联系)
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


(wav格式)

(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);


已经发送,注意查收,不要加错人了,
我邮箱:zhh-1987@163.com


井陉矿区19591981000: matlab下使用audioread读取mp3文件问题 -
冶荔凯莱: 不是的,读出来的是double型的,读出来之后要另外进行量化

井陉矿区19591981000: matlab里面一个音频文件读进去为什么是两列向量 -
冶荔凯莱: 1、用audioread('');函数读取电脑中的音频文件,参数是音频文件的路径: [sampledata,FS] = audioread('F:1.mp3'); sampledata保存音频信号数据,FS是音频采样率,MP3格式的采样率一般为44100; 2、判断音频数据是否是双声道,如...

井陉矿区19591981000: 怎么样用matlab gui 读取声音... -
冶荔凯莱: 这个可以参考waveread函数,或者使用mp3载入控件,参考: <a href="http://wenwen.soso.com/z/urlalertpage.e?sp=shttp%3a%2f%2fwww.matlabsky.com%2fthread-11736-1-1.html" target="_blank">http://www.matlabsky.com/thread-11736-1-1.html</a>

井陉矿区19591981000: 在matlab中读取mp3文件好慢啊
冶荔凯莱: 你可以转成wav文件,再做处理啊. mp3read函数的本质实际上也是先进行mp3解码.

井陉矿区19591981000: 你好,请问用JAVA或者matlab如何编写程序读取U盘中的MP3格式的歌曲文件? -
冶荔凯莱: 读取出来是要播放么?还是要复制?复制文件对于java语言来说,太容易了 要是播放,mp3的格式,java不能直接支持,要安装jmf的.

井陉矿区19591981000: 如何在matlab中播放一段音乐 -
冶荔凯莱: 可以用matlab函数sound实现.该函数的输入参量是音频数据向量、采样频率和转换位数.可以自己写些声音数据.下面的声音声调和频率有关,长度和数据长度有关:例如:sound(sin(2*pi*25*(1:4000)/100)); 响两声就是:sound(sin(2*pi*25*(...

井陉矿区19591981000: matlab 2016a 中用什么函数读取声音文件 -
冶荔凯莱: 2016a中删除了wavread而改用audioread了 具体使用可以help一下

井陉矿区19591981000: 用matlab实现对音频文件的播放代码????
冶荔凯莱: [y,fs,bits]=wavread('音频文件名',[N1 N2]);用于读取语音,采样值放在向量y中,fs表示采样频率(Hz),bits表示采样位数.[N1 N2]表示读取从N1点到N2点的值(若只有一个N的点则表示读取前N点的采样值). sound(x,fs,bits); 用于对声音的回放.向量y则就代表了一个信号(也即一个复杂的“函数表达式”)也就是说可以像处理一个信号表达式一样处理这个声音信号.

井陉矿区19591981000: 如何用matlab做一个相关mp3音频隐藏的毕业设计?
冶荔凯莱: 可以去下载一个MP3READ 和mp3write文件 嵌入到MATLAB中就可以用了! 具体用法就和 wavread 差不多了!

井陉矿区19591981000: 怎么使用MATLAB导入语音,如果是用MP3录音过的WAV文件又怎么导入? -
冶荔凯莱: 这个问题问的好! 1)用mp3录音,生成文件cricket.wav,把该文件放到matlab文件夹里面(就是你打开matlab后中间顶部的地址). 2)使用如下程序,做波形显示以及fft变换. [y,Fs,bits]=wavread('cricket.wav');%读出信号,采样率和采样位...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网