Scratch做出跳跃的音符
2019-09-10
Scratch作為图形化的编程工具,除了制作故事情节的程序,还可以利用键盘事件模块触发相应音符弹奏,通过更改演奏乐器,调整演奏速度与音量来完成自定义音乐,今天我们来学习一下。
学习目标
1.学习如何控制音频文件的播放
2.掌握键盘事件,能够通过按键播放声音
3.了解拓展积木的选择方法
4.理解音量与演奏速度
Scratch中每个角色的音频文件是相互独立的,我们需要将音频上传到需要的角色中去,这里我们需要先选择“电子琴”角色,再在声音标签中上传音频。
可以看到电子琴角色中已经准备好了八个音符的音频(图1),不需要我们再次上传,如果需要其他音频,上传方式类似于上传角色。
上传好音频后,我们在声音模块中可以看到“播放声音”程序块,将其拖往程序区预备(图2)。
在之前的学习中,我们使用了“当绿旗被点击”执行程序,相应的,事件模块中的“当按下空格键”表示空格键被按下时,执行之后的程序,其中空格键可以换成其他任何键。这里我们将两个程序块组合,当按下1键,播放声音“哆”,以此类推,程序如图3所示:
其中的 “C”、“D”、“E”、“F”、“G”、“A”、“B”、“C2”分别代表“哆瑞咪发嗦啦西”以及高音“哆”。完成后,点击相应按钮即可发出相应声音。
除了声音组常规积木外,Scratch3.0还提供了音乐模块,音乐模块属于额外附加模块,通过点击左下角的拓展按钮添加,如图4:
四、音乐模块的添加与说明
点击拓展按钮进入拓展界面,选择音乐模块即可完成添加(图5),音乐模块有七个专属程序块。
其中“小军鼓”和“钢琴”旁边的三角形按钮(图6)可以帮助我们更换乐器。
“休止0.25拍”表示弹奏间隔0.25拍(“拍”是音乐演奏中的时间单位)。
点击“演奏音符60 0.25拍”中的“60”可以更改演奏的音符,计算机用数字指代具体音符。
音乐模块的最后三个程序块都是关于演奏速度的程序块,其中“将演奏速度设定或增加”是用来修改演奏速度的,最后的“演奏速度”是用来记录当前演奏速度的变量,可以通过勾选前面的小方格来显示或隐藏变量“演奏速度”(图7)。
通过音乐模块中的“将乐器设为……”可以调整演奏的乐器,通过“演奏音符60 0.25拍”可以调整演奏的音符,通过在音乐模块中改变演奏速度,在声音模块中改变音量,我们可以自行编写一整首曲子,通过按下某个键触发命令即可播放,效果如图8:
其中的音量设定,休止设定、演奏速度设定、乐器设定可根据需要放置,也可同时弹奏多种乐器实现合奏效果,程序如图9:
我们这里提供一份简谱,通过转化为编程语言,即可在程序中运行播放(图10)。
Python 是机器学习最广泛采用的编程语言,它最重要的优势在于编程的易用性。如果读者对基本的 Python 语法已经有一些了解,那么这篇文章可能会给你一些启发。本文简单概括了 10 段代码,它们都是平常非常实用的技巧哦。
可以检查给定列表是不是存在重复元素,它会使用 set() 函数来移除所有重复元素。
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
检查两个字符串的组成元素是不是一样的。
from collections import Counter
def anagram(first, second):
return Counter(first) == Counter(second)
anagram("abcd3", "3acdb") # True
下面的代码块可以检查变量 variable 所占用的内存。
import sys
variable = 30
print(sys.getsizeof(variable)) # 24
以下方法将统计字符串中的元音 ('a','e', 'i','o', 'u') 的个数,它是通过正则表达式做的。
import re
def count_vowels(str):
return len(len(re.findall(r
'[aeiou]', str, re.IGNORECASE)))
count_vowels('foobar') # 3
count_vowels('gym') # 0
该代码块不需要循环语句就能打印 N 次字符串。
n = 2;
s ="Programming";
print(s * n);
# ProgrammingProgramming
以下代码块会使用 title() 方法,从而大写字符串中每一个单词的首字母。
s = "programming is awesome"
print(s.title())
# Programming Is Awesome
给定具体的大小,定义一个函数以按照这个大小切割列表。
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]
这个方法可以将布尔型的值去掉,例如(False,None,0,“”),它使用 filter() 函数。
def compact(lst):
return list(filter(bool, lst))
compact([0, 1, False, 2, '', 3, 'a','s', 34])
# [ 1, 2, 3, 'a','s', 34 ]
如下代码段可以将打包好的成对列表解开成两组不同的元组。
array = [[a', 'b'], ['c', 'd'], ['e', 'f']]
transposed = zip(*array)
print(transposed)
# [('a', 'c', 'e'), ('b','d', 'f')]
我们可以在一行代码中使用不同的运算符对比多个不同的元素。
a = 3
print( 2 < a < 8) # True
print(1 == a < 2) # False