summaryrefslogtreecommitdiffstats
path: root/src/common.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/common.h')
-rw-r--r--src/common.h64
1 files changed, 43 insertions, 21 deletions
diff --git a/src/common.h b/src/common.h
index 7a0c50c..e864a71 100644
--- a/src/common.h
+++ b/src/common.h
@@ -601,29 +601,46 @@ sound_volume(SoundChannel channels, u8 volume) {
601#define SOUND_SQUARE_RESET (1 << 0xF) 601#define SOUND_SQUARE_RESET (1 << 0xF)
602 602
603typedef enum { 603typedef enum {
604 NOTE_C, 604 NOTE_C_2 , NOTE_C_SHARP_2 , NOTE_D_2 , NOTE_D_SHARP_2 ,
605 NOTE_C_SHARP, 605 NOTE_E_2 , NOTE_F_2 , NOTE_F_SHARP_2 , NOTE_G_2 ,
606 NOTE_D, 606 NOTE_G_SHARP_2 , NOTE_A_2 , NOTE_A_SHARP_2 , NOTE_B_2 ,
607 NOTE_D_SHARP, 607 NOTE_C_3 , NOTE_C_SHARP_3 , NOTE_D_3 , NOTE_D_SHARP_3 ,
608 NOTE_E, 608 NOTE_E_3 , NOTE_F_3 , NOTE_F_SHARP_3 , NOTE_G_3 ,
609 NOTE_F, 609 NOTE_G_SHARP_3 , NOTE_A_3 , NOTE_A_SHARP_3 , NOTE_B_3 ,
610 NOTE_F_SHARP, 610 NOTE_C_4 , NOTE_C_SHARP_4 , NOTE_D_4 , NOTE_D_SHARP_4 ,
611 NOTE_G, 611 NOTE_E_4 , NOTE_F_4 , NOTE_F_SHARP_4 , NOTE_G_4 ,
612 NOTE_G_SHARP, 612 NOTE_G_SHARP_4 , NOTE_A_4 , NOTE_A_SHARP_4 , NOTE_B_4 ,
613 NOTE_A, 613 NOTE_C_5 , NOTE_C_SHARP_5 , NOTE_D_5 , NOTE_D_SHARP_5 ,
614 NOTE_A_SHARP, 614 NOTE_E_5 , NOTE_F_5 , NOTE_F_SHARP_5 , NOTE_G_5 ,
615 NOTE_B, 615 NOTE_G_SHARP_5 , NOTE_A_5 , NOTE_A_SHARP_5 , NOTE_B_5 ,
616 NOTE_C_6 , NOTE_C_SHARP_6 , NOTE_D_6 , NOTE_D_SHARP_6 ,
617 NOTE_E_6 , NOTE_F_6 , NOTE_F_SHARP_6 , NOTE_G_6 ,
618 NOTE_G_SHARP_6 , NOTE_A_6 , NOTE_A_SHARP_6 , NOTE_B_6 ,
619 NOTE_C_7 , NOTE_C_SHARP_7 , NOTE_D_7 , NOTE_D_SHARP_7 ,
620 NOTE_E_7 , NOTE_F_7 , NOTE_F_SHARP_7 , NOTE_G_7 ,
621 NOTE_G_SHARP_7 , NOTE_A_7 , NOTE_A_SHARP_7 , NOTE_B_7 ,
622 NOTE_C_8
616} Note; 623} Note;
617 624
618u32 625static char * note_names[] = {
619sound_rate(Note note, u32 octave) { 626 "C2", "C#2", "D2", "D#2", "E2", "F2", "F#2", "G2", "G#2", "A2", "A#2", "B2",
620 const u32 base_rate[12] = { 627 "C3", "C#3", "D3", "D#3", "E3", "F3", "F#3", "G3", "G#3", "A3", "A#3", "B3",
621 8013, 7566, 7144, 6742, // C , C#, D , D# 628 "C4", "C#4", "D4", "D#4", "E4", "F4", "F#4", "G4", "G#4", "A4", "A#4", "B4",
622 6362, 6005, 5666, 5346, // E , F , F#, G 629 "C5", "C#5", "D5", "D#5", "E5", "F5", "F#5", "G5", "G#5", "A5", "A#5", "B5",
623 5048, 4766, 4499, 4246 // G#, A , A#, B 630 "C6", "C#6", "D6", "D#6", "E6", "F6", "F#6", "G6", "G#6", "A6", "A#6", "B6",
624 }; 631 "C7", "C#7", "D7", "D#7", "E7", "F7", "F#7", "G7", "G#7", "A7", "A#7", "B7",
625 return 2048 - (base_rate[note] >> (4 + octave)); 632 "C8"
626} 633};
634
635const u32 sound_rates[] = {
636 44 , 156 , 262 , 363 , 457 , 547 , 631 , 710 , 785 , 856 , 923 , 986 ,
637 1046, 1102, 1155, 1205, 1252, 1297, 1339, 1379, 1416, 1452, 1485, 1517,
638 1547, 1575, 1601, 1626, 1650, 1672, 1693, 1713, 1732, 1750, 1766, 1782,
639 1797, 1811, 1824, 1837, 1849, 1860, 1870, 1880, 1890, 1899, 1907, 1915,
640 1922, 1929, 1936, 1942, 1948, 1954, 1959, 1964, 1969, 1973, 1977, 1981,
641 1985, 1988, 1992, 1995, 1998, 2001, 2003, 2006, 2008, 2010, 2012, 2014,
642 2016,
643};
627 644
628// 645//
629// Misc. 646// Misc.
@@ -638,4 +655,9 @@ wait_vsync(void) {
638 while(DISP_VCOUNT < 160); 655 while(DISP_VCOUNT < 160);
639} 656}
640 657
658// General utility functions. Min/Max/Clamp
659#define MIN(A, B) ((A) <= (B) ? (A) : (B))
660#define MAX(A, B) ((A) >= (B) ? (A) : (B))
661#define CLAMP(X, MIN, MAX) ((X) <= (MIN) ? (MIN) : (X) > (MAX) ? (MAX): (X))
662
641#endif // GBAEXP_COMMON_H 663#endif // GBAEXP_COMMON_H