scratch是一个非常小巧的青少年编程工具,自带程序编写语句,积木式语句非常直观、易用,可创作数学、科学、音乐、绘画等方面作品。本文用scratch“演奏”一首大家非常熟悉的《天空之城》,并向大家介绍一些基本乐理知识,以及scratch中消息、链表的使用。

目录

1、音乐基础

1.1 认识音符

1.1.1音符

1.1.2 音区

1.1.3 音变

1.1.4 scratch音符编码

1.2 认识节拍

1.2.1 音符时值与节拍

1.2.2 附点音符

1.2.3 减时线与增时线

1.2.4 连音线

1.2.5 scratch节拍编码

2、scratch与音乐

2.1 scratch声音语句

2.2 程序分析

2.3 程序设计

2.3.1 链表

2.3.2 消息

2.4 程序主体

2.5 仅仅是《天空之城》?

3、总结


我们一起来“搭”一个音乐演奏程序:

scratch:《天空之城》

1、音乐基础

我们知道,音乐有四个基本构成要素:音的高低音的长短、音的力度(强度)和音质(音色)。因此,将一首乐曲用程序“唱出来”,得从这四个方面分析。就教学目标而言,我们将重点分析音的高低和音的长短。

1.1 认识音符

1.1.1音符

“音”是音乐的“原子”,体现为“音符”。音符是表达高低音的一种符号,目前普遍用到的音符一共有七个,(音名)分别为C、D、E、F、G、A、B,简谱中与之对应的是1、2、3、4、5、6、7,读作“do、ruai、mi、fa、sou、la、xi(斗、瑞、咪、发、搜、拉、西)”。

1.1.2 音区

如图,在钢琴琴键上,“音”从左至右依次增高。

在上图中可以看到,一个音符会多次出现,我们把相邻的同名音符之间的间距称为一个8。例如“1”和“1(·)”相差一个8度,即“1(·)”比“1”高8度。一个8度内的音符构成一个音组,音组与音组可以形成音区我们把1、2、3、4、5、6、7所在音组称为中央音区,中央音区左边(下边有点)为低音区,右边(上边带点)为高音区。所有音区一起形成一个音域

下面这个程序演示相邻的低、中、高音区。

音乐基础知识:音符简介

注意,为使演示效果最佳,程序已将三音区的同名音符作叠加处理,请仔细辨听声音高低。

1.1.3 音变

在钢琴琴键图中,一个音区既有白键也有黑键。那么相邻的白键或相邻的白、黑键是什么关系呢?

半音或全音关系。

以中音区为例,在“1”和“2”之间有一个黑键,键名为“#1 b2”,表示该音比“1”高半音,比“2”低半音。

一个白键和一个相邻的黑键之间相差“一个半音”(反之亦然),一个白键和另一个(看起来相邻的)白键相差“一个全音”。

还是以中音区为例,只有“3”“4”之间是半音,其他两两音符间都是全音。实际上还有一个特殊的跨音区半音:“7”和高一个8度的“1”。

在原音的基础上,我们可以变音,将标准音升高或降低。

1.1.4 scratch音符编码

在scratch眼中,音符如下面蓝色数字所示:

例如,对于简谱

可编码为:0 0 0 69 71 72 71 72 76 71 64 69 67 69 72 67 64

简谱中的“0”是休止符,表示“静默(不发音)”,一般表示占位,在scratch中同样用0表示。

那么如何处理变音?

仔细观察音符对应图,我们发现具有全音关系的两个音符(如“2”和“3”)对应的scratch音符值(62和64)相差2,而具有半音关系的两个音符(如“3”和“4”)对应的scratch音符值(64和65)相差1,而一个全音相当于两个半音,由此可知,半音对应1,升或降多少个半音,就加或减多少个1。

简谱:

编码:71 66 66 71 71 69 71。

1.2 认识节拍

演绎一首音乐时,需要表现的要素有很多。表达一个音符时,除了要表现音的高低之外,还要表现音的长短,这个时候就关系到一个重要概念,节拍。

1.2.1 音符时值与节拍

音符和该音符在演奏时呈现的时长结合在一起产生出不同时值类型音符,包括全音符、二分音符、四分音符、八分音符、十六分音符、三十二分音符等。如有下表:

“表示”下的音符“1”可为任意音符“x”,当“x”为“0”时得到各类音符对应的休止符。

音符时值指演绎一首乐曲时当前音符持续的时间。全音符定义音符时值的“基本单位”,其他音符时值在全音符基础上依次除以2得到,例如,一个全音符在时值上相当于二个二分音符时值。这样,不同时值类型音符间的关系就确定了。

在音符时值基础上形成节拍时值。一个节拍的时值是多少首先看拍号。上表拍号为4/4,表示以四分音符为一拍,一小节四拍。我们还可能遇到2/4、3/4、6/8这样的拍号,分别表示以四分音符为一拍,一小节2拍;以四分音符为一拍,一小节3拍;以八分音符为一拍,一小节六拍。总之,在拍号中,分母决定以哪个音符为一拍,分子决定一小节有多少拍。

一拍的时值是相对的,与节奏有关。当节奏为每分钟60拍时,一拍为一秒;当节奏为每分钟120拍时,一拍为半秒;当节奏为每分种240拍时,一拍为1/4秒,依此类推。当一拍时值确定后,根据拍号以及不同时值类型音符间的关系,音符时值就很容易确定了。例如,拍号1/8,节奏每分钟60拍,则一拍为1秒,一个四分音符为二拍二秒,一个二分音符为四拍四秒,全音符为八拍八秒。

音符和节拍时值不影响音符的表示。

1.2.2 附点音符

当音符右边出现一个小圆点“·”时,该音符叫附点音符。附点音符表示将时值延长至“·”前音符一半。例如,四分附点音符时值:1·=1+1,八分附点音符时值:1·=1+1

1.2.3 减时线与增时线

一个音符下边出现的横线叫减时线,一道减时线表示将该音符时值减少一半,可以有多道减时线,如

一个音符右边出现的横线叫增时线,一道增时线表示将该音符时值增加一拍(4/4),可以有多道增时线,如1 — — —。

1.2.4 连音线

如果符号“⌒”出现在同名音符上面则表示延音线,同一个音延续多个节拍,如下图“2”上的延音线。

如果符号“⌒”出现在多个音上面,则表示圆滑线,连接两个以上不同的音,要求多个音表现(唱、演奏)得连贯、圆滑,如上图第二个“⌒”所示。

1.2.5 scratch节拍编码

如图,

当拍号为4/4,节奏每分钟一百二十拍时,scratch节拍编码如下(单位:拍):

1 1 1 0.5 0.5 1.5 0.5 1 1 3 1 1.5 0.5 1 1 3 1

再比如,

拍号不变,节奏不变,scratch节拍编码如下(单位:拍):

1 0.5 1.5 1 1 0.5 2.5

下面是我选用的《天空之城》曲谱:

《天空之城》对应音符与节拍如下所示(拍号4/4,节奏120bpm,节拍单位:拍):

音符

节拍

0

69

71

72

71

72

76

71

64

69

67

69

72

67

64

65

64

65

72

64

72

72

71

66

66

71

71

69

71

72

71

72

76

71

64

69

67

69

72

67

64

65

72

71

72

74

76

72

72

71

69

71

68

69

72

74

76

74

76

79

74

67

67

72

71

72

76

76

69

71

72

71

72

74

72

67

67

77

76

74

72

76

76

81

81

79

79

76

74

72

72

74

72

74

79

76

76

81

81

79

79

76

74

72

72

74

72

74

71

69

69

71

72

71

72

76

71

64

69

67

69

72

67

64

65

72

71

72

74

76

72

72

71

69

71

68

69

3

0.5

0.5

1.5

0.5

1

1

3

1

1.5

0.5

1

1

3

1

1.5

0.5

1

1

3

0.5

0.5

1.5

0.5

1

1

3

0.5

0.5

1.5

0.5

1

1

3

1

1.5

0.5

1

1

3

1

1

0.5

1.5

1

1

0.5

2.5

0.5

0.5

1

1

1

3

0.5

0.5

1.5

0.5

1

1

3

0.5

0.5

1.5

0.5

1

1

4

0.5

0.5

1

0.0

0.5

1

1.5

0.5

2

1

1

1

1

3

1

1.5

0.5

1.5

0.5

0.5

0.5

2

1

1.5

0.5

1

1

3

1

1.5

0.5

1.5

0.5

0.5

0.5

2

1

1.5

0.5

1

1

3

0.5

0.5

1.5

0.5

1

1

3

1

1.5

0.5

1

1

3

1

1

0.5

1.5

1

1

0.5

2.5

0.5

0.5

1

1

1

8

2、scratch与音乐

2.1 scratch声音语句

scratch中声音语句相当简单:

在演奏《天空之城》的这个程序中,我们主要用到以下语句:

2.2 程序分析

scratch:《天空之城》

我们主要完成的任务有两个:一个是《天空之城》的演奏,另一个是显示且仅显示出当前演奏的音符。

第一个任务的核心是音符与节拍的确定与存放,我们将用到“链表”;

第二个任务的核心是当前音符显示/隐藏的通知与执行,我们将用到“消息”。

2.3 程序设计

2.3.1 链表

scratch中,链表可直接视为平常意义上的表格,但只能对它进行有限的一些操作。

程序中我们用到的主要操作如下所示(见主程序):

为能存放《天空之城》音符和节拍数据,我们要新建两个链表,名称分别为“音符”“节拍”,并设置为“适用于所有角色”:

然后,为这两个链表添加数据(一个接一个地添加,点击左下角加号“+”可增添一项):

2.3.2 消息

首先设置舞台背景:

由于舞台区域不大,这里将不同8度的音符集中在一起显示。为各音符添加“显示”角色:

音符对应的“显示”角色,如“1”对应的Sprite1,有多种添加方式,这里用的是“造型”设计。

我们要完成的任务二是“显示且仅显示出当前演奏的音符”,也即在弹奏一个音符前,让音符对应的“显示”角色显示,而在弹奏完成后,让其隐藏。这里将用到“消息”。

消息就像是信件,当我有事通知你时,就发一个消息给你。你接收到后执行即可。在scratch中,消息是一种事件,我们主要用到的消息语句如下所示:

消息要先建立再使用:

当新建好消息(以scratch音符编码表中每个音符编码为消息名各新建一个消息,再增设三个消息6668hide)后,我们要让“显示”角色们具备执行能力。

角色

操作脚本

Sprite1

Sprite2

Sprite3

Sprite4

Sprite5

Sprite6

Sprite7

2.4 程序主体

当舞台、角色、消息、链表、变量都已设置好,主体程序就非常简单。

简要分析如下:

当程序被某个事件(这里是点击绿旗图标)启动后,首先将各个“显示”角色隐藏并移动到指定位置,然后设定节奏(定快慢)、选择乐器(定音色),初始化当前音符与节拍所在序号为1。接着依次从“音符”和“节拍”表中取出音符和节拍数据进行弹奏。弹奏前通知当前音符对应的“显示”角色显示,弹奏过后通知其隐藏。

“选择”和“n”是两个变量,分别确定弹奏乐器和“音符”“节拍”表中的第几项。

就这样,动听且充满想象的《天空之城》完成啦。

2.5 仅仅是《天空之城》?

只要找到任意你想演奏的音乐简谱,然后得出音符和节拍编码并放入链表中,就可以演奏任意你喜欢的音乐。

3、总结

scratch是一个非常小巧、直观的青少年编程工具,在程序逻辑已定的情况下进行程序编写非常简单(“搭积木”)。

将一首歌曲的简谱变为scratch认识的音符和编码相对来说,既是一个乐理知识上的难点,也是一个操作上的难点(繁琐),需要一定的耐心去学去实际操作。

如何在舞台上显示当前音符?对于青少年而言,这个问题实际上是一个从01的问题,没有灵感一现的那一瞬间,在scratch提供的语句集中很难设计出解决方案。

在整个程序设计过程中,需要将音乐、舞台视觉设计、角色(包括操作)、事件、消息、数据结构、主体程序流程综合统筹到一起进行思考分析,非常益于解决问题能力的培养,以及创新思维、艺术素质的提升。

音乐相关的乐理,我们只学习到非常少的一部分,但可由此进入音乐世界,既可以编写更多演奏音乐的程序,也可以为各类乐器兴趣班的学习打基础。

【scratch音乐课】天空之城:音符与节拍、消息与链表相关推荐

  1. 单片机七阶音符_求单片机一些音乐的音符及节拍

    2014-12-07 回答 将51单片机的p1.2口连接到蜂鸣器的一个管脚上,另外一个管脚接地.若声音小,则添加一个三级管放大电路或直接串一个ul2003 /*-------------------- ...

  2. MIDI 文件格式 (转)

    MIDI 文件格式 (转)[@more@] MIDI 文件格式 MIDI 文件结构 Chunks MIDI 文件由 chunks 组成:XML:namespace prefix = o ns = &q ...

  3. Scratch精通之列表的使用

    列表使用不是很广泛,所以大家不是很熟悉.在Scratch里列表也叫链表,是变量的一种,但是是一组变量.通常用在同一类的变量组.当然也可以把变量组中的一个个变量拿出来定义成单独的变量,但是这样可能有大量 ...

  4. python蜂鸣器天空之城频率_如何把两个程序合在一起实现(小车超声波避障+蜂鸣器音乐《天空之城》)...

    小车超声波程序: ...... #include #include #define Sevro_moto_pwm     P2_7           //接舵机信号端输入PWM信号调节速度 #def ...

  5. 【五一创作】Scratch资料

    Scratch软件是免费的.免费的.免费的.任何需要花钱才能下载Scratch软件的全是骗子. 1.什么是Scratch Scratch是麻省理工学院的"终身幼儿园团队"开发的一种 ...

  6. 51单片机-播放天空之城

    #include   //包含51单片机寄存器定义的头文件 sbit sound=P3^7;    //将sound位定义为P3.7 unsigned int C;     //储存定时器的定时常数 ...

  7. 【五一创作】Scratch资料袋

    Scratch软件是免费的.免费的.免费的.任何需要花钱才能下载Scratch软件的全是骗子. 1.什么是Scratch Scratch是麻省理工学院的"终身幼儿园团队"开发的一种 ...

  8. 32蜂鸣器天空之城代码_stm32版蜂鸣器播放爱若琉璃

    在小哈公众号上,公众号:嵌入式从0到1,小哈用鸿蒙平台做了个播放爱若琉璃歌曲的文章,写的非常详细,视频做的也非常好,伙伴们可以去看看,哈哈,说了这么多,就是为了抄点素材...鉴于stm32f103c8 ...

  9. 如何将曲谱的各音符转换成频率数组和持续时间

    乐曲中不同的音符实质上表示的是不同频率的声音. 在单片机中要发出不同频率的声音,只要产生不同频率的脉冲信号,再通过喇叭等播放出来即可.又由于方波容易用定时器产生,故一般单片机使用方波脉冲. 关于Win ...

  10. 2022-08-07 乐理知识(五) 认识五线谱——谱号(度,八度记号,十五度记号),拍号(认识音符,附点,休止符,音值组合法),调号(五线谱中的调号,快速识别调号)

    文章目录 一.五线谱的谱号(续)--度,八度记号和十五度记号 1.什么是度 2.八度记号 出现原因 高八度记号 低八度记号 3.十五度记号 为什么是十五度不是十六度 高十五度记号 二.五线谱的拍号 1 ...

最新文章

  1. 相识、相恋、相伴【与51CTO的故事】
  2. java中extends ,implements的顺序问题
  3. c语言中for语句的作用是,c语言中for语句是怎么用的
  4. SpringBoot运行原理初探
  5. 经典:比尔·盖茨的创业智慧
  6. memcached高速缓存学习笔记002---telnet操作memcached
  7. 浅谈《原神》中的图形渲染技术
  8. Android 四大组件之Activity
  9. matlab 非线性动力系统 极限环,非线性动力系统混沌运动的Matlab数值模拟.doc
  10. 英语语法---形容词详解
  11. cydia服务器未响应,完美解决cydia 软件源空白问题
  12. 30 行代码实现蚂蚁森林自动收能量(附源码)
  13. mermaid 饼图使用指南
  14. JAVA软件海豚_海豚调度系统Apache DolphinScheduler单机部署官方文档(Standalone)
  15. OpenCV--直线拟合fitLine及求两直线对称轴
  16. GAN生成对抗网络综述
  17. 国家开放大学计算机基础应用型题一,国家开放大学(电大)《计算机应用基础》上机网考常考操作题及步骤...
  18. 【Redis Cluster集群】redis cluster 多mster写入,读写分离,高可用
  19. 使用线程池批量爬取梨视频最热视频
  20. 浙江大学-翁凯 C语言进阶,编程题

热门文章

  1. Word控件Spire.Doc 转换教程(二十一):将非标准字体的word文档转换为PDF
  2. 微信开放平台基于网站应用授权登录源码(java)
  3. 用Android KeyStore对数据进行加解密
  4. 天津出差系列(六)----第六天
  5. Adobe Audition 2020 for Mac安装不了怎么办?Au下载安装教程来啦 内附系统要求
  6. Mac电脑怎么使用ping命令
  7. 正在崛起的高薪岗位—嵌入式开发工程师
  8. IT行业里哪些岗位热门又高薪?
  9. HDU-2669 Romantic (欧几里得定理)
  10. linux锐捷认证成功无法上网,主编传授win10系统锐捷认证成功但是却无法上网的方法...