Инструменты пользователя

Инструменты сайта


msx:basic_dialogue_programming_language:006

Различия

Здесь показаны различия между двумя версиями данной страницы.

Ссылка на это сравнение

Следующая версия
Предыдущая версия
msx:basic_dialogue_programming_language:006 [2022-09-09 21:08]
GreyWolf создано
msx:basic_dialogue_programming_language:006 [2023-02-19 16:19] (текущий)
GreyWolf
Строка 6: Строка 6:
 <WRAP group  99%> <WRAP group  99%>
 <WRAP half column> \\ </​WRAP>​ <WRAP half column> \\ </​WRAP>​
-<WRAP half column><​WRAP ​justify>+<WRAP half column><​WRAP ​right>
 У меня под руками оказался жалкий спинет;​ и вскоре я начал писать ноты, вот и все. У меня под руками оказался жалкий спинет;​ и вскоре я начал писать ноты, вот и все.
 <WRAP rightalign>​ <WRAP rightalign>​
Строка 18: Строка 18:
 Звукогенератор имеет три независимых выходных канала (A, B, C), допускается тем самым трёхголосный полифонический выход. Звуковой сигнал формируется генератором регулярных сигналов,​ частота которых (высота звука) может программироваться,​ либо широкополосным генератором шумов. Амплитуда сигнала(громкость) может устанавливаться для каждого сигнала отдельно или модулироваться генератором огибающей. Звукогенератор имеет три независимых выходных канала (A, B, C), допускается тем самым трёхголосный полифонический выход. Звуковой сигнал формируется генератором регулярных сигналов,​ частота которых (высота звука) может программироваться,​ либо широкополосным генератором шумов. Амплитуда сигнала(громкость) может устанавливаться для каждого сигнала отдельно или модулироваться генератором огибающей.
  
-MML — это Музыкальный Макро–Язык ("​Musical Macro–Language"​),​ в некотором смысле аналогичный [[msx:​basic_programming_guide:​05#gml|GML ("​Graphics Macro Language"​)]].+MML — это Музыкальный Макро–Язык ("​Musical Macro–Language"​),​ в некотором смысле аналогичный [[005#gml|GML ("​Graphics Macro Language"​)]].
  
 MML использует для записи нот символы:​ MML использует для записи нот символы:​
Строка 348: Строка 348:
 <WRAP group  99%> <WRAP group  99%>
 <WRAP half column> \\ </​WRAP>​ <WRAP half column> \\ </​WRAP>​
-<WRAP half column><​WRAP ​justify>+<WRAP half column><​WRAP ​right>
 А Вы ноктюрн сыграть могли бы\\ А Вы ноктюрн сыграть могли бы\\
 На флейте водосточных труб? На флейте водосточных труб?
Строка 445: Строка 445:
 <​code>​ <​code>​
 10 PLAY A$,B$,C$ 10 PLAY A$,B$,C$
-20 IF PLAY(0) THEN 20 ELSE READ A$:PLAY A$'​Выполнение программы не продолжится,​ пока музыка не будет сыграна!+20 IF PLAY(0) THEN 20 ELSE READ A$:PLAY A$ 
 +   '​Выполнение программы не продолжится,​ пока музыка не будет сыграна!
 </​code>​ </​code>​
  
Строка 520: Строка 521:
 всегда образуют короткую паузу между концом музыкальных данных первого оператора PLAY и началом музыкальных данных следующего оператора ''​PLAY''​. всегда образуют короткую паузу между концом музыкальных данных первого оператора PLAY и началом музыкальных данных следующего оператора ''​PLAY''​.
  
-Оператор ''​PLAY''​ позволяет исполнять ноты с чёткими перерывами между ними — staccato, без перерывов — legatoи с короткими перерывами,​ вполне достаточными для того, чтобы отличить звуки друг от друга — non legato. Как уже+Оператор ''​PLAY''​ позволяет исполнять ноты с чёткими перерывами между ними — staccato, без перерывов — legato и с короткими перерывами,​ вполне достаточными для того, чтобы отличить звуки друг от друга — non legato. Как уже
 говорилось,​ исполнение staccato достигается только за счёт того, что выдерживается 3/4 номинальной длительности ноты и 1/4 оставляется на паузу. Для исполнения legato выдерживается полная длительность каждого звука, в результате чего создаётся ощущение,​ что соседние звуки плавно переходят один в другой. При исполнении non legato выдерживается 7/8 номинальной длительности звука, а 1/8 длительности приходится на паузу: говорилось,​ исполнение staccato достигается только за счёт того, что выдерживается 3/4 номинальной длительности ноты и 1/4 оставляется на паузу. Для исполнения legato выдерживается полная длительность каждого звука, в результате чего создаётся ощущение,​ что соседние звуки плавно переходят один в другой. При исполнении non legato выдерживается 7/8 номинальной длительности звука, а 1/8 длительности приходится на паузу:
 <WRAP group> <WRAP group>
Строка 544: Строка 545:
 </​WRAP>​ </​WRAP>​
  
-Если после R в данном случае не была бы указана длительность (8), то несмотря на текущую длительность L8, "​нота"​ R в действительности имела бы длительность по умолчанию (4). Однакоэто не лучший способ для игры staccato и non legato. Гораздо проще обратиться за помощью к PSG (Программируемому Звуковому Генератору) (см. [[#​n63|раздел VI.3.]]).+Если после R в данном случае не была бы указана длительность (8), то несмотря на текущую длительность L8, "​нота"​ R в действительности имела бы длительность по умолчанию (4). Однако это не лучший способ для игры staccato и non legato. Гораздо проще обратиться за помощью к PSG (Программируемому Звуковому Генератору) (см. [[#​n63|раздел VI.3.]]).
  
 Если научиться умело пользоваться командами S и M, то вам будут доступны любые приёмы игры, тембры и разнообразные эффекты. Так, например,​ если аргумент команды S равен 1, то приёма staccato можно добиться,​ использовав диапазон частот 700÷3000. Если же аргумент команды S равен 1, а аргумент команды M находится в диапазоне 3000÷8000, то будет звучать non legato. При значении аргумента команды M, большего 8000, звучание нот переходит на legato. Если же аргумент команды S отличен от 1, то диапазон M, конечно,​ изменяется,​ но не очень сильно. Зато возникают новые эффекты,​ которыми можно разнообразить Ваше произведение. Если научиться умело пользоваться командами S и M, то вам будут доступны любые приёмы игры, тембры и разнообразные эффекты. Так, например,​ если аргумент команды S равен 1, то приёма staccato можно добиться,​ использовав диапазон частот 700÷3000. Если же аргумент команды S равен 1, а аргумент команды M находится в диапазоне 3000÷8000, то будет звучать non legato. При значении аргумента команды M, большего 8000, звучание нот переходит на legato. Если же аргумент команды S отличен от 1, то диапазон M, конечно,​ изменяется,​ но не очень сильно. Зато возникают новые эффекты,​ которыми можно разнообразить Ваше произведение.
Строка 625: Строка 626:
 20 '"​Во саду ли,в огороде"​ (Русская народная песня). 20 '"​Во саду ли,в огороде"​ (Русская народная песня).
 30 FOR I=1 TO 2 30 FOR I=1 TO 2
-40 PLAY"​T100sm800O6L8ffeedddeffeedddR8ccO5bbaaabO6ccO5bbaaa","​T100sm800O4L8dfaedfdfdfaedfaR8aeeg+aeaeaeeg+aee","​O4L8T100sm800daac+dadadaac+dafR8acebacacacebacc"​ +40 PLAY"​T100sm800O6L8ffeedddeffeedddR8ccO5bbaaabO6ccO5bbaaa",​ 
-50 A$="​T100s2m2000O5L16fedfedc+edO4abO5c+dc+defedfedc+eddddcO4BaO5CO4bag+baef+g+ag+abO5cO4baO5cO4bag+bA4"​+   "​T100sm800O4L8dfaedfdfdfaedfaR8aeeg+aeaeaeeg+aee",​ 
 +   "​O4L8T100sm800daac+dadadaac+dafR8acebacacacebacc"​ 
 +50 A$="​T100s2m2000O5L16fedfedc+edO4abO5c+dc+defedfedc+eddddcO4BaO5CO4bag+ 
 +   baef+g+ag+abO5cO4baO5cO4bag+bA4"​
 60 B$="​t100s2m2000O4L16ddffaaeeddffddffddffaaeeddffaaeeeeg+g+aaeeaaeeaaeeeeg+g+ccee"​ 60 B$="​t100s2m2000O4L16ddffaaeeddffddffddffaaeeddffaaeeeeg+g+aaeeaaeeaaeeeeg+g+ccee"​
 70 C$="​t100s2m2000O4L16ddaaR16r16c+c+ddaaddaaddaaR16r16c+c+ddaaaacceebbaaccaaccaacceebbeecc"​ 70 C$="​t100s2m2000O4L16ddaaR16r16c+c+ddaaddaaddaaR16r16c+c+ddaaaacceebbaaccaaccaacceebbeecc"​
Строка 639: Строка 643:
 50 C$="​sm2000t150O3L8f+4f+4r8er8aR8AR8AR8ER8AR8AR8A"​ 50 C$="​sm2000t150O3L8f+4f+4r8er8aR8AR8AR8ER8AR8AR8A"​
 60 PLAY A$,B$,C$ 60 PLAY A$,B$,C$
-70 A$="​O4L8f+ef+dO3aO4df+aL16gf+geL8D4ggB4aO5cO4B4":​B$="​O3L8ac+df+df+df+ac+d4gbO4g4f+f+g4":​C$="​O3L8r8ER8AR8AR8AR8EF+4R8DD4dAD4"​+70 A$="​O4L8f+ef+dO3aO4df+aL16gf+geL8D4ggB4aO5cO4B4":​B$="​O3L8ac+df+df+df+ac+d4gbO4g4f+f+g4":​ 
 +   C$="​O3L8r8ER8AR8AR8AR8EF+4R8DD4dAD4"​
 80 PLAY A$,B$,C$ 80 PLAY A$,B$,C$
-90 A$="​O4L8bO5d4O4bO5l16cdcO4al8bgdgb4aO5cO4b4bO5d4O4bO5cO4B16A16g4":​B$="​O4L8gb4O3bdf+g4df+O4g4O3df+O4g4gO3bgbdf+O4d4":​C$="​O3L8gO4g4O3ddad4gdO4d4dad4gdgdR8ab4"​+90 A$="​O4L8bO5d4O4bO5l16cdcO4al8bgdgb4aO5cO4b4bO5d4O4bO5cO4B16A16g4":​ 
 +   B$="​O4L8gb4O3bdf+g4df+O4g4O3df+O4g4gO3bgbdf+O4d4":​ 
 +   C$="​O3L8gO4g4O3ddad4gdO4d4dad4gdgdR8ab4"​
 100 PLAY A$,B$,C$ 100 PLAY A$,B$,C$
 110 NEXT- 110 NEXT-
Строка 1154: Строка 1161:
 </​code>​ </​code>​
 </​WRAP> ​ </​WRAP> ​
-  * <​WRAP>​ {{anchor:​e063-11}} 11) //"​Паровоз"//​ (автор программы студент 5 курса Никитин А.Н.)+  * <​WRAP>​ {{anchor:​e063-11}} 11) //"​Паровоз"//​ (автор программы студент 5–го ​курса Никитин А.Н.)
 \\ {{.examples:​063-11.bas|}} \\ [[+tab|wmsxbpge>​063-11.bas]] \\ {{.examples:​063-11.bas|}} \\ [[+tab|wmsxbpge>​063-11.bas]]
 <​code>​ <​code>​
Строка 1161: Строка 1168:
 30 FOR I=6 TO 13:READ A:​SOUNDI,​A:​NEXT 30 FOR I=6 TO 13:READ A:​SOUNDI,​A:​NEXT
 40 DATA 31,​7,​16,​16,​16,​250,​5,​14 40 DATA 31,​7,​16,​16,​16,​250,​5,​14
-50 FOR M=5 TO 2 STEP -1:RESTORE 70:FOR J=1 TO 12:FOR I=1 TO 200:​NEXT:​READ A:SOUND 11,A:SOUND 12,​M:​NEXT:​NEXT +50 FOR M=5 TO 2 STEP -1:RESTORE 70:FOR J=1 TO 12:FOR I=1 TO 200:​NEXT:​READ A: 
-60 SOUND 7,&​B00001100:​SOUND 0,78:SOUND 1,6:SOUND 2,78:SOUND 3,6:SOUND 13,14:SOUND 11,11:SOUND 12,0:FOR L=1 TO 1500:​NEXT:​BEEP:​END+   SOUND 11,A:SOUND 12,​M:​NEXT:​NEXT 
 +60 SOUND 7,&​B00001100:​SOUND 0,78:SOUND 1,6:SOUND 2,78:SOUND 3,6:SOUND 13,14: 
 +   SOUND 11,11:SOUND 12,0:FOR L=1 TO 1500:​NEXT:​BEEP:​END
 70 DATA 225,​200,​180,​160,​150,​125,​100,​80,​50,​40,​20,​10 70 DATA 225,​200,​180,​160,​150,​125,​100,​80,​50,​40,​20,​10
 80 SOUND 0,156:SOUND 1,12:SOUND 2,156:SOUND 3,12:SOUND 4,115:SOUND 5,9:RETURN 80 SOUND 0,156:SOUND 1,12:SOUND 2,156:SOUND 3,12:SOUND 4,115:SOUND 5,9:RETURN
Строка 1177: Строка 1186:
 Отметим,​ что во всех примерах программ,​ приведённых в данном разделе,​ рекомендуется перед запуском программы выполнить команду ''​BEEP''​. Последняя инициализирует звуковую микросхему,​ устанавливая её регистры по умолчанию в первоначальное состояние. Отметим,​ что во всех примерах программ,​ приведённых в данном разделе,​ рекомендуется перед запуском программы выполнить команду ''​BEEP''​. Последняя инициализирует звуковую микросхему,​ устанавливая её регистры по умолчанию в первоначальное состояние.
  
-{{anchor:​e064-01}} ​1. //"​Игра в лошадки"//​ (П.И.Чайковский)+  - <​WRAP>​{{anchor:​e064-01}} //"​Игра в лошадки"//​ (П.И.Чайковский)
 \\ {{.examples:​064-01.bas|}} \\ [[+tab|wmsxbpge>​064-01.bas]] \\ {{.examples:​064-01.bas|}} \\ [[+tab|wmsxbpge>​064-01.bas]]
 <​code>​ <​code>​
 NEW NEW
 Ok Ok
-10 PLAY"​s10m1800t200o4l8f+gf+bbbo5c+dc+ddd","​s10m2800o4l8t200ddddddb-b-b-aaa","​s10m2800l8t200o3abag+g+g+gggf+f+f+"​ +10 PLAY"​s10m1800t200o4l8f+gf+bbbo5c+dc+ddd",​ 
-20 PLAY"​v10s1m2800o4l8f+gf+bbbo5c+dc+ddd","​v11s1m2800o4l8ddddddb-b-b-aaa","​s1m2800l8o3abag+g+g+gggf+f+f+"​ +   "​s10m2800o4l8t200ddddddb-b-b-aaa","​s10m2800l8t200o3abag+g+g+gggf+f+f+"​ 
-30 PLAY"​V12o5f+gf+gggd+ed+eeec+dc+dddo4bo5c+o4baaa","​V12o5e-e-e-dddccco4bbbbbbaaag+g+g+ddd","​sm2800o4ccco3bbbaaag+g+g+gggf+f+f+eeef+f+f+"​ +20 PLAY"​v10s1m2800o4l8f+gf+bbbo5c+dc+ddd",​ 
-40 PLAY"​v13o5f+gf+gggd+ed+eeec+dc+dddo4bo5c+o4baaa","​v13o5e-e-e-dddccco4bbbbbbaaag+g+g+ddd","​o4ccco3bbbaaag+g+g+gggf+f+f+eeef+f+f+"​ +   "​v11s1m2800o4l8ddddddb-b-b-aaa","​s1m2800l8o3abag+g+g+gggf+f+f+"​ 
-50 PLAY"​sm500o4a+ba+f+f+f+f+f+f+f+f+f+bo5co4bo5c+c+c+d+ed+eeed+ed+o4bbbbbb","​m3000o4f+f+f+o3bbba+a+a+bbbo4aaabbbbbbbbbbbbeeed+d+d+","​m3000o4c+c+c+o3f+f+f+eeedddd+d+d+o4gggo3f+f+f+gggo4f+f+f+o3bbbaaa"​ +30 PLAY"​V12o5f+gf+gggd+ed+eeec+dc+dddo4bo5c+o4baaa",​ 
-60 PLAY"​o4bbbef+eaaag+g+g+aaaf+gf+bbbo5c+dc+dddo4f+gf+bbbo5c+dc+dddf+gf+ggg","​o4eeedddeeededc+c+c+dddeeeb-b-b-aaadddeeeb-b-b-aaao5e-e-e-ddd","​o3gggg+g+g+aaaeeeeeeaaag+g+g+gggf+f+f+aaag+g+g+gggf+f+f+o4ccco3bbb"​ +   "​V12o5e-e-e-dddccco4bbbbbbaaag+g+g+ddd",​ 
-70 PLAY"​v13o5d+ed+eeec+dc+dddo4bo5c+o4baaaf+gf+gggd+ed+eeeo3bo4c+o3bo4dddag+adddf+gf+ggg","​v13o5ccco4bbbb-b-b-aaag+g+g+ddde-e-dddccco3bbbr8br8aaao4c+c+c+o3f+f+f+o4e-e-e-ddd","​o3aaag+g+g+gggf+f+f+e+e+e+f+f+f+aaagggf+f+f+eeee+e+e+f+f+f+gggdddo4ccco3bbb"​ +   "​sm2800o4ccco3bbbaaag+g+g+gggf+f+f+eeef+f+f+"​ 
-80 PLAY"​o5c+dc+dddf+gf+gggo6c+dc+dddd","​o4gggf+f+f+o5e-e-e-dddgggf+f+f+f+","​o3b-b-b-aaaaaadddeeedddd"​+40 PLAY"​v13o5f+gf+gggd+ed+eeec+dc+dddo4bo5c+o4baaa",​ 
 +   "​v13o5e-e-e-dddccco4bbbbbbaaag+g+g+ddd",​ 
 +   "​o4ccco3bbbaaag+g+g+gggf+f+f+eeef+f+f+"​ 
 +50 PLAY"​sm500o4a+ba+f+f+f+f+f+f+f+f+f+bo5co4bo5c+c+c+d+ed+eeed+ed+o4bbbbbb",​ 
 +   "​m3000o4f+f+f+o3bbba+a+a+bbbo4aaabbbbbbbbbbbbeeed+d+d+",​ 
 +   "​m3000o4c+c+c+o3f+f+f+eeedddd+d+d+o4gggo3f+f+f+gggo4f+f+f+o3bbbaaa"​ 
 +60 PLAY"​o4bbbef+eaaag+g+g+aaaf+gf+bbbo5c+dc+dddo4f+gf+bbbo5c+dc+dddf+gf+ggg",​ 
 +   "​o4eeedddeeededc+c+c+dddeeeb-b-b-aaadddeeeb-b-b-aaao5e-e-e-ddd",​ 
 +   "​o3gggg+g+g+aaaeeeeeeaaag+g+g+gggf+f+f+aaag+g+g+gggf+f+f+o4ccco3bbb"​ 
 +70 PLAY"​v13o5d+ed+eeec+dc+dddo4bo5c+o4baaaf+gf+gggd+ed+eeeo3bo4c+o3bo4dddag+adddf+gf+ggg",​ 
 +   "​v13o5ccco4bbbb-b-b-aaag+g+g+ddde-e-dddccco3bbbr8br8aaao4c+c+c+o3f+f+f+o4e-e-e-ddd",​ 
 +   "​o3aaag+g+g+gggf+f+f+e+e+e+f+f+f+aaagggf+f+f+eeee+e+e+f+f+f+gggdddo4ccco3bbb"​ 
 +80 PLAY"​o5c+dc+dddf+gf+gggo6c+dc+dddd","​o4gggf+f+f+o5e-e-e-dddgggf+f+f+f+",​ 
 +   "​o3b-b-b-aaaaaadddeeedddd"​
 </​code>​ </​code>​
- +</​WRAP>​ 
-{{anchor:​e064-02}} ​2. //"​Лезгинка"//​ (Грузинский народный танец)+  - <​WRAP> ​{{anchor:​e064-02}} //"​Лезгинка"//​ (Грузинский народный танец)
 \\ {{.examples:​064-02.bas|}} \\ [[+tab|wmsxbpge>​064-02.bas]] \\ {{.examples:​064-02.bas|}} \\ [[+tab|wmsxbpge>​064-02.bas]]
 <​code>​ <​code>​
Строка 1221: Строка 1243:
 230 C$="​O4L4R4G+R4BR4O4a4":​PLAY A$,​B$,​C$:​END 230 C$="​O4L4R4G+R4BR4O4a4":​PLAY A$,​B$,​C$:​END
 </​code>​ </​code>​
-{{anchor:​e064-03}} ​3. //"​Менуэт из сонаты 13"// (Йозеф ​Гайдн)+</​WRAP>​ 
 +  - <​WRAP>​{{anchor:​e064-03}} //"​Менуэт из сонаты 13"// (Й.Гайдн)
 \\ {{.examples:​064-03.bas|}} \\ [[+tab|wmsxbpge>​064-03.bas]] \\ {{.examples:​064-03.bas|}} \\ [[+tab|wmsxbpge>​064-03.bas]]
 <​code>​ <​code>​
Строка 1227: Строка 1250:
 Ok Ok
 2 FOR I=1 TO 2 2 FOR I=1 TO 2
-3 PLAY"​sm15000l8t180o4a4a4a4a2o5dc+","​s1m15000l8t180o4f+4f+4f+4f+4f+4f+4","​s1m15000l8t180o4d4d4d4d4d4d4"​+3 PLAY"​sm15000l8t180o4a4a4a4a2o5dc+",​ 
 +  ​"​s1m15000l8t180o4f+4f+4f+4f+4f+4f+4",​ 
 +  ​"​s1m15000l8t180o4d4d4d4d4d4d4"​
 4 PLAY"​o5c+o4bbo5ggo4bbaa4.o5a","​l4o4ggggf+","​l4o4ddddd"​ 4 PLAY"​o5c+o4bbo5ggo4bbaa4.o5a","​l4o4ggggf+","​l4o4ddddd"​
 5 PLAY"​o5agg4.f+","​l8ago5d4c+4","​l8ago4b4a4"​ 5 PLAY"​o5agg4.f+","​l8ago5d4c+4","​l8ago4b4a4"​
Строка 1246: Строка 1271:
 20 PLAY"​sm2000o5f+eeddc+d1","​v15o4g4f+4e4sm2000d4o3a4o4d2","​v15o3a4a4a4o4"​ 20 PLAY"​sm2000o5f+eeddc+d1","​v15o4g4f+4e4sm2000d4o3a4o4d2","​v15o3a4a4a4o4"​
 </​code>​ </​code>​
-{{anchor:​e064-04}} ​4. //"​Итальянская песенка"//​ (П.И.Чайковский)+</​WRAP>​ 
 +  - <​WRAP>​{{anchor:​e064-04}} //"​Итальянская песенка"//​ (П.И.Чайковский)
 \\ {{.examples:​064-04.bas|}} \\ [[+tab|wmsxbpge>​064-04.bas]] \\ {{.examples:​064-04.bas|}} \\ [[+tab|wmsxbpge>​064-04.bas]]
 <​code>​ <​code>​
Строка 1303: Строка 1329:
 450 RETURN 450 RETURN
 </​code>​ </​code>​
-{{anchor:​e064-05}} ​5. Перейдём к сочинению //"​функциональной"//​ музыки [[bibliography#​b22|[22]]].+</​WRAP>​ 
 +  - <​WRAP>​{{anchor:​e064-05}} Перейдём к сочинению //"​функциональной"//​ музыки [[bibliography#​b22|[22]]].
  
 Будем создавать мелодию в до–мажор,​ что соответствует игре только по белым клавишам пианино (все ноты без диезов и бемолей). Более того, используем только 9 клавиш:​ Будем создавать мелодию в до–мажор,​ что соответствует игре только по белым клавишам пианино (все ноты без диезов и бемолей). Более того, используем только 9 клавиш:​
Строка 1309: Строка 1336:
 ^  Октава ​ |  O4  |  O4  |  O4  |  O4  |  O4  |  O5  |  O5  |  O5  |  O5  | ^  Октава ​ |  O4  |  O4  |  O4  |  O4  |  O4  |  O5  |  O5  |  O5  |  O5  |
  
-По желанию легко расширить диапазон,​ в котором звучит мелодия. Кроме того, можно выбрать другую тональность,​ указав на нотах знаки «-» и «+».+По желанию ​можно ​легко расширить диапазон,​ в котором звучит мелодия. Кроме того, можно выбрать другую тональность,​ указав на нотах знаки «-» и «+».
  
 Используем две функции:​ одну для построения мелодии,​ другую для создания ритма. Обе функции зависят от двух переменных К и Х. Используем две функции:​ одну для построения мелодии,​ другую для создания ритма. Обе функции зависят от двух переменных К и Х.
Строка 1347: Строка 1374:
 130 DEF FNPW(X,​K)=1.5+(-1)^K*(X-1.5) 130 DEF FNPW(X,​K)=1.5+(-1)^K*(X-1.5)
 140 DEF FNR(X,​K)=2*INT(1/​(4-X))+INT((X+1)*(K+1)/​16)+1 140 DEF FNR(X,​K)=2*INT(1/​(4-X))+INT((X+1)*(K+1)/​16)+1
-150 DEF FNF(X,​K)=FNF1(FNPW(X,​K))+FNS1(K)*FNF2(FNPW(X,​K))+FNS2(K)*FNF3(FNPW(X,​K))+FNS3(K)*FNF4(FNPW(X,​K))+150 DEF FNF(X,​K)=FNF1(FNPW(X,​K))+FNS1(K)*FNF2(FNPW(X,​K))+ 
 +    ​FNS2(K)*FNF3(FNPW(X,​K))+FNS3(K)*FNF4(FNPW(X,​K))
 160 M$=""​ 160 M$=""​
 170 FOR K=0 TO 3 170 FOR K=0 TO 3
Строка 1359: Строка 1387:
 250 PLAY M$ 250 PLAY M$
 </​code>​ </​code>​
- +</​WRAP>​ 
-{{anchor:​e064-06}} ​6. Программа //"​Музыкальный//​ редактор"​ [[bibliography#​b22|[22]]] служит для перевода нотной записи в буквенную. После запуска программы на экране рисуется нотный стан. По нему можно перемещать указатель. Установка ноты производится+  - <​WRAP>​{{anchor:​e064-06}} Программа //"​Музыкальный//​ редактор"​ [[bibliography#​b22|[22]]] служит для перевода нотной записи в буквенную. После запуска программы на экране рисуется нотный стан. По нему можно перемещать указатель. Установка ноты производится
 нажатием на клавишу управления курсором <​key>​→</​key>​. После установки исправить ноту //​нельзя//​ (это недостаток редактора,​ однако для его устранения нужно значительно усложнить программу). До установки можно перемещать указатель по вертикали. Название ноты будет автоматически формироваться по положению на нотном стане. Можно придать ноте бемоль (знак «-») или диез (знак «+»), а также длительность,​ задаваемую одной цифрой (1 — целая, 2 — половинная,​ 4 — четверть,​ 8 — восьмая). Если длительность не указана,​ то подразумевается четверть. Порядок ввода фиксирован:​после длительности вводить знаки «-» и «+» нельзя. нажатием на клавишу управления курсором <​key>​→</​key>​. После установки исправить ноту //​нельзя//​ (это недостаток редактора,​ однако для его устранения нужно значительно усложнить программу). До установки можно перемещать указатель по вертикали. Название ноты будет автоматически формироваться по положению на нотном стане. Можно придать ноте бемоль (знак «-») или диез (знак «+»), а также длительность,​ задаваемую одной цифрой (1 — целая, 2 — половинная,​ 4 — четверть,​ 8 — восьмая). Если длительность не указана,​ то подразумевается четверть. Порядок ввода фиксирован:​после длительности вводить знаки «-» и «+» нельзя.
  
Строка 1415: Строка 1443:
 400 END 400 END
 </​code>​ </​code>​
-…в заключение данной главы приведём весьма полезную таблицу:​ 
  
 +В заключении данной главы приведем весьма полезную таблицу:​
 ^  Октава ​ ^  Название ноты и её номер в команде N  ^^^^^^^^^^^^ ^  Октава ​ ^  Название ноты и её номер в команде N  ^^^^^^^^^^^^
 ^  1  |C|C#​|D|D#​|E|F|F#​|G|G#​|A|A#​|B| ^  1  |C|C#​|D|D#​|E|F|F#​|G|G#​|A|A#​|B|
Строка 1436: Строка 1464:
 ^  9  |C| ^  9  |C|
 ^:::|96| ^:::|96|
 +</​WRAP>​
 +  - <​WRAP>​ {{anchor:​e064-07}} __//​Дополнение.//​__
 +\\ //"​Соловей"//​ (музыка народная)
 +\\ {{.examples:​064-07.bas|}} \\ [[+tab|wmsxbpge>​064-07.bas]]
 +<​code>​
 +10 SOUND7,&​B10001000:​ SOUND8,​15:​SOUND1,​0
 +20 J=RND(1)*25:​U=RND(1)*15:​E=RND(1)*20:​FORC=0TOJ:​FORI=0TO20:​SOUND0,​I:​
 +   ​NEXT:​NEXT:​FORC=0TOU:​FORI=0TO45:​SOUND0,​I:​NEXT:​NEXT:​FORC=0TOE:​FORI=30TO
 +   ​0STEP-1:​SOUND0,​I:​NEXT:​NEXT
 +30 GOTO 20
 +</​code>​
 +</​WRAP>​
  
 {{anchor:​examples6}} {{anchor:​examples6}}
msx/basic_dialogue_programming_language/006.1662746926.txt.gz · Последние изменения: 2022-09-09 21:08 — GreyWolf