(PLAY): различия между версиями
AtH (обсуждение | вклад) Нет описания правки |
AtH (обсуждение | вклад) Нет описания правки |
||
(не показаны 3 промежуточные версии этого же участника) | |||
Строка 1: | Строка 1: | ||
'''(PLAY)''' — родное слово [[Каллисто]]. Сыграть мелодию. | '''(PLAY)''' — родное слово [[Каллисто]]. Сыграть мелодию. | ||
(PLAY) ( a u −− ) Играть музыку. Проиграть u нот, начиная с адреса a. | (PLAY) ( a u −− ) Играть музыку. Проиграть u нот, начиная с адреса a. | ||
Примитиву '''(PLAY)''' передаётся [[Единое адресное пространство|адрес]] массива, хранящего u нот нужной мелодии в формате длительность (2 байта) | Примитиву '''(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 содержит простой компилятор ММЯ — Музыкального Макро-Языка, позволяющего проигрывать мелодию, ноты которой записаны латинскими буквами. | Содержащий мелодию массив может быть подготовлен заранее или создан во время компиляции. Пример в блоке №43 из дистрибутива [[Каллисто|Каллисто 1.0]] содержит простой компилятор ММЯ — Музыкального Макро-Языка, позволяющего проигрывать мелодию, ноты которой записаны латинскими буквами. Слово '''(play)''' упоминается в строке 18, а запускается в результате работы строки 27. | ||
<pre> | <pre> |
Версия от 08:58, 9 ноября 2017
(PLAY) — родное слово Каллисто. Сыграть мелодию.
(PLAY) ( a u −− ) Играть музыку. Проиграть u нот, начиная с адреса a.
Примитиву (PLAY) передаётся адрес массива, хранящего u нот нужной мелодии в формате длительность (2 байта), частота (2 байта). Длительность задаётся в миллисекундах, делённых на 10. Частота в Герцах, умноженных на 10. Как везде в «Электронике», старший байт размещается перед младшим.
Массив с мелодией должен располагаться в памяти данных.
Ввод слова (PLAY)
В режиме NUM последовательно нажмите клавиши ШГ→ Р-ГРД-Г 6 − ШГ← , P ШГ←
Реализация
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
Пример
Содержащий мелодию массив может быть подготовлен заранее или создан во время компиляции. Пример в блоке №43 из дистрибутива Каллисто 1.0 содержит простой компилятор ММЯ — Музыкального Макро-Языка, позволяющего проигрывать мелодию, ноты которой записаны латинскими буквами. Слово (play) упоминается в строке 18, а запускается в результате работы строки 27.
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
При желании развивать музыкальный макроязык можно изучить оператор PLAY в Бейсике. Его описание приведено, например, на сайте helloword.ru. Англоязычную документацию по макроязыку PLAY можно найти на Wikibooks, QB64.net или в руководстве по GW-Basic'у (англ.).
Ссылки
У этой статьи нет иллюстраций. Вы можете помочь проекту, добавив их. |
Это заготовка статьи. Вы можете помочь проекту, дополнив её. |