📄 midiprocess.m
字号:
%function a=midiprocess(sourcefile)
Fs=44100;
midi = readmidi('piano.mid', 1);
orig_track_num=length(midi.track);
disp('本段音乐共有音轨:');
disp(orig_track_num);
disp('请输入多重回声的次数:(1~3)');
delay_time_num=input('');
for i=1:delay_time_num
disp('请输入回声延迟时间:(0~10000)');
delay_time(i)=input('');
end
for i=1:delay_time_num
disp('请输入混响模式或乐器编号(0~7F)');
modle(i)=input('');
end
newmidi=midi;
newmidi.rawbytes_header(12)=newmidi.rawbytes_header(12)+(orig_track_num-1)*delay_time_num;
new_track_num=newmidi.rawbytes_header(12);
%加载音轨
for i=1:delay_time_num
for j=1:(orig_track_num-1)
newmidi.track(1,(orig_track_num+((i-1)*(orig_track_num-1))+j))=newmidi.track(1,(j+1));
end
end
%音轨延时
for i=1:delay_time_num
for j=1:(orig_track_num-1)
newmidi.track(1,(orig_track_num+((i-1)*(orig_track_num-1))+j)).messages(1,1).deltatime=delay_time(i);
end
end
%改变音轨乐器模式
for i=1:delay_time_num
for j=1:(orig_track_num-1)
for k=1:100
a=newmidi.track(1,(orig_track_num+((i-1)*(orig_track_num-1))+j)).messages(1,k).type;
if(a==192)
newmidi.track(1,(orig_track_num+((i-1)*(orig_track_num-1))+j)).messages(1,k).data=modle(i);
break
end
end
end
end
rawbytes=writemidi(newmidi,'newpiano.mid',0);
%read file
fid = fopen('newpiano.mid');
%[A count] = fread(fid,'char');
[a count] = fread(fid,'uint8');
fclose(fid);
flag=192;
for i=1:(count-1)
x=a(i);y=a(i+1);
if ((x==0)&&(191<y)&&(y<206));
flag=(flag+1);
a(i)=0;
a(i+1)=flag;
end
end
delete 'newpiano.mid' ;
% write to file
fid = fopen('final.mid','w');
%fwrite(fid,rawbytes,'char');
fwrite(fid,a,'uint8');
fclose(fid);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -