【问题标题】:storing guitar chords in a database将吉他和弦存储在数据库中
【发布时间】:2017-08-07 18:49:06
【问题描述】:

我目前正在大学学习,为了我的个人项目,我将创建一个吉他和弦拾取应用程序,其中和弦将保存在数据库中(我将使用 Oracle 数据库 11g 快捷版)。用户可以键入和弦的名称或与该和弦相关联的音符,它将显示一个和弦图像以给出它的视觉表示。我对如何将和弦存储在数据库中感到困惑。我需要一张用于和弦系列(A、C、D、G 等)的表吗?一张用于和弦使用的单独音符,另一张用于指板上的所有音符?对此的任何帮助将不胜感激。

我的应用程序将在 Android Studio 中开发。当我创建数据库时,它将如何连接到我的应用程序?

谢谢。

【问题讨论】:

  • 据我所知,如果您想创建一个 android 应用程序,那么您已经可以使用 SQLite。由于 android 应用程序应该是轻量级的,考虑到它们通常安装在手持设备上的事实,使用 Ora DB 在这里是没有用的。或者,如果它是您要开发的 java 应用程序,您可以使用 JDBC/ 或 ORM 框架(如 Hibernate/ iBatis)来获取到指定数据库的连接。
  • 进入查询时,您可以将一些唯一的 id/名称与每个和弦相关联,并将它们存储到 CHORD_T 表中,然后当您从数据库中检索有关该和弦的信息时,您d 获取它的 id,现在找到与该对应 id 相关联的图像并将其显示在 GUI 上。 Fret板上的音符可以被视为模板。
  • 嗯,我最初的想法是使用 SQLite,但我以前从未使用过它,并认为使用 Oracle DB 可能更容易。 SQLite 的工作方式相同吗?如何通过 Android Studio 界面向其中插入大量数据?
  • 有像 DB 查看器这样的工具,通过提供 UI 来帮助您,您可以在其中创建数据库、创建表、查看其中的数据并执行各种操作,甚至无需运行查询.例如:sqlitebrowser.org

标签: sql database guitar music-notation


【解决方案1】:

我会这样做:

半音顺序映射到音符的表 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 中有两个八度音阶,要么对于 23 以上的数字减去 24。

这不处理何时使用 # 或 b 表示半音。

如果您需要直观地构建手指放在指板上的位置,而不是表 1 中只有一个八度音阶的音符,请将所有音符存储在指板上,并在表 2 中存储所有音品的所有索引要握住的六根弦。在这种情况下,您需要为所有弦线使用不同的弦线标识符,即 A 大调、A# 大调等。

【讨论】:

    猜你喜欢
    • 2010-11-05
    • 2011-07-24
    • 2011-06-22
    • 2019-03-01
    • 2018-10-10
    • 2012-08-28
    • 2016-05-07
    • 1970-01-01
    相关资源
    最近更新 更多