Текущая версия |
Ваш текст |
Строка 1: |
Строка 1: |
| '''(PLAY)''' — родное слово [[Каллисто]]. Сыграть мелодию. | | '''(PLAY)''' — встроенное слово [[Каллисто]]. |
| (PLAY) ( a u −− ) Играть музыку. Проиграть u нот, начиная с адреса a. | | (PLAY) ( a u −− ) Играть музыку. Проиграть u нот, начиная с адреса a. |
| Примитиву '''(PLAY)''' передаётся [[Единое адресное пространство|адрес]] массива, хранящего u нот нужной мелодии в формате длительность (2 байта), частота (2 байта). Длительность задаётся в миллисекундах, делённых на 10. Частота в Герцах, умноженных на 10. Как везде в «Электронике», [[Шестнадцатеричный формат|старший байт размещается перед младшим]].
| |
|
| |
| Массив с мелодией должен располагаться в [[Регистр памяти данных|памяти данных]].
| |
|
| |
|
| == Ввод слова (PLAY) == | | == Ввод слова (PLAY) == |
| В [[Режим NUM|режиме NUM]] последовательно нажмите клавиши {{ШГ→}} [[Клавиша Р-ГРД-Г|{{Чёрная клавиша|Р-ГРД-Г}}]] [[Клавиша 6|{{Серая клавиша|6}}]] [[Клавиша -|{{Серая клавиша|−}}]] {{ШГ←}} [[Клавиша ,|{{Серая клавиша|1=<span style="position:relative;bottom:3px"> , </span>}}]] [[Клавиша P|{{Синяя клавиша|P}}]] {{ШГ←}} | | В [[Режим NUM|режиме NUM]] последовательно нажмите клавиши [[Клавиша ШГ вправо|{{Чёрная клавиша|ШГ→}}]] [[Клавиша Р-ГРД-Г|{{Чёрная клавиша|Р-ГРД-Г}}]] [[Клавиша 6|{{Серая клавиша|6}}]] [[Клавиша -|{{Серая клавиша|−}}]] [[Клавиша ШГ влево|{{Чёрная клавиша|ШГ←}}]] [[Клавиша ,|{{Серая клавиша|1=<span style="position:relative;bottom:3px"> , </span>}}]] [[Клавиша P|{{Синяя клавиша|P}}]] [[Клавиша ШГ влево|{{Чёрная клавиша|ШГ←}}]] |
| | |
| == Реализация ==
| |
| <pre>
| |
| 1039 ;#xPLAY
| |
| 1040 ; (PLAY) ( a u −− ) Играть музыку. Проиграть u нот, начиная с адреса a.
| |
| 1041 LXPLAY: .DB 6
| |
| 1042 .TEXT "(PLAY)" ; ( адрес число−нот −− )
| |
| 1043 .DW LBEEP
| |
| 1044 XPLAY: .DW JXPLAY
| |
| 1045 JXPLAY: PKRM03 KINT M0 ; число нот
| |
| 1046 RM3 1 + MA 1 + M3
| |
| 1047 RM0 +/− KX<09 ; число−нот должно быть положительным
| |
| 1048 KRMA 10001 − KX>=09 M5
| |
| 1049 9052 M8
| |
| 1050 XPL1: KRM5 RME ∗ KRM5 + MA ; 2 байта: длительность
| |
| 1051 KRM5 RME ∗ KRM5 + 10 / MB ; 2 байта: частота∗10
| |
| 1052 XPL2: KRM8 FX=0 XPL2 ; Подождать конца предыдущего сигнала
| |
| 1053 RMB RMA KM8 ; Формирование звукового сигнала
| |
| 1054 FL0 XPL1
| |
| 1055 KGOTO9
| |
| </pre>
| |
| | |
| == Пример ==
| |
| Содержащий мелодию массив может быть подготовлен заранее или создан во время компиляции. Пример в блоке №43 из дистрибутива [[Каллисто|Каллисто 1.0]] содержит простой компилятор ММЯ — Музыкального Макро-Языка (строки 2-18), позволяющего проигрывать мелодию, ноты которой записаны латинскими буквами. Слово '''(play)''' упоминается в строке 18, а запускается в результате работы строки 27.
| |
| | |
| <pre>
| |
| listmkt v0.3.5a (c) AtH, 8 апреля 2015, Файл: B043.mkt
| |
| 0 \ Pacman music #43, AtH, 20150413
| |
| 1
| |
| 2 forth definitions 5 value темп
| |
| 3
| |
| 4 vocabulary ММЯ ММЯ definitions \ Музыкальный Макро Язык
| |
| 5 : нота ( частота длительность −−)
| |
| 6 <builds темп × , , does> here 4 cmove 4 allot ;
| |
| 7 : ; ( −−) ?csp here over 2+ − 4 / ↔ !
| |
| 8 [compile] forth ; immediate
| |
| 9
| |
| 10 0 1 нота . 0 2 нота .. 0 10 нота .10
| |
| 11 2470 1 нота b< 4939 ↑ 1 нота b 2 нота b+ 2616 1 нота c
| |
| 12 5233 1 нота c> 3111 ↑ 1 нота d# 3 нота d#++
| |
| 13 3296 ↑ 1 нота e 3 нота e++ 3492 1 нота f 3699 1 нота f#
| |
| 14 3920 1 нота g 4153 1 нота g# 4400 1 нота a
| |
| 15
| |
| 16 forth definitions
| |
| 17 : :мелодия ( −−) <builds here 2 allot !csp ММЯ
| |
| 18 does> ↑ 2+ ↔ u@ (play) ;
| |
| 19
| |
| 20 :мелодия Пакмэн \ Манве, 13 апреля 2015
| |
| 21 b< . b . f# . d# . b f# .. d#++ . \ такт 1
| |
| 22 c . c> . g . e . c> g .. e++ . \ такт 2
| |
| 23 b< . b . f# . d# . b f# .. d#++ . \ такт 3
| |
| 24 d# e f . f f# g . g g# a . b+ .10 ; \ такт 4
| |
| 25
| |
| 26 : tune \ ( −−) воспроизведение мелодии
| |
| 27 begin Пакмэн ?break again ;
| |
| 28 \s
| |
| </pre>
| |
| При желании развивать музыкальный макроязык можно изучить оператор PLAY в Бейсике. Его описание приведено, например, [http://www.helloworld.ru/texts/comp/lang/qbasic/book/qb1_c.html#c1 на сайте helloword.ru]. Англоязычную документацию по макроязыку PLAY можно найти на [https://en.wikibooks.org/wiki/QBasic/Appendix#PLAY Wikibooks], [http://www.qb64.net/wiki/index-php/PLAY/ QB64.net] или в [http://www.antonis.de/qbebooks/gwbasman/play.html руководстве по GW-Basic'у] ''(англ.)''.
| |
|
| |
|
| == Ссылки == | | == Ссылки == |
| * {{Исходник|xPLAY|(PLAY)}} | | * {{Исходник|xPLAY|(PLAY)}} |
| * См. слова [[BEEP]] и [[BELL]]
| |
|
| |
|
|
| |
|