1

matlab言語を使ってコードピアノの検出をしてみました。私はすべての音符を識別することができ、文字列比較を使用して結果を表示したいので、このようなコードを作成します

 function akor=readChord(notes) %notes is input String data type
a1={'A' 'C#/Db' 'E'};
b1={'B' 'D' 'F#/Gb'};
c1={'C' 'E' 'G'};
d1={'D' 'F#/Gb' 'A'};
e1={'E' 'G#/Ab' 'B'};
f1={'F' 'A' 'C'};
g1={'G' 'A#/Bb' 'D'};
%Chord Minor
a2={'A' 'C' 'E'};
b2={'B' 'D' 'F#/Gb'};
c2={'C' 'D#/Eb' 'G'};
d2={'D' 'F' 'A'};
e2={'E' 'G' 'B'};
f2={'F' 'G#/Ab' 'C'};
g2={'G' 'A#/Bb' 'D'};
 a=notes(3,:)
    if v=isempty(setxor(a,a1))==1;
        display('Chord A mayor')
    elseif v = isempty(setxor(a,b1))==1;
        display('Chord B')
    elseif v = isempty(setxor(a,c1))==1;
        display('Chord C mayor')
    elseif v = isempty(setxor(a,d1))==1;
        display('Chord D mayor')
    elseif v = isempty(setxor(a,e1))==1;
        display('Chord E mayor')
    elseif v = isempty(setxor(a,f1)==1;
        display('Chord F mayor')
    elseif v = v = isempty(setxor(a,g1)==1;
        display('Chord G mayor')
    elseif v = isempty(setxor(a,a2))==1;
        display('Chord A minor')
    elseif v = isempty(setxor(a,b2))==1;
        display('Chord B')
    elseif v = isempty(setxor(a,c2))==1;
        display('Chord C minor')
    elseif v = isempty(setxor(a,d2))==1;
        display('Chord D minor')
    elseif v = isempty(setxor(a,e2))==1;
        display('Chord E minor')
    elseif v = isempty(setxor(a,f2)==1;
        display('Chord F minor')
    elseif v = isempty(setxor(a,g2)==1;
        display('Chord G minor')
    else
        display('not Detect')

    end

しかし、エラーがあるように見えます エラー: ファイル: bacagambar.m 行: 18 列: 9 等号の左側の式は、割り当ての有効なターゲットではありません。私が何をすべきか知っている人

4

1 に答える 1

0

この場合、ステートメントを使用するswitch方が適切かもしれません

switch note(3,:)
   case {'A' 'C#/Db' 'E'}
      akor = 'Chord A mayor';
   case {'B' 'D' 'F#/Gb'}
      akor = 'Chord B';
   % put all other patters in similar case
   otherwise
      akor = '';
      error('not detected');
end
fprintf( 1, '%s\n', akor );
于 2013-06-16T06:52:19.717 に答える