From c274cd75771c36e0e06f6cf14641ee89e69b43c1 Mon Sep 17 00:00:00 2001 From: brunzelchen Date: Sun, 10 Apr 2011 12:45:15 +0000 Subject: using international note notation with C4 = 0 (internal) git-svn-id: svn://svn.code.sf.net/p/ultrastardx/svn/branches/1.0.1 Challenge MOD@2817 b956fd51-792f-4845-bead-9b4dfca2ff2c --- Game/Code/Classes/URecord.pas | 28 +++++++++++++++++++++++++--- 1 file changed, 25 insertions(+), 3 deletions(-) (limited to 'Game/Code/Classes/URecord.pas') diff --git a/Game/Code/Classes/URecord.pas b/Game/Code/Classes/URecord.pas index 10d1cbc6..d18b509d 100644 --- a/Game/Code/Classes/URecord.pas +++ b/Game/Code/Classes/URecord.pas @@ -55,6 +55,8 @@ type // procedures - bass record function GetMicrophone(handle: HSTREAM; buffer: Pointer; len: DWORD; user: DWORD): boolean; stdcall; + function GetNoteName(Note: integer): string; + var Sound: array of TSound; @@ -68,14 +70,34 @@ const 'C', 'C#', 'D', 'D#', 'E', 'F', 'F#', 'G', 'G#', 'A', 'A#', 'B' ); + NumHalftones = 47; + implementation uses UMain, ULog; +function GetNoteName(Note: integer): string; +var + N1, N2: Integer; + +begin + if (Note >= 0) then + begin + N1 := Note mod 12; + N2 := Note div 12 + 4; + end else + begin + N1 := (Note + (-Trunc(Note/12)+1)*12) mod 12; + N2 := (Note + 1) div 12 + 3; + end; + + Result := ToneStrings[N1] + IntToStr(N2); +end; + // from usdx 1.1 function TSound.GetToneString: string; begin if (SzczytJest) then - Result := ToneStrings[TonGamy] + IntToStr(Ton div 12 + 2) + Result := GetNoteName(Ton) else Result := '-'; end; @@ -117,7 +139,7 @@ procedure TSound.AnalizujByAutocorrelation; var T: integer; // tone F: real; // freq - Wages: array[0..35] of real; // wages + Wages: array[0..NumHalftones] of real; // wages MaxT: integer; // max tone MaxW: real; // max wage V: real; // volume @@ -147,7 +169,7 @@ begin MaxT := 0; // analyze all 12 halftones - for T := 0 to 35 do begin // to 11, then 23, now 35 (for Whitney and my high voice) + for T := 0 to NumHalftones do begin // to 11, then 23, now 35 (for Whitney and my high voice) F := 130.81*Power(1.05946309436, T)/2; // let's analyze below 130.81 Wages[T] := AnalyzeAutocorrelationFreq(F); -- cgit v1.2.3