21

Кастомный чиптюн

Помню, как в детстве с восхищением смотрел на динамик в колонке, чудесным образом воспроизводящий музыку/звуки с помощью колебаний картонной мембраны. Сейчас решил сделать в игре собственный синтезатор в реальном времени.

Никакой записанной заранее музыки. Все должно генерироваться на лету. Захотелось попробовать сделать 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

Правила сообщества

ОБЩИЕ ПРАВИЛА:

- Уважайте чужой труд и используйте конструктивную критику

- Не занимайтесь саморекламой, пишите качественные и интересные посты

- Никакой политики


СТОИТ ПУБЛИКОВАТЬ:

- Посты о Вашей игре с историей её разработки и описанием полученного опыта

- Обучающие материалы, туториалы

- Интервью с опытными разработчиками

- Анонсы бесплатных мероприятий для разработчиков и истории их посещения;
- Ваши работы, если Вы художник/композитор и хотите поделиться ими на безвозмездной основе

НЕ СТОИТ ПУБЛИКОВАТЬ:

- Посты, содержащие только вопрос или просьбу помочь
- Посты, содержащие только идею игры

- Посты, единственная цель которых - набор команды для разработки игры

- Посты, не относящиеся к тематике сообщества

Подобные посты по решению администрации могут быть перемещены из сообщества в общую ленту.

ЗАПРЕЩЕНО:

- Публиковать бессодержательные посты с рекламой Вашего проекта (см. следующий пункт), а также все прочие посты, содержащие рекламу/рекламные интеграции

- Выдавать чужой труд за свой

Подобные посты будут перемещены из сообщества в общую ленту, а их авторы по решению администрации могут быть внесены в игнор-лист сообщества.


О РАЗМЕЩЕНИИ ССЫЛОК:

Ссылка на сторонний ресурс, связанный с игрой, допускается только при следующих условиях:

- Пост должен быть содержательным и интересным для пользователей, нести пользу для сообщества

- Ссылка должна размещаться непосредственно в начале или конце поста и только один раз

- Cсылка размещается в формате: "Страница игры в Steam: URL"