function GitGriGen (Grundton, Geschlecht, Zusatzton) %GITGRIGEN Gitarrengriffgenerator % ------------------------------------------------------------------------------ % SYNTAX %GitGriGen (Grundton, Geschlecht, Zusatzton); % ------------------------------------------------------------------------------ % DESCRIPTION % Gitarrengriffgenerator: Das Gitarrengriffbrett mit Noten des % gewünschten Akkords wird am Bildschirm ausgegeben. % ------------------------------------------------------------------------------ % INPUT % Grundton: 1 = A, 2 = Bb, 3 = H, 4 = C, 5 = C#/Db, 6 = D, % 7 = D#/Eb, 8 = E, 9 = F, 10 = F#/Gb, 11 = G, 12 = G#/Ab % Geschlecht: 1 = Dur, 2 = Moll, 3 = sus2, 4 = sus4, 5 = Powerakkord, 6 = dim % Zusatzton: 1 = keiner, 2 = große None, 3 = Quarte, 4 = verminderte Quinte, % 5 = übermäßige Quinte, 6 = große Sexte, 7 = kleine Septime, % 8 = große Septime, 9 = übermäßige Quinte und große None, % 10 = große Sexte und große None, % 11 = kleine Septime und Quarte, % 12 = kleine Septime und große None, % 13 = große Sexte und große Septime, % 14 = kleine Septime und übermäßige None % ------------------------------------------------------------------------------ % OUTPUT % Bildschirmausgabe des Gitarrengriffbretts mit Noten des gewünschten Akkords % ------------------------------------------------------------------------------ % ------------------------------------------------------------------------------ % CHANGE TABLE % Date Name Modification % - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - % 14.08.2010 JMH Initiale Version % 21.10.2012 JMH Weitere Akkorde ergänzt: (-) und (7/9+) % 22.10.2012 JMH Gitarrengriffbrett verlängert % 10.11.2012 JMH Weitere Akkorde ergänzt: (5, Powerakkord) und (6/9) % 17.07.2013 JMH "str2mat" durch "char" ersetzt % 24.12.2013 JMH Weiteren Akkord ergänzt: (6/7+) % 24.04.2015 JMH Weiteren Akkord ergänzt: (+/9) % 20.01.2016 JMH "B" durch "Bb" ersetzt % 23.11.2020 JMH Umlaute in Menüs ersetzt % 06.02.2024 JMH Umlaute in Legende und Fehlermeldungen ersetzt % ------------------------------------------------------------------------------ if nargin < 1 Grundton = fix (menu ('Grundton auswaehlen:', ... 'A', ... 'Bb', ... 'H', ... 'C', ... 'C#/Db', ... 'D', ... 'D#/Eb', ... 'E', ... 'F', ... 'F#/Gb', ... 'G', ... 'G#/Ab')); end if Grundton == 1 Akkordname = 'A'; elseif Grundton == 2 Akkordname = 'Bb'; elseif Grundton == 3 Akkordname = 'H'; elseif Grundton == 4 Akkordname = 'C'; elseif Grundton == 5 Akkordname = 'C#/Db'; elseif Grundton == 6 Akkordname = 'D'; elseif Grundton == 7 Akkordname = 'D#/Eb'; elseif Grundton == 8 Akkordname = 'E'; elseif Grundton == 9 Akkordname = 'F'; elseif Grundton == 10 Akkordname = 'F#/Gb'; elseif Grundton == 11 Akkordname = 'G'; elseif Grundton == 12 Akkordname = 'G#/Ab'; else error ('Ungueltiger Grundton!'); end Akkordtoene = Grundton; Legende = 'Grundton'; if nargin < 2 Geschlecht = fix (menu ('Akkordgeschlecht auswaehlen:', ... 'Dur', ... 'Moll', ... 'sus2', ... 'sus4', ... '5 (Powerakkord)', ... 'dim')); end if Geschlecht == 1 Akkordname = sprintf ('%s-Dur', Akkordname); Akkordtoene = [Akkordtoene, (Grundton + 4), (Grundton + 7)]; Legende = char (Legende, 'grosse Terz', 'Quinte'); elseif Geschlecht == 2 Akkordname = sprintf ('%s-Moll', Akkordname); Akkordtoene = [Akkordtoene, (Grundton + 3), (Grundton + 7)]; Legende = char (Legende, 'kleine Terz', 'Quinte'); elseif Geschlecht == 3 Akkordname = sprintf ('%ssus2', Akkordname); Akkordtoene = [Akkordtoene, (Grundton + 2), (Grundton + 7)]; Legende = char (Legende, 'grosse Sekunde', 'Quinte'); elseif Geschlecht == 4 Akkordname = sprintf ('%ssus4', Akkordname); Akkordtoene = [Akkordtoene, (Grundton + 5), (Grundton + 7)]; Legende = char (Legende, 'Quarte', 'Quinte'); elseif Geschlecht == 5 Akkordname = sprintf ('%s5', Akkordname); Akkordtoene = [Akkordtoene, (Grundton + 7)]; Legende = char (Legende, 'Quinte'); elseif Geschlecht == 6 Akkordname = sprintf ('%sdim', Akkordname); Akkordtoene = [Akkordtoene, (Grundton + 3), (Grundton + 6), (Grundton + 9)]; Legende = ... char (Legende, 'kleine Terz', 'verminderte Quinte', 'grosse Sexte'); else error ('Ungueltiges Akkordgeschlecht!'); end if Geschlecht < 3 if nargin < 3 if Geschlecht == 1 Zusatzton = fix (menu ('Zusatzton auswaehlen:', ... 'kein Zusatzton', ... '9 (grosse None)', ... '4 (Quarte)', ... '- (verminderte Quinte)', ... '+ (uebermaessige Quinte)', ... '6 (grosse Sexte)', ... '7 (kleine Septime)', ... '7+ (grosse Septime)', ... '+/9 (uebermaessige Quinte und grosse None)', ... '6/9 (grosse Sexte und grosse None)', ... '7/4 (kleine Septime und Quarte)', ... '7/9 (kleine Septime und grosse None)', ... '6/7+ (grosse Sexte und grosse Septime)', ... '7/9+ (kleine Septime und uebermaessige None)')); else Zusatzton = fix (menu ('Zusatzton auswaehlen:', ... 'kein Zusatzton', ... '9 (grosse None)', ... '4 (Quarte)', ... '- (verminderte Quinte)', ... '+ (uebermaessige Quinte)', ... '6 (grosse Sexte)', ... '7 (kleine Septime)', ... '7+ (grosse Septime)', ... '+/9 (uebermaessige Quinte und grosse None)', ... '6/9 (grosse Sexte und grosse None)', ... '7/4 (kleine Septime und Quarte)', ... '7/9 (kleine Septime und grosse None)')); end end if Zusatzton == 2 Akkordname = sprintf ('%s9', Akkordname); Akkordtoene = [Akkordtoene, (Grundton + 2)]; Legende = char (Legende, 'grosse None'); elseif Zusatzton == 3 Akkordname = sprintf ('%s4', Akkordname); Akkordtoene = [Akkordtoene, (Grundton + 5)]; Legende = char (Legende, 'Quarte'); elseif Zusatzton == 4 Akkordname = sprintf ('%s-', Akkordname); Akkordtoene = [Akkordtoene, (Grundton + 6)]; Legende = char (Legende, 'verminderte Quinte'); elseif Zusatzton == 5 Akkordname = sprintf ('%s+', Akkordname); Akkordtoene = [Akkordtoene, (Grundton + 8)]; Legende = char (Legende, 'uebermaessige Quinte'); elseif Zusatzton == 6 Akkordname = sprintf ('%s6', Akkordname); Akkordtoene = [Akkordtoene, (Grundton + 9)]; Legende = char (Legende, 'grosse Sexte'); elseif Zusatzton == 7 Akkordname = sprintf ('%s7', Akkordname); Akkordtoene = [Akkordtoene, (Grundton + 10)]; Legende = char (Legende, 'kleine Septime'); elseif Zusatzton == 8 Akkordname = sprintf ('%s7+', Akkordname); Akkordtoene = [Akkordtoene, (Grundton + 11)]; Legende = char (Legende, 'grosse Septime'); elseif Zusatzton == 9 Akkordname = sprintf ('%s+/9', Akkordname); Akkordtoene = [Akkordtoene, (Grundton + 8), (Grundton + 2)]; Legende = char (Legende, 'uebermaessige Quinte', 'grosse None'); elseif Zusatzton == 10 Akkordname = sprintf ('%s6/9', Akkordname); Akkordtoene = [Akkordtoene, (Grundton + 9), (Grundton + 2)]; Legende = char (Legende, 'grosse Sexte', 'grosse None'); elseif Zusatzton == 11 Akkordname = sprintf ('%s7/4', Akkordname); Akkordtoene = [Akkordtoene, (Grundton + 10), (Grundton + 5)]; Legende = char (Legende, 'kleine Septime', 'Quarte'); elseif Zusatzton == 12 Akkordname = sprintf ('%s7/9', Akkordname); Akkordtoene = [Akkordtoene, (Grundton + 10), (Grundton + 2)]; Legende = char (Legende, 'kleine Septime', 'grosse None'); elseif (Zusatzton == 13) && (Geschlecht == 1) Akkordname = sprintf ('%s6/7+', Akkordname); Akkordtoene = [Akkordtoene, (Grundton + 9), (Grundton + 11)]; Legende = char (Legende, 'grosse Sexte', 'grosse Septime'); elseif (Zusatzton == 14) && (Geschlecht == 1) Akkordname = sprintf ('%s7/9+', Akkordname); Akkordtoene = [Akkordtoene, (Grundton + 10), (Grundton + 3)]; Legende = char (Legende, 'kleine Septime', 'uebermaessige None'); else if Zusatzton ~= 1 error ('Ungueltiger Zusatzton!'); end end end Akkordtoene = mod (Akkordtoene, 12); Griffbrettnoten = mod ([8:15; 3:10; 11:18; 6:13; 1:8; 8:15], 12); Griffbrett = char ('e ++-----+-----+-----+-----+-----+-----+-----', ... ' || | | | | | |', ... 'h ++-----+-----+-----+-----+-----+-----+-----', ... ' || | | | | | |', ... 'g ++-----+-----+-----+-----+-----+-----+-----', ... ' || | | o | | o | | o', ... 'D ++-----+-----+-----+-----+-----+-----+-----', ... ' || | | | | | |', ... 'A ++-----+-----+-----+-----+-----+-----+-----', ... ' || | | | | | |', ... 'E ++-----+-----+-----+-----+-----+-----+-----'); for Ton = 1:size (Akkordtoene, 2) Index = find (Griffbrettnoten == Akkordtoene (Ton)); for Treffer = 1:size (Index, 1) [Index_1, Index_2] = ind2sub (size (Griffbrettnoten), Index (Treffer)); Index_1 = 2 * Index_1 - 1; Index_2 = 6 * Index_2 + (-3:-1); Griffbrett (Index_1, Index_2) = sprintf ('(%d)', Ton); end end fprintf ('\n%s\n\n', Akkordname); for Index = 1:size (Griffbrett, 1) fprintf ('%s\n', deblank (Griffbrett (Index, :))); end fprintf ('\nLegende:'); fprintf ('\n========\n\n'); for Index = 1:size (Legende, 1) fprintf ('%d) %s\n', Index, deblank (Legende (Index, :))); end fprintf ('\n'); end