tuning_comparison/
tuning_comparison.rs1use aether_midi::tuning::TuningTable;
9
10fn main() {
11 println!("AetherDSP MIDI - Tuning System Comparison");
12 println!("==========================================\n");
13
14 let equal_temp = TuningTable::equal_temperament(440.0);
16 let tizita = TuningTable::ethiopian_tizita(440.0);
17 let rast = TuningTable::arabic_maqam_rast(440.0);
18 let yaman = TuningTable::indian_raga_yaman(440.0);
19
20 println!("Comparing tuning systems for one octave (C4-C5):\n");
21 println!("{:4} | {:>10} | {:>10} | {:>10} | {:>10} | {:>8}",
22 "MIDI", "12-TET", "Tizita", "Rast", "Yaman", "Cents");
23 println!("{}", "-".repeat(70));
24
25 for midi_note in 60..=72 {
27 let freq_12tet = equal_temp.frequency(midi_note);
28 let freq_tizita = tizita.frequency(midi_note);
29 let freq_rast = rast.frequency(midi_note);
30 let freq_yaman = yaman.frequency(midi_note);
31
32 let cents_tizita: f32 = 1200.0 * (freq_tizita / freq_12tet).log2();
34 let cents_rast: f32 = 1200.0 * (freq_rast / freq_12tet).log2();
35 let cents_yaman: f32 = 1200.0 * (freq_yaman / freq_12tet).log2();
36
37 let note_name = get_note_name(midi_note);
38
39 println!("{:4} | {:10.2} | {:10.2} | {:10.2} | {:10.2} | {:+8.1}",
40 format!("{} ({})", midi_note, note_name),
41 freq_12tet,
42 freq_tizita,
43 freq_rast,
44 freq_yaman,
45 cents_tizita.max(cents_rast).max(cents_yaman)
46 );
47 }
48
49 println!("\nš Key Observations:");
50 println!(" ⢠Ethiopian Tizita: Pentatonic scale with characteristic flat intervals");
51 println!(" ⢠Arabic Maqam Rast: Quarter-tone flats on 3rd and 7th degrees");
52 println!(" ⢠Indian Raga Yaman: Just intonation with raised 4th (Kalyan thaat)");
53 println!(" ⢠Cents: Deviation from 12-TET (100 cents = 1 semitone)");
54
55 println!("\nā Try these tuning systems in your music!");
56}
57
58fn get_note_name(midi: u8) -> &'static str {
59 let note_names = ["C", "C#", "D", "D#", "E", "F", "F#", "G", "G#", "A", "A#", "B"];
60 note_names[(midi % 12) as usize]
61}