Scratch作為圖形化的編程工具,除了制作故事情節(jié)的程序,還可以利用鍵盤事件模塊觸發(fā)相應(yīng)音符彈奏,通過(guò)更改演奏樂(lè)器,調(diào)整演奏速度與音量來(lái)完成自定義音樂(lè),今天我們來(lái)學(xué)習(xí)一下。
學(xué)習(xí)目標(biāo)
1.學(xué)習(xí)如何控制音頻文件的播放
2.掌握鍵盤事件,能夠通過(guò)按鍵播放聲音
3.了解拓展積木的選擇方法
4.理解音量與演奏速度
Scratch中每個(gè)角色的音頻文件是相互獨(dú)立的,我們需要將音頻上傳到需要的角色中去,這里我們需要先選擇“電子琴”角色,再在聲音標(biāo)簽中上傳音頻。
可以看到電子琴角色中已經(jīng)準(zhǔn)備好了八個(gè)音符的音頻(圖1),不需要我們?cè)俅紊蟼?,如果需要其他音頻,上傳方式類似于上傳角色。
上傳好音頻后,我們?cè)诼曇裟K中可以看到“播放聲音”程序塊,將其拖往程序區(qū)預(yù)備(圖2)。
在之前的學(xué)習(xí)中,我們使用了“當(dāng)綠旗被點(diǎn)擊”執(zhí)行程序,相應(yīng)的,事件模塊中的“當(dāng)按下空格鍵”表示空格鍵被按下時(shí),執(zhí)行之后的程序,其中空格鍵可以換成其他任何鍵。這里我們將兩個(gè)程序塊組合,當(dāng)按下1鍵,播放聲音“哆”,以此類推,程序如圖3所示:
其中的 “C”、“D”、“E”、“F”、“G”、“A”、“B”、“C2”分別代表“哆瑞咪發(fā)嗦啦西”以及高音“哆”。完成后,點(diǎn)擊相應(yīng)按鈕即可發(fā)出相應(yīng)聲音。
除了聲音組常規(guī)積木外,Scratch3.0還提供了音樂(lè)模塊,音樂(lè)模塊屬于額外附加模塊,通過(guò)點(diǎn)擊左下角的拓展按鈕添加,如圖4:
點(diǎn)擊拓展按鈕進(jìn)入拓展界面,選擇音樂(lè)模塊即可完成添加(圖5),音樂(lè)模塊有七個(gè)專屬程序塊。
其中“小軍鼓”和“鋼琴”旁邊的三角形按鈕(圖6)可以幫助我們更換樂(lè)器。
“休止0.25拍”表示彈奏間隔0.25拍(“拍”是音樂(lè)演奏中的時(shí)間單位)。
點(diǎn)擊“演奏音符60? 0.25拍”中的“60”可以更改演奏的音符,計(jì)算機(jī)用數(shù)字指代具體音符。
音樂(lè)模塊的最后三個(gè)程序塊都是關(guān)于演奏速度的程序塊,其中“將演奏速度設(shè)定或增加”是用來(lái)修改演奏速度的,最后的“演奏速度”是用來(lái)記錄當(dāng)前演奏速度的變量,可以通過(guò)勾選前面的小方格來(lái)顯示或隱藏變量“演奏速度”(圖7)。
通過(guò)音樂(lè)模塊中的“將樂(lè)器設(shè)為……”可以調(diào)整演奏的樂(lè)器,通過(guò)“演奏音符60? 0.25拍”可以調(diào)整演奏的音符,通過(guò)在音樂(lè)模塊中改變演奏速度,在聲音模塊中改變音量,我們可以自行編寫一整首曲子,通過(guò)按下某個(gè)鍵觸發(fā)命令即可播放,效果如圖8:
其中的音量設(shè)定,休止設(shè)定、演奏速度設(shè)定、樂(lè)器設(shè)定可根據(jù)需要放置,也可同時(shí)彈奏多種樂(lè)器實(shí)現(xiàn)合奏效果,程序如圖9:
我們這里提供一份簡(jiǎn)譜,通過(guò)轉(zhuǎn)化為編程語(yǔ)言,即可在程序中運(yùn)行播放(圖10)。
Python 是機(jī)器學(xué)習(xí)最廣泛采用的編程語(yǔ)言,它最重要的優(yōu)勢(shì)在于編程的易用性。如果讀者對(duì)基本的 Python 語(yǔ)法已經(jīng)有一些了解,那么這篇文章可能會(huì)給你一些啟發(fā)。本文簡(jiǎn)單概括了 10 段代碼,它們都是平常非常實(shí)用的技巧哦。
可以檢查給定列表是不是存在重復(fù)元素,它會(huì)使用 set() 函數(shù)來(lái)移除所有重復(fù)元素。
def all_unique(lst):
return len(lst) == len(set(lst))
x = [1,1,2,2,3,2,3,4,5,6]
y = [1,2,3,4,5]
all_unique(x) # False
all_unique(y) # True
檢查兩個(gè)字符串的組成元素是不是一樣的。
from collections import Counter
def anagram(first, second):
return Counter(first) == Counter(second)
anagram("abcd3", "3acdb") # True
下面的代碼塊可以檢查變量 variable 所占用的內(nèi)存。
import sys
variable = 30
print(sys.getsizeof(variable)) # 24
以下方法將統(tǒng)計(jì)字符串中的元音 ('a','e', 'i','o', 'u') 的個(gè)數(shù),它是通過(guò)正則表達(dá)式做的。
import re
def count_vowels(str):
return len(len(re.findall(r
'[aeiou]', str, re.IGNORECASE)))
count_vowels('foobar') # 3
count_vowels('gym') # 0
該代碼塊不需要循環(huán)語(yǔ)句就能打印 N 次字符串。
n = 2;
s ="Programming";
print(s * n);
# ProgrammingProgramming
以下代碼塊會(huì)使用 title() 方法,從而大寫字符串中每一個(gè)單詞的首字母。
s = "programming is awesome"
print(s.title())
# Programming Is Awesome
給定具體的大小,定義一個(gè)函數(shù)以按照這個(gè)大小切割列表。
from math import ceil
def chunk(lst, size):
return list(
map(lambda x: lst[x *? size:x *? size + size],
list(range(0, ceil(len(lst) / size)))))
chunk([1,2,3,4,5],2)
# [[1,2],[3,4],5]
這個(gè)方法可以將布爾型的值去掉,例如(False,None,0,“”),它使用 filter() 函數(shù)。
def compact(lst):
return list(filter(bool, lst))
compact([0, 1, False, 2, '', 3, 'a','s', 34])
# [ 1, 2, 3, 'a','s', 34 ]
如下代碼段可以將打包好的成對(duì)列表解開成兩組不同的元組。
array = [[a', 'b'], ['c', 'd'], ['e', 'f']]
transposed = zip(*array)
print(transposed)
# [('a', 'c', 'e'), ('b','d', 'f')]
我們可以在一行代碼中使用不同的運(yùn)算符對(duì)比多個(gè)不同的元素。
a = 3
print( 2 < a < 8) # True
print(1 == a < 2) # False