⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 midiprocess.m

📁 数字音乐MATLAB处理
💻 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 + -