这是用matlab读取wav文件做音乐的程序,求大神解释一下wav=[]这一段函数的意思🙏&#1

26941人阅读
数学软件(34)
最近工作需要,要对文件中存储的声音信息进行分析处理。所以花了些时间收集了各种数学软件中处理文件的方法。
Matlab&是最方便的。甚至于不用写任何代码就能读取&文件(我用的是)。在当前路径窗口中双击文件就自动将文件内容读入了。
图&1&当前路径窗口
双击后会自动弹出数据导入向导。data&中是波形文件(每一列对应一个声道),存的是采样率。这两个变量名都可以按照自己的需要来修改。
图&2&数据导入向导
相应的函数是&wavread()。&有下面的几种调用格式。
y = wavread('filename')
这是最简单的形式,将wav&文件中的波形数据读入&中,波形的幅度范围在。
[y,Fs,bits] = wavread('filename')Fs&存的是采样率,单位,是数据的位数。
[...] = wavread('filename',N)只读取前&N&个数据点。
[...] = wavread('filename',[N1 N2])只读取N1&到&之间的数据。
siz = wavread('filename','size')读取wav文件有多少数据点,siz&为一个行两列的向量。siz&=&[samples&channels]
wavfinfo()&用来获取文件的信息。
[m d] = wavfinfo(filename)当&filename&是文件时&返回字符串'Sound&(WAV)&file',否则返回空字符串。
d&返回包含新的字符串,比如像这里给出的结果:’Sound&(WAV)&file&containing:&41532&samples&in&1&channel(s)’,如果不是文件,则返回字符串'Not&a&WAVE&file'。
wavwrite&函数可以生成一个&文件,有三种基本的调用格式。
wavwrite(y,'filename')将&y&中的数据写入文件,其中的每一列对应一个声道。要求&中的数据在&。超出这个范围的都被截断。采样率默认为&。位格式。
wavwrite(y,Fs,'filename')Fs&用来设定采样率。
wavwrite(y,Fs,N,'filename')N&指定数据的位数,可以为&、、和。当&!时,文件按照码来存储。当时,数据按照浮点数格式存储。这时也就不要求数据范围在到之间了。
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:1395751次
积分:16738
积分:16738
排名:第436名
原创:342篇
转载:16篇
译文:15篇
评论:571条
文章:20篇
阅读:22714
文章:32篇
阅读:49721
文章:11篇
阅读:49935
文章:23篇
阅读:97367
文章:31篇
阅读:115679
(4)(2)(7)(7)(9)(15)(9)(22)(21)(5)(7)(4)(6)(3)(5)(4)(5)(6)(4)(2)(1)(9)(4)(4)(7)(6)(2)(3)(4)(9)(8)(2)(3)(8)(2)(6)(2)(3)(3)(4)(8)(4)(4)(14)(1)(10)(6)(2)(6)(13)(17)(11)(19)(24)查看: 14571|回复: 8|关注: 0
怎么利用MATLAB录音?
<h1 style="color:# 麦片财富积分
新手, 积分 39, 距离下一级还需 11 积分
关注者: 5
本帖最后由 江泽林 于
21:18 编辑
怎么利用MATLAB录音?
本书第11章第11.7.1节给出了一段利用声卡采集声音数据的实例代码。如下所示。
% 程序 11-5 AudioAcquisitionInFixedDuration.m
duration = 10;&&% 数据采集时间长度
ai = analoginput('winsound');
addchannel(ai, 1);
sampleRate = get(ai, 'SampleRate');
requiredSamples = floor(sampleRate * duration); % 数据采集点数
set(ai, 'SamplesPerTrigger', requiredSamples);
waitTime = duration * 1.1 + 0.5;
start(ai)& && && && && && && &% 启动
tic
wait(ai, waitTime);
toc
[data, time] = getdata(ai); % 获取数据
& && && && && && && && &%%%% 绘图
plot(time,data);& && && && & % 绘图
xlabel('时间(s)');& && && && &% 设置x轴
ylabel('信号(V)');& && && && &% 设置y轴
title('声卡采集得到的数据');& &% 设置标题
& && && && && && && &&&% 显示网格
wavplay(data,sampleRate);& &%%%% 播放采集到的信号
delete(ai);
复制代码上面一段代码可以理解为一种“通用”的设备信号采集方法,使用的是analoginput函数,其参数winsound决定了设备类型是声卡。但是针对声卡采集声音信号,matlab还提供了一种“专用”的方法,这就是audiorecorder函数。
audiorecorder函数的“前身”是wavrecord函数,在2012b版本中,wavrecord函数被audiorecorder函数更新替代。wavrecord函数仅能用于32位windows平台,而audiorecorder函数则适用于多种平台。
audiorecorder函数用于创建录音对象,其用法如下。
recorder = audiorecorder
recorder = audiorecorder(Fs,nBits,nChannels)
recorder = audiorecorder(Fs,nBits,nChannels,ID)复制代码没有输入参数时,表示创建采样率为8000Hz,8bit,单通道的对象,有输入参数时,则由Fs指定采样率,单位为Hz,由nBits指定采样点的比特数,由nChannels指定通道数,由ID指定设备的ID。其中nChannels为1时表示单通道录音,即mono;为2时表示双通道录音,会产生立体音效果,即stereo。
下面是一个使用audiorecorder的实例,代码来源于MATLAB帮助文档。
% 运行平台:Windows 7 64bit,MATLAB R2013a
% 录音录5秒钟
recObj =
disp('Start speaking.')
recordblocking(recObj, 5);
disp('End of Recording.');
% 回放录音数据
play(recObj);
% 获取录音数据
myRecording = getaudiodata(recObj);
% 绘制录音数据波形
plot(myRecording);复制代码从上面的代码可以看出,audiorecorder函数返回的对象,对它的操作是通过一些方法来实现的,如例子中的recordblocking方法、play方法等,这些方法的第一个输入参数必须为audiorecorder对象,一些方法还需要有其他输入参数。录音对象的方法如下所示。
get& && && && &获取audiorecorder对象的属性列表。getaudiodata& & 提取录音数据。getplayer& && & 创建一个对应的audioplayer播音对象。isrecording& &&&返回是否正在录音。pause& && && & 暂停录音。play& && && &&&播放录音数据。该方法返回一个audioplayer对象。record& && && & 开始录音。recordblocking& &录音,需要第二个参数,指定录音的时间长度,单位为秒。resume& && && &从暂停处重新开始录音。set& && && && &设置audiorecorder对象的属性。stop& && && &&&停止录音。
欢迎关注《实战MATLAB之文件与数据接口技术》
论坛地址 /forum-229-1.html
<h1 style="color:# 麦片财富积分
这个讲解很清楚啊
<h1 style="color:# 麦片财富积分
<h1 style="color:# 麦片财富积分
声音怎么保存啊?
<h1 style="color:# 麦片财富积分
请问比如getaudiodata这些函数是哪个工具箱的啊& &能不能给一个 感谢~!
<h1 style="color:# 麦片财富积分
程序中的recObj能利用handles传给另外一个函数 做参数吗?
<h1 style="color:# 麦片财富积分
请问如果是要录制多次的话,比如5次,怎么把数据存在同一个参数里??
<h1 style="color:# 麦片财富积分
gui 回掉函数的话,怎么写呢?
<h1 style="color:# 麦片财富积分
站长推荐 /2
Powered byMatlab处理wav文件总结
利用专门的音频处理软件,比如、等,可以方便的录制声音、分析频谱。这种方式也无需复杂的操作或者专业知识,就可以实时的观察结果。利用这些软件在平时实验数据的测量和分析中,足够用了;但是这些软件处理的数据精细程度往往不够,无法应用于论文中。这种情况下,就需要把录制的音频文件导入到中做后续处理。
下面对这个处理过程做简要的总结。基本思路是用采集一组声音,然后用批处理,显示采集信号的频谱曲线。下面即是处理的详细步骤和关键代码。
、用录制声音,可以选择采样率为,单声道。录制声音长度约为,然后存储文件为文件格式。文件名最好包括进入测试条件。测试多组数据,将其保存在同一个文件夹中,便于后期的批处理。
、使用读取一个文件夹里的所有文件。在下面的操作中,把目录下的所有文件名读取到中了。
dirs=dir('sqrt0/*.wav');&&%&读取当前目录下所有的excel文件
dircell=struct2cell(dirs)'
;&%&结构体(struct)转换成元胞类型(cell),转置一下是让文件名按列排列。
fnames=dircell(:,1);&&&&&&&&&%&第一A列是文件名
、通过函数读取文件数据,并将其存储在和中。
fnumber=size(fnames,1);&&&&&&&&&&&&&&&&&&&&%&求取表格行数,即文件个数
for&N=1:1:fnumber
&&&&filename=char(fnames(N,1));&&&&&&&&&&&&&%&将cell转换为string
&&&&filename=strcat(path,filename);&&&&&&&%&校正文件路径
&&&&[Y,Fs]=wavread(filename,Num);&&&&&&&&&&&%&读取当前文件前65536个点
&&&&Ydata(N,:)
= Y;&&&&&&&&&&&&&&&&&&&&&&&&&%&记录数据
&&&&Fdata(N,:)
= Fs;&&&&&&&&&&&&&&&&&&&&&&&&%&记录采样率
、对数据做运算,并绘制其频谱图。
for&N=1:1:fnumber
= fft(Ydata(N,:),Num);&&&&&&&&&%&对数据做Num点FFT运算
&&&&Yfft(N,:)
= 20*log10(abs(yy));&&&&%&对计算结果取模
= linspace(0,Fdata(N),Num);&&&&%&在0-采样率之间取Num个频率点
&&&&plot(ff,Yfft(N,:),'r');&&&&&&&&&&&%&绘制频谱
&&&&grid&on;
&&&&axis([400
、调整修饰绘图,并存储。下面是用到的一些命令。
&&&&set(gcf,'Position',[200
200 350 250]);&&&&&&%&设置绘图的大小
= strcat(Freq(N,:),',',Sqrt(N,:),',',Modindex(N,:));
title(tt);&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%&设置绘图标题
&&&&legend('m=1.0');
&&&&xlabel('Frequency(Hz)','FontSize',14,'FontName','Times New
Roman');%&设置x坐标轴标注字体
&&&&ylabel('Amplitude(dB)','FontSize',14,'FontName','Times New Roman');
= strcat('m=',Modindex(N,:));
&&&&text(1800,55,Note,'FontSize',14);&&&&&&&%&在400,300位置添加标注
&&&&set(gca,'FontSize',12);&&&&&&&&&&&&&&&&&%&设置坐标轴字体
&&&&set(gcf,'visible','off');&&&&&&&&&&&&&&&%&不显示图片
strcat(Freq(N,:),'_',Sqrt(N,:),'_',Modindex(N,:),'.emf');
&&&&saveas(gcf,tt,'emf');&&&&&&&&&&&&&&&&&&&%&存储绘图为eps格式
、将生成的图片,导入到中。因为不能识别图片,所以生成图片。两种格式都是矢量图,放大缩小不会失真。可以调出工具栏的图片工具,第一个工具即为插入快捷键。这样会更方便快捷。
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。求大神帮我解释一下这个程序_matlab吧_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:144,393贴子:
求大神帮我解释一下这个程序收藏
[xx,fs]=wavread('I:\aa\0a.wav'); % 读语音信号[team,row]=size(xx);if row==2x=(xx(:,1)+xx(:,2))/2; % 将多通道求平均值 yy=x;elsex=yy=x;endx=x-mean(x)+0.1*rand(length(x),1); % 去直流分量并加噪N=length(x);n=220; % 每一帧长n1=160; %每两帧重合的长度frame=floor((N-n)/(n-n1)); %帧数for i=1:framey1=x((i-1)*(n-n1)+1:(i-1)*(n-n1)+n).*hamming(n); % 每一帧对应的语音信号 fy=fft(y1,n); %求fftnen(i,:)=abs(fy).^2; %求能量ang(i,:)=angle(fy); % 求角度endyuzhi=sum(sum(nen(2:5,:)))/(4*n); % 求阈值,信号开始阶段的能量平均值 for i=1:framenen(i,:)=nen(i,:)- % 减谱nen(i,find(nen(i,:)&0))=0; % 将小于0的部分赋值为0endfor i=1:framenen(i,:)=sqrt(nen(i,:));jie=nen(i,:).*exp(j*ang(i,:)); %求频域函数out(i,:)=real(ifft(jie))./hamming(n)'; %求逆fftendzong=out(1,:)'; % 对out求导,以便于原信号比较jiewei=n;for i=2:frame %将一系列的帧组合还原zong(jiewei-n1+1:jiewei)=(zong(jiewei-n1+1:jiewei)+out(i,1:n1)')/2;jiewei=jiewei+n-n1;zong=[out(i,n1+1:end)'];endfigure(1);subplot(211);plot(x); %画加噪的原始语音信号axis([1,(n-n1)*frame+n,min(x),max(x)]);subplot(212);specgram(x,fs,1024,n,n1); % 对应的鱼谱图 figure(2);subplot(211);plot(zong); %画增强的语音信号 axis([1,(n-n1)*frame+n,min(zong),max(zong)]); subplot(212);specgram(zong,fs,1024,n,n1);wavplay(x,fs);wavplay(zong,fs); % 输出音频
3D双端东方魔幻网游「大青云」勾魂公测,穿越逆转,封神故事,全新演绎!
登录百度帐号推荐应用
为兴趣而生,贴吧更懂你。或温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!&&|&&
LOFTER精选
网易考拉推荐
用微信&&“扫一扫”
将文章分享到朋友圈。
用易信&&“扫一扫”
将文章分享到朋友圈。
阅读(13145)|
用微信&&“扫一扫”
将文章分享到朋友圈。
用易信&&“扫一扫”
将文章分享到朋友圈。
历史上的今天
loftPermalink:'',
id:'fks_',
blogTitle:'信号处理学习之语音信号处理MATLAB实现',
blogAbstract:'前段时间花两天时间做的,学习信号处理的一个简单的小项目,主要遇到的问题是在设计FIR滤波器的时候选择了矩形窗,后来指标达不到,看下课本才知道问题(上课经常走神惭愧!),根据阻带衰减分贝值选择了凯泽窗。有时间要要研究下MP3编解码实现,这个难度大点,涉及的知识点也更全点。要考试了,昨晚赶了下论文,贴出主要部分。
{list a as x}
{if x.moveFrom=='wap'}
{elseif x.moveFrom=='iphone'}
{elseif x.moveFrom=='android'}
{elseif x.moveFrom=='mobile'}
${a.selfIntro|escape}{if great260}${suplement}{/if}
{list a as x}
推荐过这篇日志的人:
{list a as x}
{if !!b&&b.length>0}
他们还推荐了:
{list b as y}
转载记录:
{list d as x}
{list a as x}
{list a as x}
{list a as x}
{list a as x}
{if x_index>4}{break}{/if}
${fn2(x.publishTime,'yyyy-MM-dd HH:mm:ss')}
{list a as x}
{if !!(blogDetail.preBlogPermalink)}
{if !!(blogDetail.nextBlogPermalink)}
{list a as x}
{if defined('newslist')&&newslist.length>0}
{list newslist as x}
{if x_index>7}{break}{/if}
{list a as x}
{var first_option =}
{list x.voteDetailList as voteToOption}
{if voteToOption==1}
{if first_option==false},{/if}&&“${b[voteToOption_index]}”&&
{if (x.role!="-1") },“我是${c[x.role]}”&&{/if}
&&&&&&&&${fn1(x.voteTime)}
{if x.userName==''}{/if}
网易公司版权所有&&
{list x.l as y}
{if defined('wl')}
{list wl as x}{/list}

我要回帖

更多关于 poweramp wav 的文章

 

随机推荐