(PLAY)

Материал из ПМК вики
Перейти к навигации Перейти к поиску

(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'у (англ.).

Ссылки[править]


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


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