mirror of
https://github.com/RGBCube/serenity
synced 2025-07-14 23:17:35 +00:00

The squad is complete :^) You can find the equation for the triangle wave here: https://en.wikipedia.org/wiki/Triangle_wave We're using this one: |x mod 4 - 2| - 1 Modifications have been made to correct the frequency and phase: |(4x + 1) mod 4 - 2| - 1 The white noise is generated by calling rand() and dividing it by RAND_MAX to get a value from 0 to 1. Then it's adjusted to fit between -1 and 1.
63 lines
1.9 KiB
C++
63 lines
1.9 KiB
C++
#pragma once
|
|
|
|
#include <AK/Types.h>
|
|
|
|
namespace Music {
|
|
|
|
struct Sample {
|
|
i16 left;
|
|
i16 right;
|
|
};
|
|
|
|
enum WaveType { Sine, Saw, Square, Triangle, Noise, InvalidWave };
|
|
|
|
enum PianoKey {
|
|
K_None,
|
|
K_C1, K_Db1, K_D1, K_Eb1, K_E1, K_F1, K_Gb1, K_G1, K_Ab1, K_A1, K_Bb1, K_B1,
|
|
K_C2, K_Db2, K_D2, K_Eb2, K_E2, K_F2, K_Gb2, K_G2,
|
|
};
|
|
|
|
inline bool is_white(PianoKey n)
|
|
{
|
|
switch (n) {
|
|
case K_C1:
|
|
case K_D1:
|
|
case K_E1:
|
|
case K_F1:
|
|
case K_G1:
|
|
case K_A1:
|
|
case K_B1:
|
|
case K_C2:
|
|
case K_D2:
|
|
case K_E2:
|
|
case K_F2:
|
|
case K_G2:
|
|
return true;
|
|
default:
|
|
return false;
|
|
}
|
|
}
|
|
|
|
enum Note {
|
|
C1, Db1, D1, Eb1, E1, F1, Gb1, G1, Ab1, A1, Bb1, B1,
|
|
C2, Db2, D2, Eb2, E2, F2, Gb2, G2, Ab2, A2, Bb2, B2,
|
|
C3, Db3, D3, Eb3, E3, F3, Gb3, G3, Ab3, A3, Bb3, B3,
|
|
C4, Db4, D4, Eb4, E4, F4, Gb4, G4, Ab4, A4, Bb4, B4,
|
|
C5, Db5, D5, Eb5, E5, F5, Gb5, G5, Ab5, A5, Bb5, B5,
|
|
C6, Db6, D6, Eb6, E6, F6, Gb6, G6, Ab6, A6, Bb6, B6,
|
|
C7, Db7, D7, Eb7, E7, F7, Gb7, G7, Ab7, A7, Bb7, B7,
|
|
};
|
|
|
|
const double note_frequency[] = {
|
|
/* Octave 1 */ 32.70, 34.65, 36.71, 38.89, 41.20, 43.65, 46.25, 49.00, 51.91, 55.00, 58.27, 61.74,
|
|
/* Octave 2 */ 65.41, 69.30, 73.42, 77.78, 82.41, 87.31, 92.50, 98.00, 103.83, 110.00, 116.54, 123.47,
|
|
/* Octave 3 */ 130.81, 138.59, 146.83, 155.56, 164.81, 174.61, 185.00, 196.00, 207.65, 220.00, 233.08, 246.94,
|
|
/* Octave 4 */ 261.63, 277.18, 293.66, 311.13, 329.63, 349.23, 369.99, 392.00, 415.30, 440.00, 466.16, 493.88,
|
|
/* Octave 5 */ 523.25, 554.37, 587.33, 622.25, 659.25, 698.46, 739.99, 783.99, 830.61, 880.00, 932.33, 987.77,
|
|
/* Octave 6 */ 1046.50, 1108.73, 1174.66, 1244.51, 1318.51, 1396.91, 1479.98, 1567.98, 1661.22, 1760.00, 1864.66, 1975.53,
|
|
/* Octave 7 */ 2093.00, 2217.46, 2349.32, 2489.02, 2637.02, 2793.83, 2959.96, 3135.96, 3322.44, 3520.00, 3729.31, 3951.07,
|
|
};
|
|
|
|
}
|
|
|
|
using namespace Music;
|