Musical keyboard component written in React.
Não pode escolher mais do que 25 tópicos Os tópicos devem começar com uma letra ou um número, podem incluir traços ('-') e podem ter até 35 caracteres.
 
 
 
 

123 linhas
3.0 KiB

  1. /*
  2. 4
  3. +-----------------------------------+
  4. 3
  5. +--------------------------+
  6. * * * * * * * * * * **
  7. +----+-----+----+-----+----+---+-----+----+-----+----+-----+---+
  8. | | | | | | | | | | | | |
  9. | | | | | | | | | | | | |
  10. | | | | | | | | | | | | |
  11. | | | | | | | | | | | | |
  12. | | | | | | | | | | | | |
  13. | +---+-+ +-+---+ | +----++ +--+--+ ++---++ |
  14. | | | | | | | |
  15. | | | | | | | |
  16. | | | | | | | |
  17. +--------+--------+--------+--------+--------+--------+--------+
  18. */
  19. // basic and naive
  20. // export const KEY_OFFSETS = [
  21. // 0, // C
  22. // 3 / 7 / 5, // C#
  23. // 1 / 7, // D
  24. // 3 / 7 / 5 * 3, // D#
  25. // 2 / 7, // E
  26. // 3 / 7, // F
  27. // (3 / 7) + (4 / 7 / 7), // F#
  28. // 4 / 7, // G
  29. // (3 / 7) + (4 / 7 / 7 * 3), // G#
  30. // 5 / 7, // A
  31. // (3 / 7) + (4 / 7 / 7 * 5), // A#
  32. // 6 / 7, // B
  33. // ]
  34. // http://datagenetics.com/blog/may32016/index.html
  35. // export const KEY_OFFSETS = [
  36. // 0, // C
  37. // 525 / 5880, // C#
  38. // 1 / 7, // D
  39. // (525 + 490 * 2) / 5880, // D#
  40. // 2 / 7, // E
  41. // 3 / 7, // F
  42. // (525 + 490 * 3 + 525 + 455) / 5880, // F#
  43. // 4 / 7, // G
  44. // (525 + 490 * 5 + 525 + 455) / 5880, // G#
  45. // 5 / 7, // A
  46. // (525 + 490 * 7 + 525 + 455) / 5880, // A#
  47. // 6 / 7, // B
  48. // ]
  49. // pixel-perfect on smaller sizes
  50. // export const KEY_OFFSETS = [
  51. // 0,
  52. // 14 / 140,
  53. // 1 / 7,
  54. // 36 / 140,
  55. // 2 / 7,
  56. // 3 / 7,
  57. // 73 / 140,
  58. // 4 / 7,
  59. // 95 / 140,
  60. // 5 / 7,
  61. // 117 / 140,
  62. // 6 / 7,
  63. // ]
  64. // compromise
  65. export const KEY_OFFSETS = [
  66. 0, // C
  67. (3 / 7 / 88) * 20, // C#
  68. 1 / 7, // D
  69. (3 / 7 / 88) * 53, // D#
  70. 2 / 7, // E
  71. 3 / 7, // F
  72. 3 / 7 + (4 / 7 / 56) * 9, // F#
  73. 4 / 7, // G
  74. 3 / 7 + (4 / 7 / 224) * 97, // G#
  75. 5 / 7, // A
  76. 3 / 7 + (4 / 7 / 112) * 79, // A#
  77. 6 / 7, // B
  78. ]
  79. export const ACCIDENTAL_KEY_TO_NATURAL_KEY_WIDTH_RATIO = 9 / 16
  80. // export const ACCIDENTAL_KEY_TO_NATURAL_KEY_WIDTH_RATIO = 13 / 23
  81. export const BEHAVIORS = ['link', 'checkbox', 'radio'] as const
  82. export const OCTAVE_DIVISIONS = [12, 17, 19, 21, 24, 36] as const
  83. export const ORIENTATIONS = [0, 90, 180, 270] as const
  84. export const BOTTOM_CSS_ATTRIBUTES: Record<0 | 90 | 180 | 270, string> = {
  85. 0: 'bottom',
  86. 90: 'right',
  87. 180: 'top',
  88. 270: 'left',
  89. }
  90. export const LEFT_CSS_ATTRIBUTES: Record<0 | 90 | 180 | 270, string> = {
  91. 0: 'left',
  92. 90: 'bottom',
  93. 180: 'right',
  94. 270: 'top',
  95. }
  96. export const WIDTH_CSS_ATTRIBUTES: Record<0 | 90 | 180 | 270, string> = {
  97. 0: 'width',
  98. 180: 'width',
  99. 90: 'height',
  100. 270: 'height',
  101. }
  102. export const COMPONENTS: Record<string, string> = {
  103. link: 'a',
  104. checkbox: 'label',
  105. radio: 'label',
  106. }