(PLAY): различия между версиями

Материал из ПМК вики
Перейти к навигации Перейти к поиску
(Новая страница: «'''(PLAY)''' — стандартное слово Каллисто. {{нет иллюстраций}} {{заготовка}} Категория:Слова…»)
 
Нет описания правки
(не показана 21 промежуточная версия этого же участника)
Строка 1: Строка 1:
'''(PLAY)''' — стандартное слово [[Каллисто]].
'''(PLAY)''' — родное слово [[Каллисто]]. Сыграть мелодию.
(PLAY)        ( a u −− )                          Играть музыку. Проиграть u нот, начиная с адреса a.
Примитиву '''(PLAY)''' передаётся [[Единое адресное пространство|адрес]] массива, хранящего u нот нужной мелодии в формате длительность (2 байта), частота (2 байта). Длительность задаётся в миллисекундах, делённых на 10. Частота в Герцах, умноженных на 10. Как везде в «Электронике», [[Шестнадцатеричный формат|старший байт размещается перед младшим]].
 
Массив с мелодией должен располагаться в [[Регистр памяти данных|памяти данных]].
 
== Ввод слова (PLAY) ==
В [[Режим NUM|режиме NUM]] последовательно нажмите клавиши {{ШГ→}} &nbsp; [[Клавиша Р-ГРД-Г|{{Чёрная клавиша|Р-ГРД-Г}}]] [[Клавиша 6|{{Серая клавиша|6}}]] [[Клавиша -|{{Серая клавиша|−}}]] {{ШГ←}} [[Клавиша ,|{{Серая клавиша|1=<span style="position:relative;bottom:3px"> , </span>}}]] &nbsp; [[Клавиша 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]] содержит простой компилятор ММЯ — Музыкального Макро-Языка, позволяющего проигрывать мелодию, ноты которой записаны латинскими буквами. Слово '''(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)}}
* См. слова [[BEEP]] и [[BELL]]
 


{{нет иллюстраций}}
{{нет иллюстраций}}
{{заготовка}}
{{заготовка}}
[[Категория:Слова Каллисто]]
[[Категория:Слова Каллисто]]
[[Категория:Примитивы]]
[[Категория:Слова для звука на Каллисто]]

Версия от 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'у (англ.).

Ссылки


  У этой статьи нет иллюстраций. Вы можете помочь проекту, добавив их.


  Это заготовка статьи. Вы можете помочь проекту, дополнив её.