我目前在大学学习,对于我的个人项目,我将创建一个吉他和弦拾取应用程序,其中和弦将保存在数据库中(我将使用Oracle数据库11g Express Edition)。用户可以键入和弦的名称或与该和弦相关联的音符,它将显示和弦图像以提供其可视表示。我被卡住了,关于和弦将如何存储在数据库中。我是否需要一张桌子来放置弦族(A、C、D、G等)一个表用于和弦使用的单独音符,另一个表用于fret板上的所有音符?任何对此的帮助都将不胜感激。
我的应用程序将在Android Studio中开发。当我创建数据库时,它将如何连接到我的应用程序?
谢谢。
发布于 2017-03-16 22:43:29
我会这样做:
半音顺序映射到音符的表1:
0 -> C
1 -> C#
2 -> D
3 -> D#
4 -> E
5 -> F
6 -> F#
etc.和弦名称映射到多个半音音程的表2:
Major -> 0
Major -> 4
Major -> 8
Minor -> 0
Minor -> 3
Minor -> 8
etc现在,您已经拥有了构建和识别和弦所需的一切。
示例:查找D大调的音符
1)在表1中查找从D开始的索引,即2
2)在表2中找出主线的所有音程,即0、4和8。
3)通过将表2中找到的间隔添加到起始索引来查找表1中的音符。
如下所示:
2 + 0 = 2 => D,
2 + 4 = 6 => F#,
2 + 8 = 10 => A当3的加法结果大于11时,你需要减去12才能得到正确的音符,高出一个八度。当你的绳索跨度超过一个八度时,你要么需要表1中的两个八度,要么减去24个超过23的数字。
这不处理何时对半音使用#或b。
如果您需要直观地构建手指在fret板上的位置,而不是表1中只有一个八度音符,请将所有音符存储在fret板上,并在表2中,存储六个字符串上所有fret的所有索引。在这种情况下,您需要为所有线缆使用不同的线缆标识符,例如A主线、A#主线等。
https://stackoverflow.com/questions/42836733
复制相似问题