这是一款一键演奏和弦的软件,用户可以在界面上配置“和弦按钮(Chord Button)”,并通过点击单个按钮,一键演奏整个和弦。其中,和弦可以由用户进行自由配置。和弦按钮的类型经过系统预设,而用户也可以对按钮进行进一步自定义。和市面上的类似软件不同,该软件用和弦级数而非和弦的名称来标记和弦,和弦按钮的对应的音与用户选择的调子相关联,而非固定。这种级数导向的设计使用门槛较低,尤其是对于首调者(相对音感者)十分友好。
1.和弦类型
一个和弦类型包含两种数据:①和弦的名称,②和弦的音程关系。这二者都需要我们进行预设。
和弦的名称,用于显示和弦按钮的标签。例如一级大三和弦可以表记为罗马数字“I”。出于不同用户的习惯,我们可以预设多种名称供用户选择。例如用户可以把“半减七和弦”改为“减七降五和弦”等等,这通过下拉框实现。与此同时,我们也提供按钮,便于用户一键调整所有名称(例如用户想把所有和弦都切换为罗马数字的格式),这种操作的实质是由系统进行若干次单次操作。调整和弦名称是全局操作(与下文的自定义和弦按钮相区分)。
和弦的音程关系用于计算和弦音,以半音关系的形式存储。例如,在大三和弦中,我们将和弦的根音视为0,各个音与根音之间的关系是大三度(4个半音),纯五度(7个半音),则大三和弦可以标记为[0,4,7],同理,小三和弦为[0,3,7],属七和弦则是[0,4,7,10],其他和弦同样可以以此类推。我们需要将各种常见和弦录入这个软件,供用户选择。这些和弦至少包括全部的三和弦、七和弦,以及挂留和弦等其他常见和弦(15个左右)。至于其它和弦,我倾向于用自定义的方式实现——下文我们会介绍这种自定义。
2.音源
我们需要为软件添加单音音源,这些音源涵盖若干组八度。音频文件有符合规范的命名方式,例如c2.wav,c_sharp2.wav等。为了下文的说明,我们暂且挑选一组C到B这十二个音(包括半音)分别视为1到12,实际算法中由于涉及移动八度等功能将更为复杂。需要注意,此处的1到12对应的是绝对音高。
3.和弦计算逻辑
我们需要把和弦按钮和音源联系起来,这依靠用户选定的调。
用户需要先设定一个自己演奏的调(默认为C大调)。例如在用户选择C大调的情况下,在此情况下用户按下I(一级大三和弦)的按钮,则同时播放了1,5,8(也就是C,E,G),其中播放1,5,8是程序计算的结果。为什么是这三个音? C大调的一级和弦主音是C(1),和弦类型是[0,3,7],故我们所播放的三个音是(1+0),(1+3),(1+7),也就是1,5,8。
当用户把调改成D大调后,同样是I(一级大三和弦)这个按键,按下时播放的音频则变成3,7,10,计算逻辑与上文相同。
然而,这样的计算逻辑显然不总是符合和弦转位的常理。我们会在接下来的模块中解决这一问题。
4.用户界面
用户界面主要是一个可以放置“和弦按钮”的“表格”。在用户点击编辑按钮后,用户可以进行以下三种操作:创建按钮,移动按钮,自定义按钮(删除操作在自定义菜单内)。(我认为我们必须要设计一个“编辑”按钮,以区分演奏和编辑这两种场景。我们难以很好的从演奏行为中识别编辑行为。如果你直接将编辑设计为长按或双击,那这会和演奏相冲突,你在演奏时本就也会长按或双击。)
我们为用户提供多种预设。例如,用户可以创建一个全空的表格。用户也可以创建一个表格,表格的第一行默认添加了一行大调的调内三和弦(I,ii,iii等)。
4.1 创建按钮
点击表格中的空格,可以在该格上创建按钮。在单击一个空格创建按钮时,用户只需要提供和弦级数、和弦类型这两个信息,以创建一个基本的和弦。其它的的功能均在自定义菜单内实现。
4.2 移动按钮
长按并拖动一个已经摆放的按钮,可以移动其位置(移动到空格,或与其他按钮进行交换)。
4.3 自定义按钮
双击一个已经摆放的按钮,可以对该按钮进行自定义操作。
针对每个单独的和弦内音,用户可以进行如下操作:①取消勾选(所有和弦内音默认勾选,但如果用户需要省略某些音,则可以取消勾选,这种操作满足了高叠和弦省略音的需求);②调整八度(用户可以上下调整某个音所处的八度位置,这种操作满足了和弦转位的需求,我们可以通过调整部分音的八度进行转位)。
针对整个和弦按钮,用户可以进行如下操作:①添加单音(用户可以往和弦中添加任何指定音,添加的单音以“标签”形式存在,这种操作满足了add和弦、六和弦等和弦的构造需求,用户也可以借助这样的功能添加低音);②修改标签(用户可以修改单个的展示标签,仅对单个按钮生效);③恢复默认状态;④删除和弦按钮。
当然,我们也会为用户提供一些快捷的按钮,例如:①和弦整体上下移动八度(实质是系统替用户对多个音进行分别操作);②切换为开放和弦(例如在初始和弦的基础上将三音提高八度,简单设计即可);③添加一个低八度的根音作低音。