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

在这种情况下使用switchstaement 可能更合适

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 回答