Помню, как в детстве с восхищением смотрел на динамик в колонке, чудесным образом воспроизводящий музыку/звуки с помощью колебаний картонной мембраны. Сейчас решил сделать в игре собственный синтезатор в реальном времени.
Никакой записанной заранее музыки. Все должно генерироваться на лету. Захотелось попробовать сделать 100% контроль над звуковой волной. По сути, сделать формулу, в которую передаешь текущее время, а она возвращает позицию картонки мембраны динамика.
Сделал)) Вот на SoundCloud музыка для главного меню игры. Как вам?
Исходный код музыки (на встроенном языке Sandbasix):
10 // ***********************************.
20 // *** SPETROMSX Main Menu Theme ***.
30 // *** by Andrey Fomin ***.
40 // ***********************************.
50 //.
60 // 0 - High Arpegio.
70 TRACK: 0 vol=6 sqr=5 oct=4.
80 STEREO min=-8 max=5.
90 LFGVOL per=16 min=10 max=15 bynote=true adsr=90, 5, 100, 30.
100 ARPEGIO steps=--0--1&2--3-4--5-6--0&3--2-1 shift=16 dur=8 mode=ext.
110 DELAY: 0 fading=40 time=8 count=2 pan=-5, 5.
120 // 1 - Mid Bass Arpegio.
130 TRACK: 1 vol=3 oct=3 sqr=10 adsr=1, 30, 30, 20.
140 LFGPAN: 1 per=8 min=-12 max=0 bynote=true.
150 LFGDUTY: 1 per=0.125 min=0 max=8 bynote=false.
160 ARPEGIO: 1 steps=0-1--0-1-2-0-1-2----0--2 shift=16 dur=24 mode=ext.
170 DELAY: 1 fading=50 time=8 count=2 pan=10, -5.
180 // 2 - Strings.
190 TRACK: 2 vol=6 oct=3 sqr=12 adsr=90, 8, 70, 50.
200 LFGVOL: 2 per=16 min=8 max=15 bynote=true adsr=50, 8, 100, 50.
210 STEREO: 2 min=0 max=12.
220 // 3 - Bass.
230 TRACK: 3 vol=12 oct=1 sqr=4 duty=2 adsr=4, 30, 30, 40.
240 LFGPAN: 3 per=8 min=-7 max=3 bynote=true.
250 ARPEGIO: 3 steps=0--0--0--0-0- shift=8 dur=8.
260 // 4 - Drums.
270 TRACK: 4 vol=11.
280 // 5 - Solo.
290 TRACK: 5 vol=3 sqr=10 oct=4 duty=2 adsr=10, 50, 50, 10.
300 LFGPAN: 5 per=8 min=-10 max=10 bynote=true.
310 DELAY: 5 fading=75 time=8 count=4 pan=-13, 13, -7, 7.
320 LFGSQR: 5 per=8 min=0 max=15 bynote=true.
330 //.
340 // *** MAIN CHORDS ***.
350 SET: A F#maj9| Bmaj9| Amaj9| Emaj9|.
360 SET: a F#maj9| Bmaj9| Amaj9| Dmaj9|.
370 SET: B Gm9| D#9| Cm11| D#mMaj7|.
380 SET: C Am11| D7| Fmaj7| Cmaj7|.
390 SET: D Fm9| D#maj9| Fm9| D#maj9|.
400 // *** POWER CHORDS ***.
410 SET: pA F#5| B5| A5| E5| F#5| B5| A5| D5|.
420 SET: pB G5| D#5| C5| D#5| G5| D#5| C5| D#5|.
430 SET: pC A5| D5| F5| C5| A5| D5| F5| C5|.
440 SET: pD F5| D#5| F5| G5| F5| D#5| F5| G5|.
450 // *** DRUMS ***.
460 SET: d1 @*-%-%-*-! -$-*-^-%-*-_-*-! -*-%-$-
470 SET: d2 *-%-%-*-! -%-*-! -%*-^-! -*-! -_-%-$-
480 SET: d3 %*--$-*-%! --$*--%-*-$-*-%! -*-$--
490 SET: d4 *---*-! --*-*-^_-^_-! -~_-~_-! -*_-*_-
500 SET: d? d1? d2? d1? d4? d1? d2? d3? d4.
510 SET: e1 %*--$-%-! %--$-^-_-%-$--! %-%-$-%-
520 SET: e2 %*-*-$-%-! %--$-~-*-%-$--! %-%-$-%-
530 SET: e3 %*-*-$-%-! %--$-~-*-%-$-*-! %-%-! $-*%-
540 SET: e? e1? e2? e1? e3.
550 //.
560 // *** PLAY ***.
570 //.
590 PLAY: 1? pA: 1.
600 PLAY: 4 R0.5? e1? e3? e.
610 PLAY: 0 R0.25? a.
630 REWIND 1.
640 PLAY: 0? A? a: 2.
650 PLAY: 1? pA.
660 PLAY: 3? pA.
670 PLAY: 4? e? e.
690 REWIND 2.
700 PLAY: 0? B? B: 3.
710 PLAY: 2 v5? B? B.
720 PLAY: 3? pB.
730 PLAY: 4? d.
750 REWIND 3.
760 PLAY: 0? C? C: 4.
770 PLAY: 1? pC.
780 PLAY: 3? pC.
790 PLAY: 4? e? e.
810 REWIND 4.
820 PLAY: 0? D? D: 5.
830 PLAY: 2 v5? D? D.
840 PLAY: 3? pD.
850 PLAY: 4? d.
870 REWIND 5.
880 PLAY: 2 v5? A? a.
890 PLAY: 3? pA.
900 PLAY: 5 A#8 F>4 F>4 C#>4 F>8 D#>8 R2 R4 R8 C#>4 R8 G#4 R4 R8 B4 R8 D#4 R4 R8 F.
910 LOOP.
Читайте также.