randomzoom 发表于 2017-10-1 18:38:29

HP39GS奏乐

用39GS编了一个奏谱的小程序,还在调校中。主要调校基频和时间

程序如下:
for I=1 to 42:   #有几个谱就用多少数字
beep 50+(21+M1(1,1)+7*M1(1,2))*30 ; M1(1,2) / 2.5:   
#50,21用来调基频,其实可以合并的;7, 30用于调音阶;1/2.5每个谱的持续时间
END:

乐谱存在矩阵M1里,3列,有多少谱就多少行。
第一列:简谱基本数字1 2 3 4 5 6 7
第二列:简谱升调或降调...-2,-1,0,1,2...
第三列:节拍时间,0.25, 0.5, 1,2,3, 4......
如图中乐谱,可以存为:
M1
AB C
1 0 1
1 0 1
5 0 1
5 0 1
6 0 1
6 0 1
5 0 2

randomzoom 发表于 2017-10-1 18:45:13

这个谱看来是最简单的了。
继续完善的话,乐谱放在不常用的M9里面,便于长期保存。
所有乐谱都放在一个矩阵里面,做好分界。
改for语句就可以选歌。

randomzoom 发表于 2017-10-1 19:20:53

简谱上有 1=C,这个算基频吧,也要考虑进去。

我在考虑曲谱存入数列List,使用正负号,十位数,小数记录附加信息,
正负号---升降调
十位----升降次数
个位----1234567
小数:每个调时间,默认1个单位,即没有小数。
-12.025表示降1个7,时间1/4
5.2,时间2个单位
3 时间一个单位
这样输入比较快一点。矩阵太麻烦了。


randomzoom 发表于 2017-10-1 21:04:36

使用数列储存的好处是,输入方便,占用内存少。我要继续优化数列表示的方法。

整数只一位1234567
升降调和持续时间都放在小数里。

randomzoom 发表于 2017-10-1 21:22:40

我在学习乐谱知识,大有收获。以后HP39gs可以帮我们唱新歌了

randomzoom 发表于 2017-10-3 21:07:30

第二版采用数列list保存乐谱,每个音一个数,大大节约内存。也方便输入。
整数一位,升降调第一位小数,持续时第二一位小数
整数 1 2 3 4 5 6 7即简谱上的数字。
第一位小数1234分别代表降1234档,6789代表升1234档,0表示原调。
第二位小数1234表示1,2,3,4个1/4拍。789分别为底下1,2,3道杠,即1/2,1/4,1/8,通常1省略。
页: [1]
查看完整版本: HP39GS奏乐