7) 10 ' З в у к о в ы е эффекты ("тема пришельцев") 20 SOUND0,252:SOUND1,0:SOUND8,16:SOUND11,200:SOUND 12,2:SOUND 13,10 80 SOUND 7,&B00111110 90 PRINT"Нажмите любую клавишу..." 100 A$=INPUT$(1) 110 'Эффект модуляции:изменение частоты случайным образом 120 SOUND 12,1 130 SOUND 0,RND(1)*255 140 GOTO 130 Здесь звучание основного тона сопровождается эффектом модуляции. При нажатии клавиши регистр 12 вызывает рост периода волнового пакета, а час- тота звука (регистр 0) изменяется случайным образом. Этот пример хорошо демонстрирует широчайший диапазон генерируемых звуков. 8) 10 '"Перевернутые" звуки. Выбирается другая форма пакета, при кото рой амплитуда медленно растет, а затем резко падает. Используются все три звуковых канала, причем частота одного из них слегка "расст роена". 20 R=RND(-TIME) 30 FOR I=0 TO 13:READ A:SOUND I,A:NEXT I 60 FOR I=1 TO 1000:NEXT 70 X=RND(1)*250 80 IF X<30 THEN 70 90 Y=RND(1)*10+1 100 SOUND 0,X:SOUND 1,Y:SOUND 2,X:SOUND 3,Y 120 SOUND 4,X+5:SOUND 5,Y:SOUND 13,13 140 GOTO 60 150 DATA 62,2,60,2,60,2,0,56,16,16,16,120,30,13 9) звуки барабана можно имитировать, создавая шумовой эффект с помощью "скачкообразного" пакета. Для имитации ударов турецкого барабана использу- ется тот же пакет, но на этот раз модулируется не шум, а звуковой тон. В зависимости от нажатой клавиши программа выдает то или иное звучание. Ре- гистр 7 позволяет выделить получаемый звук. 10 'Звуки б а р а б а н а 20 SCREEN 0,0,0 30 FOR I=0 TO 12:READ S:SOUND I,S:NEXT I 70 PRINT "Нажмите 'Б' для барабана" 80 PRINT "Нажмите 'Т' для турецкого барабана" 90 A$=INPUT$(1) 100 IF A$="Т" OR A$="т" THEN SOUND 7,&B00111000:SOUND 13,1 110 IF A$="Б" OR A$="б" THEN SOUND 7,&B00000111:SOUND 13,1 120 GOTO 90 130 DATA 140,7,140,7,140,7,15,255,16,16,16,190,7 10) программа воспроизводит бой часов. Звук генерируется с помощью набо- ра трех частот, настроенных с некоторым рассогласованием. "Скачкообразный" пакет создает впечатление удара в колокол, а затухание звука достигается за счет длинного модуляционного цикла. При изменении частоты тона можно добиться звучания, напоминающего колокольный звон, звучание треугольника (музыкальный инструмент) или даже звук удара по металлической трубе. 10 'Б о й ч а с о в 20 ' Настройка звукогенератора 30 FOR I=0 TO 12:READ S:SOUND I,S:NEXT I 60 WIDTH 40:CLS:KEY OFF 70 PRINT "Часы бьют":PRINT 80 SOUND 7,56 90 FOR I=0 TO 12 100 SOUND 13,0 110 PRINT I; 120 FOR J=1 TO 1200:NEXT J 130 NEXT I 140 PRINT:PRINT 150 PRINT TAB(1);"12 часов":PRINT "и все отлично!" 160 END 170 DATA 229,0,97,0,115,0,0,63,16,16,16,190,120 11) "П а р о в о з" (автор программы студент 5 курса Никитин А.Н.) 10 SOUND 7,&B00000111:SOUND 6,20 20 FOR I=8 TO 15:SOUND 8,I:SOUND 9,I:SOUND 10,I:GOSUB 80:FOR L=1 TO 50:NEXT:NEXT 30 FOR I=6 TO 13:READ A:SOUNDI,A:NEXT 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:NEX T:READ A:SOUND 11,A:SOUND 12,M:NEXT:NEXT 60 SOUND 7,&B00001100:SOUND 0,78:SOUND 1,6:SOUND 2,78:SOUND 3,6:SOU ND 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 80 SOUND 0,156:SOUND 1,12:SOUND 2,156:SOUND 3,12:SOUND 4,115:SOUND 5,9:RETURN Итак, оператор SOUND представляет возможность программам,написанным на языке MSX-BASIC, получать звуки, дополнительные к тем, которые воспроизво- дятся с помощью оператора PLAY. И наконец, о"...двух ролях,которые могут играть компьютерные программы. В первой роли программа вычисляет то, что она вычисляет,и ничего более.Во второй роли программа снабжается одной-двумя звуковыми инструкциями по со- седству с каждым внутренним циклом,внешним циклом и условной конструкцией (оператор IF).Во втором случае программа как бы поет песню о задаче, кото- рую решает.Тот,кто часто слушает свою излюбленную программу (будь она раз- влекательной или производственной),через некоторое время научится чувство- вать по звуку, как она работает. Нет сомнений в том, что некоторые ошибки в новых версиях программы можно будеть выявить на слух" [19]. VI.4. П р и м е р ы м у з ы к а л ь н ы х п р о г р а м м Отметим, что во всех примерах программ, приведенных в данном разделе, рекомендуется перед запуском программы выполнить команду BEEP. Последняя инициализирует звуковую микросхему,устанавливая ее регистры по умолчанию в первоначальное состояние. 1. "И г р а в л о ш а д к и" (П.И.Чайковский) NEW Ok 10 PLAY"s10m1800t200o4l8f+gf+bbbo5c+dc+ddd","s10m2800o4l8t200ddddddb- b-b-aaa","s10m2800l8t200o3abag+g+g+gggf+f+f+" 20 PLAY"v10s1m2800o4l8f+gf+bbbo5c+dc+ddd","v11s1m2800o4l8ddddddb-b-b- aaa","s1m2800l8o3abag+g+g+gggf+f+f+" 30 PLAY"V12o5f+gf+gggd+ed+eeec+dc+dddo4bo5c+o4baaa","V12o5e-e-e-dddcc co4bbbbbbaaag+g+g+ddd","sm2800o4ccco3bbbaaag+g+g+gggf+f+f+eeef+f+f+" 40 PLAY"v13o5f+gf+gggd+ed+eeec+dc+dddo4bo5c+o4baaa","v13o5e-e-e-dddcc co4bbbbbbaaag+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+o4b bbbbb","m3000o4f+f+f+o3bbba+a+a+bbbo4aaabbbbbbbbbbbbeeed+d+d+","m3000 o4c+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-dd d","o3gggg+g+g+aaaeeeeeeaaag+g+g+gggf+f+f+aaag+g+g+gggf+f+f+o4ccco3bb b" 70 PLAY"v13o5d+ed+eeec+dc+dddo4bo5c+o4baaaf+gf+gggd+ed+eeeo3bo4c+o3bo 4dddag+adddf+gf+ggg","v13o5ccco4bbbb-b-b-aaag+g+g+ddde-e-dddccco3bbbr 8br8aaao4c+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" 2. "Л е з г и н к а" (Грузинский народный танец) NEW Ok 10 A$="T180L4O4":B$="T180L4O4":C$="T180L4O4":PLAY A$,B$,C$ 20 A$="M35000S1":B$="M3500S1":C$="M3000S1":PLAY A$,B$,C$ 30 A$="R8O5L8E4FGA16G16FED4G":B$="O4L4CECEDO5D":C$="O4L4R4GR4GR4O4B" 40 PLAY A$,B$,C$ 50 A$="R8O5L8D4EFG16F16EDE4C4":B$="O3L4BO4GDGO4CG":C$="O4L4R4BR4BR4E" 60 PLAY A$,B$,C$ 70 A$="R8O5L8E4FGA16G16FED4G":B$="O4L4CECEDO5D":C$="O4L4R4GR4GR4O4B" 80 PLAY A$,B$,C$ 90 A$="R8O5L8D4EFG16F16EDE4E4":B$="O3L4BO4GDGO4Cb":C$="O4L4R4BR4BR4g+" 100 PLAY A$,B$,C$ 110 'Вторая часть 120 A$="O4L8R8A4O5CEF16E16DCO4B4O5E4":B$="O3L4AO4CO3AO4CO3BO4B" 130 C$="O4L4R4ER4ER4G+":PLAY A$,B$,C$ 140 A$="O4L8R8B4O5CDE16D16CO4BO5C4O4A4":B$="O3L4BEO4EG+O3AO5C" 150 C$="O4L4R4G+R4BR4O4E":PLAY A$,B$,C$ 160 A$="O4L8R8A4O5CEF16E16DCO4B4O5E4":B$="O3L4AO4CO3AO4CO3BO4B" 170 C$="O4L4R4ER4ER4G+":PLAY A$,B$,C$ 180 IF K=1 THEN 220 190 A$="O4L8R8B4O5CDE16D16CO4BAR8O5D4":B$="O3L4BEO4EG+O3AO4B" 200 C$="O4L4R4G+R4BR4O4g4":PLAY A$,B$,C$ 210 IF K=0 THEN K=1:GOTO 10 220 A$="O4L8R8B4O5CDE16D16CO4BAR8O5e4":B$="O3L4BEO4EG+O3AO4C" 230 C$="O4L4R4G+R4BR4O4a4":PLAY A$,B$,C$:END 3. "М е н у э т из с о н а т ы 13" (Йозеф Гайдн) NEW Ok 2 FOR I=1 TO 2 3 PLAY"sm15000l8t180o4a4a4a4a2o5dc+","s1m15000l8t180o4f+4f+4f+4f+4f+4 f+4","s1m15000l8t180o4d4d4d4d4d4d4" 4 PLAY"o5c+o4bbo5ggo4bbaa4.o5a","l4o4ggggf+","l4o4ddddd" 5 PLAY"o5agg4.f+","l8ago5d4c+4","l8ago4b4a4" 6 PLAY"o5f+ee4.d","f+eo4b4a4","f+eo4g4f+4" 7 PLAY"o5c+eeggf+","c+eo4c+4d4","o5c+eeged" 8 PLAY"o5e2","o5c+2","o4a4e4o3a4" 9 NEXT 10 FOR I=1 TO 2 11 PLAY"o4ao5c+c+4.o4aao5c+eggf+","a4o4g4g4e4c+4d4" 12 PLAY"o5f+ee4.g","f+4o4b4b4","f+4o4g4g4" 13 PLAY"f+ef+4.gf+eebbdc+2r4","f+4b4b4f+4b4b4a4e4o3a4o4","f+4g4g4f+4g 4g+4" 14 NEXT 15 PLAY"l8o4a4a4a4a2o5sm5000dc+","l8o4f+4f+4f+4f+4f+4sm5000f+4","l8o4 d4d4d4d4d4sm5000d4" 16 PLAY"o5c+o4bbo5ggo4bbasm15000a4.o5a","l4o4ggggsm15000f+","l4o4dddd sm15000d" 17 PLAY"sm8000o5agg4.f+","o4ago5d4c+4","o4agb4a4" 18 PLAY"o5f+ee4.d","o4f+eb4a4","f+eg4f+4" 19 PLAY"o5dbb4.aagg4.f+","o4dbg4f+4age4d4" 20 PLAY"sm2000o5f+eeddc+d1","v15o4g4f+4e4sm2000d4o3a4o4d2","v15o3a4a4 a4o4" 4. "И т а л ь я н с к а я п е с е н к а" (П.И.Чайковский) NEW Ok 20 GOSUB 370:GOSUB 120 30 GOSUB 40:END 40 A$="M5000S11":B$="M5000S1":C$="M5000S1" 70 PLAY A$,B$,C$ 80 A$="T150L4O4":B$="T150L4O4":C$="T150L4O4" 110 PLAY A$,B$,C$ 120 A$="R8L8F+GAB.F#16AF+g":B$="O3L8DF+f+af+f+c+aa" 125 C$="O3L8R8aar8aaR8ee" 130 PLAY A$,B$,C$ 140 A$="L8O4E4R8R8gabO5D.c+16":B$="O3L8AEEc+EEAee" 145 C$="O3L8R8c+c+r8c+c+R8c+c+" 150 PLAY A$,B$,C$ 160 A$="O4L8BO5c+O4aa4R8R8f+g":B$="O3L8Df+f+Af+f+Df+f+" 165 C$="O3L8R8AAR8AAR8AA" 170 PLAY A$,B$,C$ 180 A$="O4L8AB.f+16Af+GE4R8R8GA":B$="O3L8Af+f+c+c+c+Ac+c+c+c+c+" 185 C$="O3L8R8AAR8AAR8AAR8AA" 190 PLAY A$,B$,C$ 200 A$="O4L8BO5c+.O4A16O5D4R8D4R8":B$="O3L8Ac+c+Df+f+af+f+" 215 C$="O3L8R8EER8AAR8AA" 210 PLAY A$,B$,C$ 220 A$="O4L8R8R8f+B4AAGEC+R8R8R8EO5c+4O4B" 223 B$="O3L8Df+f+Af+f+c+c+c+Ac+c+c+c+c+Ac+c+" 226 C$="O3L8R8AAR8AAR8EER8EER8EER8EE" 230 PLAY A$,B$,C$ 240 A$="O4L8BAf+D4R8DR8A":B$="O3L8Df+f+Af+f+Df+f+" 245 C$="O3L8R8AAR8AAR8AA" 250 PLAY A$,B$,C$ 260 A$="O5L16Dc+edc+O4Bbag+abaL8O5c+4R8cO4Ba" 265 B$="O3L8Af+f+c+c+c+Ac+c+c+c+c+":C$="O3L8R8AAR8EER8EER8EE" 270 PLAY A$,B$,C$ 280 A$="O4L8gf+ebaf+D4R8":B$="O3L8Ac+c+Df+f+Af+f+" 285 C$="O3L8R8EER8AAR8AA" 290 PLAY A$,B$,C$ 300 A$="O4L8R8R8f+B4aagec+4R8":B$="O3L8Df+f+Af+f+c+c+c+Ac+c+" 305 C$="O3L8R8AAR8AAR8EER8EE" 310 PLAY A$,B$,C$ 320 A$="O4L8R8R8EO5c+4O4BBAf+D4R8DR8AL16O5Dc+edc+O4B" 323 B$="O3L8Ac+c+ac+c+df+f+af+f+df+f+f+f+f+" 326 C$="O3L8R8EER8EER8AAR8AAR8AAR8AA" 330 PLAY A$,B$,C$ 340 A$="O4L16a+bO5c+O4bgf+L8E4R8R8d+egO3BO4c+E4R8R4R8D2" 343 B$="O3L8Gbbgbbac+c+Ac+c+Dc+c+Dc+c+A2" 346 C$="O3L8R8DDR8DDR8EER8EER8EER8EEf+2" 350 PLAY A$,B$,C$ 360 RETURN 370 A$="M5000S3":B$="M1000S3":C$="M1000S3" 400 PLAY A$,B$,C$ 410 A$="T150L4O4":B$="T150L4O4":C$="T150L4O4" 440 PLAY A$,B$,C$ 450 RETURN 5. Перейдем к сочинению "ф у н к ц и о н а л ь н о й" музыки [22]. Будем создавать мелодию в до-мажор,что соответствует игре только по бе- лым клавишам пианино (все ноты без диезов и бемолей). Более того, исполь- зуем только 9 клавиш: ┌─────────────┬────────────────────────────────────┐ │ н о т а │ E F G A B C D E F │ │ о к т а в а │ O4 O4 O4 O4 O4 O5 O5 O5 O5 │ └─────────────┴────────────────────────────────────┘ По желанию легко расширить диапазон, в котором звучит мелодия.Кроме то- го, можно выбрать другую тональность, указав на нотах знаки "-" и "+". Используем две функции: одну для построения мелодии, другую для созда- ния ритма. Обе функции зависят от двух переменных К и Х. Вычисляется значение функции FNF, определяется остаток (положительный) от деления на 9. Полученное число, принадлежащее отрезку [0,8], рассматри- вается как индекс массива N, что позволяет выбрать ноту. Значение функции FNR используется как коэффициент повторения данной но- ты. Например, если это значение равно 2, то очередная нота подклеивается к переменной М$, содержащей мелодию, два раза (строки 210-230). Когда построение мелодии закончено, она исполняется (строка 250). Способ "вытягивания" нот в линию поясним рисунком. K=0 K=1 K=2 K=3 │◀─────────────▶│◀─────────────▶│◀─────────────▶│◀──────────────▶│ ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬────┐ │ ──────────────────────────────────────────────────────────────▶│ └───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴────┘ X= 0 1 2 3 0 1 2 3 0 1 2 3 0 1 2 3 Замысловатая функция FNF, конечно подобрана. Испробуйте более простые функции. Если включить в определение функций стандартную функцию RND, ком- пьютер начнет "сочинять". NEW Ok 10 DATA o4e,o4f,o4g,o4a,o4b,o5c,o5d,o5e,o5f 20 DIM N$(8) 30 FOR I=0 TO 8 40 READ N$(I) 50 NEXT I 60 DEF FNF1(X)=(X+4)^2-10 70 DEF FNF2(X)=(2*X+1)^2+(X+1)*(1+(-1)^(X+1))/4+1 80 DEF FNF3(X)=3*((X+2)^2+X+2)/2-2 90 DEF FNF4(X)=5*(X^2+SGN(X)+1) 100 DEF FNS1(K)=1-K*(3-K) 110 DEF FNS2(K)=1-2*INT(K/2) 120 DEF FNS3(K)=(-1)^K 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 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$="" 170 FOR K=0 TO 3 180 FOR X=0 TO 3 190 I=FNF(X,K)MOD9:D=FNR(X,K) 200 IF I<0 THEN I=I+9 210 FOR J=1 TO D 220 M$=M$+N$(I) 230 NEXT J 240 NEXT X,K 250 PLAY M$ 6. Программа "М у з ы к а л ь н ы й редактор"[22] служит для перевода нотной записи в буквенную. После запуска программы на экране рисуется нот- ный стан. По нему можно перемещать указатель. Установка ноты производится нажатием на клавишу управления курсором "──▶". После установки исправить ноту н е л ь з я (это недостаток редактора, однако для его устранения нужно значительно усложнить программу). До установки можно перемещать ука- затель по вертикали. Название ноты будет автоматически формироваться по положению на нотном стане. Можно придать ноте бемоль (знак "-") или диез (знак "+"), а также длительность, задаваемую одной цифрой (1 - целая, 2 - половинная, 4 - четверть, 8 - восьмая). Если длительность не указана, то подразумевается четверть. Порядок ввода фиксирован:после длительности вво- дить знаки "-" и "+" нельзя. Пока клавиша "──▶" не нажата, можно сбросить длительность и знаки "-" и "+", сдвинув указатель по вертикали. Программа заканчивает свою работу после нажатия на клавишу "RETURN", музыка исполняется, а на экран выдает- ся буквенная запись мелодии. В массиве N$ сформированы тройки символов:октава и нота от 03С до 05 В (строки 40-120). Нотный стан рисуется в строках 160-180. Мелодия накапли- вается в переменной М$. Запись конкретной ноты создается в переменной W$. Для обеспечения достаточного объема памяти под строки использован опера- тор CLEAR. В строке 210 в переменную F$ поступает символ нажатой клавиши. Если бы- ли нажаты вертикальные стрелки, то переменной W$ присваивается начальное значение, задающее ноту (строки 230-240). При установке знаков "-","+" и длительности используются признаки Р1 и Р2. Если Р1=0, знаки "-" и "+" еще не ставились, и их можно ставить (строка 250). Если Р2=0, длительность еще не указывалась (строка 260). NEW Ok 10 '∗∗∗∗ Подготовка ∗∗∗∗ 20 CLEAR 600 30 OPEN "GRP:" AS #1 40 DATA C,D,E,F,G,A,B 50 DIM N$(20) 60 FOR I=0 TO 2 70 FOR J=0 TO 6 80 READ A$ 90 N$(I*7+J)="O"+STR$(I+3)+A$ 100 NEXT J 110 RESTORE 120 NEXT I 130 SCREEN 2,0 140 SPRITE$(0)=CHR$(192)+CHR$(192) 150 M$="":X=S:Y=118:K=7:W$=N$(K) 160 FOR I=0 TO 4 170 LINE(0,104-I*16)-(255,104-I*16) 180 NEXT I 190 PUT SPRITE 0,(X,Y),,0 200 '∗∗∗∗ Перемещение курсора ∗∗∗∗ 210 F$=INPUT$(1) 220 IF X>250 GOTO 370 230 IFASC(F$)=30ANDK<20THENY=Y-8:K=K+1:W$=N$(K):P1=0:P2=0:GOTO 190 240 IFASC(F$)=31ANDK>0THENY=Y+8:K=K-1:P2=0:W$=N$(K):P1=0:GOTO 190 250 IF(F$="+"ORF$="-")ANDP1=0ANDP2=0 THEN W$=W$+F$:P1=1:GOTO 210 260 IFVAL(F$)<>0ANDP2=0THENW$=W$+F$:P2=1:GOTO 210 270 IF ASC(F$)=28 THEN 290 280 IF ASC(F$)=13 GOTO 370 ELSE 210 290 '∗∗∗∗ Установка ноты ∗∗∗∗ 300 PSET(X,Y-4),4 310 PRINT #1,"♪" 320 P1=0:P2=0 330 X=X+8:M$=M$+W$+" " 340 PLAY W$:W$=N$(K) 350 GOTO 190 360 '∗∗∗∗ Окончание работы ∗∗∗∗ 370 PLAY M$ 380 SCREEN 0 390 PRINT M$ 400 END ...в заключение данной главы приведем весьма полезную таблицу: ┌────────┬─────────────────────────────────────────────────┐ │ Октава │ Название ноты и ее номер в команде N │ ├────────┼─────────────────────────────────────────────────┤ │ 1 │ C C# D D# E F F# G G# A A# B │ │ │ ─ 1 2 3 4 5 6 7 8 9 10 11 │ ├────────┼─────────────────────────────────────────────────┤ │ 2 │ C C# D D# E F F# G G# A A# B │ │ │ 12 13 14 15 16 17 18 19 20 21 22 23 │ ├────────┼─────────────────────────────────────────────────┤ │ 3 │ C C# D D# E F F# G G# A A# B │ │ │ 24 25 26 27 28 29 30 31 32 33 34 35 │ ├────────┼─────────────────────────────────────────────────┤ │ 4 │ C C# D D# E F F# G G# A A# B │ │ │ 36 37 38 39 40 41 42 43 44 45 46 47 │ ├────────┼─────────────────────────────────────────────────┤ │ 5 │ C C# D D# E F F# G G# A A# B │ │ │ 48 49 50 51 52 53 54 55 56 57 58 59 │ ├────────┼─────────────────────────────────────────────────┤ │ 6 │ C C# D D# E F F# G G# A A# B │ │ │ 60 61 62 63 64 65 66 67 68 69 70 71 │ ├────────┼─────────────────────────────────────────────────┤ │ 7 │ C C# D D# E F F# G G# A A# B │ │ │ 72 73 74 75 76 77 78 79 80 81 82 83 │ ├────────┼─────────────────────────────────────────────────┤ │ 8 │ C C# D D# E F F# G G# A A# B │ │ │ 84 85 86 87 88 89 90 91 92 93 94 95 │ ├────────┼─────────────────────────────────────────────────┤ │ 9 │ C │ │ │ 96 │ └────────┴─────────────────────────────────────────────────┘