Jak odgrywać dźwięk według systemu równomiernie temperowanego

fatalbomb

Aby wygenerować nuty, które jakoś brzmią, należy określić częstotliwość dźwięku w systemie równomiernie temperowanym. Przedstawiony poniżej kod ma za zadanie tego dokonać.

unit Sounds;
interface
uses Crt;
 
const N_C  = 10000;
        N_Cis= 10595;
        N_D  = 11225;
        N_Dis= 11892;
        N_E  = 12599;
        N_F  = 13348;
        N_Fis= 14142;
        N_G  = 14983;
        N_Gis= 15874;
        N_A  = 16818;
        N_B  = 17818;
        N_H  = 18878;
procedure TCSound (Note:Word; Oct:Byte);
 
implementation
 
procedure TCSound (Note:Word; Oct:Byte);
var OutNote:Single;
begin
  OutNote := Oct*(261*(Note / 10000));
  Sound (Round (OutNote));
end;
 
end.

Kod sprawdziłem i działa. Czasem się przydaje.

FAQ

1 komentarz

Tak chyba prościej:

16.35*pow(1.0594630943593,semitone);

dla:
semitone=0 ---> częstotliwość dźwięku C0
semitone=12 ---> częstotliwość dźwięku C1
semitone=24 ---> częstotliwość dźwięku C2
itd.