![]() |
Noten als enum auslegen
Ich erstelle ein Enum um die Noten zu transponieren.
Delphi-Quellcode:
TTranspose = (C = 1, C# = 2, D = 3, D# = 4, E = 5, F = 6, F# = 7, G = 8, G# = 9, A = 10, A# = 11, B = 12);
Jetzt meldet der Compiler C wäre redifiniert. Wie wäre es richtig? Ich brauche die Bezeichnungen als String im Enum. Oder kann man dies später zu einem Array assigned? gruss |
AW: Noten als enum auslegen
Du kannst "#" nicht in Bezeichnern verwenden.
|
AW: Noten als enum auslegen
Zitat:
Nur wie könnte man es anders besser machen? Ich brauche die Halbtöne. gruss |
AW: Noten als enum auslegen
Naja, einfach anders benennen halt :-D
Delphi-Quellcode:
oder so.
C_HALF/C_MAJOR
|
AW: Noten als enum auslegen
Zitat:
Delphi-Quellcode:
Nun einfach?
function TransposeChord(sChord: string; Pitch: Integer): string;
var sResult: string; sTranspose: Array[1..12] of TTranspose; K, MaxK, Found: Integer; begin sResult := sChord; MaxK := High(sTranspose); for K := 1 to MaxK do begin if sTranspose[K] = sChord then begin Found := (K + Pitch) mod MaxK; if Found < 1 then inc(Found, MaxK); sResult := sTranspose[Found]; break; end; Result := sResult; end; end; Umbenennen ist nicht möglich wie gesagt ich brauche den String 'C#' gruss |
AW: Noten als enum auslegen
Eine separate Methode zum Konvertieren zwischen Enum und String wäre dann sinnvoll.
|
AW: Noten als enum auslegen
Zitat:
Delphi-Quellcode:
und benenne das enum um.
const
cTranspose : Array[TTranspose ] of String = ('C, 'C#, 'D, 'D#'); Danke. gruss |
AW: Noten als enum auslegen
Sorry bin wieder blöd heute.
Delphi-Quellcode:
type
TTranspose = (C, C_, D, D_, E, F, F_, G, G_, A, A_, B); const cTranspose : Array[TTranspose] of String = ('C', 'C#', 'D', 'D#', 'E', 'F', 'F#', 'G', 'G#', 'A', 'A#', 'B');
Delphi-Quellcode:
kann mir bitte jemand auf die Sprünge helfen ?
function TransposeChord(sChord: string; Pitch: Integer): string;
var sResult: string; sTranspose: Array[0..11] of TTranspose; // scheint ein Problem mit dieser Definition zu sein. aber brauche ein Array wenn auch vielleicht nicht dieses K, MaxK, Found: Integer; begin sResult := sChord; MaxK := High(sTranspose); for K := 0 to MaxK do begin if cTranspose[sTranspose[K]] = sChord then begin Found := (K + Pitch) mod MaxK; if Found < 1 then inc(Found, MaxK); sResult := cTranspose[sTranspose[Found]]; break; end; Result := sResult; end; end; gruss |
AW: Noten als enum auslegen
# gibt es so ähnlich auch als andere Unicodezeichen ... wenn dieses andere Zeichen vom Compiler als "gültiges" alphanumerisches Zeichen anerkannt ist, dann könnte man auch das nehmen.
Aber ohne Codevervollständigung oder Copy&Paste sind solche Namen dann schwer zu schreiben, so als würdest du ohne IME versuchen chinesische Typenbezeichner zu verwenden. |
AW: Noten als enum auslegen
Zitat:
Delphi-Quellcode:
if cTranspose[sTranspose[K]] = sChord then
Ich erzeuge hier 12 x mal TTranspose
Delphi-Quellcode:
sTranspose: Array[0..11] of TTranspose;
Obwohl ich nur den Wert innerhalb eines einmalig erstellen TTranspose benötige. Das scheint mein Fehler zu sein. (Array ist eigentlich überflüssig) Hmmm... Aber ohne kann ich K nicht auswerten. Heute ist ein schlechter Tag.. Hehehehehehe EDIT: Ok hat sich erledigt.
Delphi-Quellcode:
gruss
function TransposeChord(sChord: string; Pitch: Integer): string;
var sResult: string; K, MaxK, Found: Integer; begin sResult := sChord; MaxK := 12; for K := 0 to (MaxK - 1) do begin if cTranspose[TTranspose(K)] = sChord then begin Found := (K + Pitch) mod MaxK; if Found < 1 then inc(Found, MaxK); sResult := cTranspose[TTranspose(Found)]; break; end; Result := sResult; end; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:44 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz