怎样用matlab分割音频文件(wav)或其他
答案:4 悬赏:0
解决时间 2021-03-12 09:08
- 提问者网友:白柏唇蜜
- 2021-03-12 03:44
不要讲其他软件,就matlab
最佳答案
- 二级知识专家网友:如果这是命
- 2021-03-12 04:59
用matlab根据lrc文件切割音频,适用于wav音频(一句歌词一个音频一个lrc)代码如下:
%clear
clc;clear all;
%用Import Data导入lrc文件,设置‘[’,']',':'为分隔符,出现三个矩阵,分别改名为minuate、second、lyric
[y,fs]=audioread('John Lennon - Oh My Love.wav');%根据歌曲名修改
for i=6:36 %根据歌词导出矩阵小修
min_start=minuate((i-1),1);
min_end=minuate(i,1);
sec_start=second((i-1),1);
sec_end=second(i,1);
time_start=min_start*60+sec_start;
time_end=min_end*60+sec_end;
Y2=y(((fs*time_start+1):fs*time_end),:); %根据lrc的时间剪切音频
Filename=sprintf('song%d.wav',i);%为音频命名
audiowrite(Filename,Y2,fs);%写出音频
lrc_name=sprintf('song%d.lrc',i);%对应音频,为lrc命名
fic=fopen(lrc_name,'a+');%对应音频,创建lrc
fprintf(fic,'[00:00.00]')
fprintf(fic,'%s',lyric{i-1,1})%写入带时间轴歌词
fclose(fic)%关闭lrc
end
%clear
clc;clear all;
%用Import Data导入lrc文件,设置‘[’,']',':'为分隔符,出现三个矩阵,分别改名为minuate、second、lyric
[y,fs]=audioread('John Lennon - Oh My Love.wav');%根据歌曲名修改
for i=6:36 %根据歌词导出矩阵小修
min_start=minuate((i-1),1);
min_end=minuate(i,1);
sec_start=second((i-1),1);
sec_end=second(i,1);
time_start=min_start*60+sec_start;
time_end=min_end*60+sec_end;
Y2=y(((fs*time_start+1):fs*time_end),:); %根据lrc的时间剪切音频
Filename=sprintf('song%d.wav',i);%为音频命名
audiowrite(Filename,Y2,fs);%写出音频
lrc_name=sprintf('song%d.lrc',i);%对应音频,为lrc命名
fic=fopen(lrc_name,'a+');%对应音频,创建lrc
fprintf(fic,'[00:00.00]')
fprintf(fic,'%s',lyric{i-1,1})%写入带时间轴歌词
fclose(fic)%关闭lrc
end
全部回答
- 1楼网友:一起来看看吧
- 2021-03-12 07:34
wav为微软公司(microsoft)开发的一种声音文件格式。
wave是录音时用的标准的windows文件格式,文件的扩展名为“wav”,数据本身的格式为pcm或压缩型,属于无损音乐格式的一种。
它符合riff(resource interchange file format)文件规范,用于保存windows平台的音频信息资源,被windows平台及其应用程序所广泛支持,该格式也支持msadpcm,ccitt a law等多种压缩运算法,支持多种音频数字,取样频率和声道,标准格式化的wav文件和cd格式一样,也是44.1k的取样频率,16位量化数字,因此在声音文件质量和cd相差无几, wav打开工具是windows的媒体播放器。
- 2楼网友:何以畏孤独
- 2021-03-12 06:45
wavread函数可读入一个wav文件,如果为单声道就返回一个一维矩阵,表示每个采样点的量化值。如下:
[Y,FS,NBITS]=wavread(FILE)
Y为数据矩阵,FS为采样率,NBITS为量化位数,FILE为音频文件名。
如果你要截取[t1,t2]时间内的音频,
则
start=floor(t1*FS)+1;
end=floor(t2*FS);
R=Y[start:end];%R为截取后的数据
最后用函数wavwrite保存成新的wav文件,如
wavwrite(R,FS,NBITS,'new.wave') ;
- 3楼网友:摧毁过往
- 2021-03-12 06:09
[Y,F,b]=wavread('test.wav');
Y2=Y(((F*10+1):F*20),:);
wavwrite(Y2,F,b,'test_new.wav') ;
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯