function midivert(type,offset,transpose,repunit,noteSequence,pb)
if(nargin<1)
    type=0;
end;
if(nargin<2)
    offset=0;
end;
if(nargin<3)
    transpose=0;
end;
if(nargin<4)
    repunit=12;
end;
if(nargin<5)
    noteSequence=[11,10,9,8,7,6,5,4,3,2,1,0];
end;
if(nargin<6)
    pb=1;
end;
if(size(noteSequence,2)~=12)
    errordlg('noteSequence must contain exactly twelve elements')
    return;
end;
if(type==2)
    thisOctave=0;
    thisNote=0;
    for k=1:128;
        midiMap(k)=noteSequence(thisNote+1)+thisOctave*12;
        thisNote=thisNote+1;
        if(thisNote==12)
            thisNote=0;
            thisOctave=thisOctave+1;
        end;
    end;
    if(offset>0)
        midiMap(offset+1:end)=midiMap(1:((length(midiMap)-offset)));
        midiMap(1:offset)=midiMap(13:offset+12);
    end;
    if(offset<0)
        midiMap(1:((length(midiMap)+offset)))=midiMap(1-offset:end);
        midiMap(length(midiMap)+offset+1:end)=midiMap(length(midiMap)+offset-11:end-12);
    end;
end;
[A,B]=uigetfile({'*.mid','Select MIDI'},'Select MIDI');
midi=readmidi(strcat(B,A));
for i=1:size(midi.track,2)
    for j=1:size(midi.track(i).messages,2)
        if(and((and((~isempty(midi.track(i).messages(j).data)),(midi.track(i).messages(j).chan~=9))),(and((midi.track(i).messages(j).type>127),(midi.track(i).messages(j).type<160)))))
        	if(type==0)
                notenumber=midi.track(i).messages(j).data(1)+offset;
                noteOctave=floor(notenumber/(repunit+0.0001));
                noteRev=(repunit+1)-(notenumber-(noteOctave*repunit));
                noteRev=noteRev+(noteOctave*repunit)+offset+transpose;
            elseif(type==1)
                noteRev=(127-(midi.track(i).messages(j).data(1)+offset))+offset+transpose;
            elseif(type==2)
                noteRev=midiMap(midi.track(i).messages(j).data(1)+1)+offset+transpose;
            end;
            while(noteRev<0)
            	noteRev=noteRev+12;
            end;
            while(noteRev>127)
                noteRev=noteRev-12;
            end;
            midi.track(i).messages(j).data(1)=noteRev;
        end;
    end;
    if(and((and((~isempty(midi.track(i).messages(j).data)),(pb==1))),(and((midi.track(i).messages(j).type>223),(midi.track(i).messages(j).type<240)))))
        midi.track(i).messages(j).data(1)=127-midi.track(i).messages(j).data(1);
        midi.track(i).messages(j).data(2)=127-midi.track(i).messages(j).data(2);
    end;
end;
titlestring=strcat(A,'_ty=',num2str(type),'_');
if(offset~=0)
    titlestring=strcat(titlestring,'off=',num2str(offset),'_');
end;
if(repunit~=12)
    titlestring=strcat(titlestring,'unit=',num2str(repunit),'_');
end;
if(transpose~=0)
    titlestring=strcat(titlestring,'tra=',num2str(transpose),'_');
end;
if(noteSequence~=[11,10,9,8,7,6,5,4,3,2,1,0]);
    titlestring=strcat(titlestring,'ns=');
    for n=1:11;
        titlestring=strcat(titlestring,num2str(noteSequence(n)),'-');
    end;
    titlestring=strcat(titlestring,num2str(noteSequence(12)),'_');
end;
y=1;
while(exist(strcat(titlestring,num2str(y),'.mid'),'file'))
    y=y+1;
end;
writemidi(midi,(strcat(titlestring,num2str(y),'.mid')));