question-mark
Stuck on an issue?

Lightrun Answers was designed to reduce the constant googling that comes with debugging 3rd party libraries. It collects links to all the places you might be looking at while hunting down a tough bug.

And, if you’re still stuck at the end, we’re happy to hop on a call to see how we can help out.

A new feature for the XO-Chip sound system

See original GitHub issue

Greetings, it’s been long, long time not see. I saw a huge improvement upon the Octo and I’m fascinated by it!

I wished XO-Chip sound which is based on the playback of 128 periodic samples of 1-bit audio buffer, much more convenient to utilise. So here I came up with a simple idea, which is to control the playback rate, instead of being stuck at 4000 Hz sample rate. That’d be FxNN instruction, where it sets frequency register to Vx.

I’m asking you if this can be implemented and standarised for XO-Chip specifications.

The frequency register at the start of program will initialized to match the 4000 Hz. And only the matter is how the values on the register represent the frequency of it. It’s known that the lowest possible tone that could be played is 31.75 Hz, so the frequency register value might be biased to some value to access lower frequencies (and having a longer periodic audio), suppose the bias of the register would be 64 (which is the best sweet point upon the balance) to represent 4000 Hz. And for the scaling of it, I prefer the frequency register would be logarithmic based, matching the musical scaling, making the tone composition and programming with it easier.

+----------------+---------------+---------------+---------------+----------------+------+
| Frequency      | Playback rate | highest audio | lowest audio  | something suit | note |
| register value |               | tone playable | tone playable | in-between     | key  |
+----------------+---------------+---------------+---------------+----------------+------+
| 64 + 191 = 255 :  63082.44 Hz  :  31541.22 Hz  :    492.83 Hz  :    1971.33 Hz  |  B-6 |
| 64 + 190 = 254 :  62178.04 Hz  :  31089.02 Hz  :    485.76 Hz  :    1943.06 Hz  |      |
| 64 + 189 = 253 :  61286.60 Hz  :  30643.30 Hz  :    478.80 Hz  :    1915.21 Hz  |      |
| 64 + 188 = 252 :  60407.95 Hz  :  30203.97 Hz  :    471.93 Hz  :    1887.75 Hz  |      |
| 64 + 187 = 251 :  59541.89 Hz  :  29770.94 Hz  :    465.17 Hz  :    1860.68 Hz  |  A#6 |
| 64 + 186 = 250 :  58688.25 Hz  :  29344.12 Hz  :    458.50 Hz  :    1834.01 Hz  |      |
| 64 + 185 = 249 :  57846.85 Hz  :  28923.42 Hz  :    451.92 Hz  :    1807.71 Hz  |      |
| 64 + 184 = 248 :  57017.51 Hz  :  28508.75 Hz  :    445.44 Hz  :    1781.80 Hz  |      |
| 64 + 183 = 247 :  56200.06 Hz  :  28100.03 Hz  :    439.06 Hz  :    1756.25 Hz  |  A-6 |
| 64 + 182 = 246 :  55394.33 Hz  :  27697.16 Hz  :    432.76 Hz  :    1731.07 Hz  |      |
| 64 + 181 = 245 :  54600.16 Hz  :  27300.08 Hz  :    426.56 Hz  :    1706.26 Hz  |      |
| 64 + 180 = 244 :  53817.37 Hz  :  26908.68 Hz  :    420.44 Hz  :    1681.79 Hz  |      |
| 64 + 179 = 243 :  53045.80 Hz  :  26522.90 Hz  :    414.42 Hz  :    1657.68 Hz  |  G#6 |
| 64 + 178 = 242 :  52285.29 Hz  :  26142.64 Hz  :    408.47 Hz  :    1633.92 Hz  |      |
| 64 + 177 = 241 :  51535.69 Hz  :  25767.84 Hz  :    402.62 Hz  :    1610.49 Hz  |      |
| 64 + 176 = 240 :  50796.83 Hz  :  25398.41 Hz  :    396.85 Hz  :    1587.40 Hz  |      |
| 64 + 175 = 239 :  50068.56 Hz  :  25034.28 Hz  :    391.16 Hz  :    1564.64 Hz  |  G-6 |
| 64 + 174 = 238 :  49350.74 Hz  :  24675.37 Hz  :    385.55 Hz  :    1542.21 Hz  |      |
| 64 + 173 = 237 :  48643.21 Hz  :  24321.60 Hz  :    380.02 Hz  :    1520.10 Hz  |      |
| 64 + 172 = 236 :  47945.82 Hz  :  23972.91 Hz  :    374.57 Hz  :    1498.31 Hz  |      |
| 64 + 171 = 235 :  47258.43 Hz  :  23629.21 Hz  :    369.20 Hz  :    1476.83 Hz  |  F#6 |
| 64 + 170 = 234 :  46580.90 Hz  :  23290.45 Hz  :    363.91 Hz  :    1455.65 Hz  |      |
| 64 + 169 = 233 :  45913.08 Hz  :  22956.54 Hz  :    358.69 Hz  :    1434.78 Hz  |      |
| 64 + 168 = 232 :  45254.83 Hz  :  22627.41 Hz  :    353.55 Hz  :    1414.21 Hz  |      |
| 64 + 167 = 231 :  44606.02 Hz  :  22303.01 Hz  :    348.48 Hz  :    1393.94 Hz  |  F-6 |
| 64 + 166 = 230 :  43966.51 Hz  :  21983.25 Hz  :    343.48 Hz  :    1373.95 Hz  |      |
| 64 + 165 = 229 :  43336.17 Hz  :  21668.08 Hz  :    338.56 Hz  :    1354.26 Hz  |      |
| 64 + 164 = 228 :  42714.87 Hz  :  21357.43 Hz  :    333.70 Hz  :    1334.84 Hz  |      |
| 64 + 163 = 227 :  42102.48 Hz  :  21051.24 Hz  :    328.92 Hz  :    1315.70 Hz  |  E-6 |
| 64 + 162 = 226 :  41498.86 Hz  :  20749.43 Hz  :    324.20 Hz  :    1296.84 Hz  |      |
| 64 + 161 = 225 :  40903.90 Hz  :  20451.95 Hz  :    319.56 Hz  :    1278.25 Hz  |      |
| 64 + 160 = 224 :  40317.47 Hz  :  20158.73 Hz  :    314.98 Hz  :    1259.92 Hz  |      |
| 64 + 159 = 223 :  39739.44 Hz  :  19869.72 Hz  :    310.46 Hz  :    1241.86 Hz  |  D#6 |
| 64 + 158 = 222 :  39169.71 Hz  :  19584.85 Hz  :    306.01 Hz  :    1224.05 Hz  |      |
| 64 + 157 = 221 :  38608.14 Hz  :  19304.07 Hz  :    301.62 Hz  :    1206.50 Hz  |      |
| 64 + 156 = 220 :  38054.62 Hz  :  19027.31 Hz  :    297.30 Hz  :    1189.21 Hz  |      |
| 64 + 155 = 219 :  37509.04 Hz  :  18754.52 Hz  :    293.03 Hz  :    1172.16 Hz  |  D-6 |
| 64 + 154 = 218 :  36971.28 Hz  :  18485.64 Hz  :    288.83 Hz  :    1155.35 Hz  |      |
| 64 + 153 = 217 :  36441.23 Hz  :  18220.61 Hz  :    284.69 Hz  :    1138.79 Hz  |      |
| 64 + 152 = 216 :  35918.78 Hz  :  17959.39 Hz  :    280.61 Hz  :    1122.46 Hz  |      |
| 64 + 151 = 215 :  35403.82 Hz  :  17701.91 Hz  :    276.59 Hz  :    1106.37 Hz  |  C#6 |
| 64 + 150 = 214 :  34896.24 Hz  :  17448.12 Hz  :    272.62 Hz  :    1090.51 Hz  |      |
| 64 + 149 = 213 :  34395.94 Hz  :  17197.97 Hz  :    268.71 Hz  :    1074.87 Hz  |      |
| 64 + 148 = 212 :  33902.81 Hz  :  16951.40 Hz  :    264.86 Hz  :    1059.46 Hz  |      |
| 64 + 147 = 211 :  33416.76 Hz  :  16708.38 Hz  :    261.06 Hz  :    1044.27 Hz  |  C-6 |
| 64 + 146 = 210 :  32937.67 Hz  :  16468.83 Hz  :    257.32 Hz  :    1029.30 Hz  |      |
| 64 + 145 = 209 :  32465.45 Hz  :  16232.72 Hz  :    253.63 Hz  :    1014.55 Hz  |      |
| 64 + 144 = 208 :  32000.00 Hz  :  16000.00 Hz  :    250.00 Hz  :    1000.00 Hz  |      |
| 64 + 143 = 207 :  31541.22 Hz  :  15770.61 Hz  :    246.41 Hz  :     985.66 Hz  |  B-5 |
| 64 + 142 = 206 :  31089.02 Hz  :  15544.51 Hz  :    242.88 Hz  :     971.53 Hz  |      |
| 64 + 141 = 205 :  30643.30 Hz  :  15321.65 Hz  :    239.40 Hz  :     957.60 Hz  |      |
| 64 + 140 = 204 :  30203.97 Hz  :  15101.98 Hz  :    235.96 Hz  :     943.87 Hz  |      |
| 64 + 139 = 203 :  29770.94 Hz  :  14885.47 Hz  :    232.58 Hz  :     930.34 Hz  |  A#5 |
| 64 + 138 = 202 :  29344.12 Hz  :  14672.06 Hz  :    229.25 Hz  :     917.00 Hz  |      |
| 64 + 137 = 201 :  28923.42 Hz  :  14461.71 Hz  :    225.96 Hz  :     903.86 Hz  |      |
| 64 + 136 = 200 :  28508.75 Hz  :  14254.37 Hz  :    222.72 Hz  :     890.90 Hz  |      |
| 64 + 135 = 199 :  28100.03 Hz  :  14050.01 Hz  :    219.53 Hz  :     878.13 Hz  |  A-5 |
| 64 + 134 = 198 :  27697.16 Hz  :  13848.58 Hz  :    216.38 Hz  :     865.54 Hz  |      |
| 64 + 133 = 197 :  27300.08 Hz  :  13650.04 Hz  :    213.28 Hz  :     853.13 Hz  |      |
| 64 + 132 = 196 :  26908.68 Hz  :  13454.34 Hz  :    210.22 Hz  :     840.90 Hz  |      |
| 64 + 131 = 195 :  26522.90 Hz  :  13261.45 Hz  :    207.21 Hz  :     828.84 Hz  |  G#5 |
| 64 + 130 = 194 :  26142.64 Hz  :  13071.32 Hz  :    204.23 Hz  :     816.96 Hz  |      |
| 64 + 129 = 193 :  25767.84 Hz  :  12883.92 Hz  :    201.31 Hz  :     805.25 Hz  |      |
| 64 + 128 = 192 :  25398.41 Hz  :  12699.20 Hz  :    198.42 Hz  :     793.70 Hz  |      |
| 64 + 127 = 191 :  25034.28 Hz  :  12517.14 Hz  :    195.58 Hz  :     782.32 Hz  |  G-5 |
| 64 + 126 = 190 :  24675.37 Hz  :  12337.69 Hz  :    192.78 Hz  :     771.11 Hz  |      |
| 64 + 125 = 189 :  24321.61 Hz  :  12160.80 Hz  :    190.01 Hz  :     760.05 Hz  |      |
| 64 + 124 = 188 :  23972.91 Hz  :  11986.46 Hz  :    187.29 Hz  :     749.15 Hz  |      |
| 64 + 123 = 187 :  23629.22 Hz  :  11814.61 Hz  :    184.60 Hz  :     738.41 Hz  |  F#5 |
| 64 + 122 = 186 :  23290.45 Hz  :  11645.23 Hz  :    181.96 Hz  :     727.83 Hz  |      |
| 64 + 121 = 185 :  22956.54 Hz  :  11478.27 Hz  :    179.35 Hz  :     717.39 Hz  |      |
| 64 + 120 = 184 :  22627.42 Hz  :  11313.71 Hz  :    176.78 Hz  :     707.11 Hz  |      |
| 64 + 119 = 183 :  22303.01 Hz  :  11151.51 Hz  :    174.24 Hz  :     696.97 Hz  |  F-5 |
| 64 + 118 = 182 :  21983.26 Hz  :  10991.63 Hz  :    171.74 Hz  :     686.98 Hz  |      |
| 64 + 117 = 181 :  21668.09 Hz  :  10834.04 Hz  :    169.28 Hz  :     677.13 Hz  |      |
| 64 + 116 = 180 :  21357.44 Hz  :  10678.72 Hz  :    166.85 Hz  :     667.42 Hz  |      |
| 64 + 115 = 179 :  21051.24 Hz  :  10525.62 Hz  :    164.46 Hz  :     657.85 Hz  |  E-5 |
| 64 + 114 = 178 :  20749.43 Hz  :  10374.72 Hz  :    162.10 Hz  :     648.42 Hz  |      |
| 64 + 113 = 177 :  20451.95 Hz  :  10225.98 Hz  :    159.78 Hz  :     639.12 Hz  |      |
| 64 + 112 = 176 :  20158.74 Hz  :  10079.37 Hz  :    157.49 Hz  :     629.96 Hz  |      |
| 64 + 111 = 175 :  19869.72 Hz  :   9934.86 Hz  :    155.23 Hz  :     620.93 Hz  |  D#5 |
| 64 + 110 = 174 :  19584.86 Hz  :   9792.43 Hz  :    153.01 Hz  :     612.03 Hz  |      |
| 64 + 109 = 173 :  19304.07 Hz  :   9652.04 Hz  :    150.81 Hz  :     603.25 Hz  |      |
| 64 + 108 = 172 :  19027.31 Hz  :   9513.66 Hz  :    148.65 Hz  :     594.60 Hz  |      |
| 64 + 107 = 171 :  18754.52 Hz  :   9377.26 Hz  :    146.52 Hz  :     586.08 Hz  |  D-5 |
| 64 + 106 = 170 :  18485.64 Hz  :   9242.82 Hz  :    144.42 Hz  :     577.68 Hz  |      |
| 64 + 105 = 169 :  18220.62 Hz  :   9110.31 Hz  :    142.35 Hz  :     569.39 Hz  |      |
| 64 + 104 = 168 :  17959.39 Hz  :   8979.70 Hz  :    140.31 Hz  :     561.23 Hz  |      |
| 64 + 103 = 167 :  17701.91 Hz  :   8850.96 Hz  :    138.30 Hz  :     553.18 Hz  |  C#5 |
| 64 + 102 = 166 :  17448.12 Hz  :   8724.06 Hz  :    136.31 Hz  :     545.25 Hz  |      |
| 64 + 101 = 165 :  17197.97 Hz  :   8598.99 Hz  :    134.36 Hz  :     537.44 Hz  |      |
| 64 + 100 = 164 :  16951.41 Hz  :   8475.70 Hz  :    132.43 Hz  :     529.73 Hz  |      |
| 64 +  99 = 163 :  16708.38 Hz  :   8354.19 Hz  :    130.53 Hz  :     522.14 Hz  |  C-5 |
| 64 +  98 = 162 :  16468.84 Hz  :   8234.42 Hz  :    128.66 Hz  :     514.65 Hz  |      |
| 64 +  97 = 161 :  16232.73 Hz  :   8116.36 Hz  :    126.82 Hz  :     507.27 Hz  |      |
| 64 +  96 = 160 :  16000.00 Hz  :   8000.00 Hz  :    125.00 Hz  :     500.00 Hz  |      |
| 64 +  95 = 159 :  15770.61 Hz  :   7885.31 Hz  :    123.21 Hz  :     492.83 Hz  |  B-4 |
| 64 +  94 = 158 :  15544.51 Hz  :   7772.26 Hz  :    121.44 Hz  :     485.77 Hz  |      |
| 64 +  93 = 157 :  15321.65 Hz  :   7660.83 Hz  :    119.70 Hz  :     478.80 Hz  |      |
| 64 +  92 = 156 :  15101.99 Hz  :   7550.99 Hz  :    117.98 Hz  :     471.94 Hz  |      |
| 64 +  91 = 155 :  14885.47 Hz  :   7442.74 Hz  :    116.29 Hz  :     465.17 Hz  |  A#4 |
| 64 +  90 = 154 :  14672.06 Hz  :   7336.03 Hz  :    114.63 Hz  :     458.50 Hz  |      |
| 64 +  89 = 153 :  14461.71 Hz  :   7230.86 Hz  :    112.98 Hz  :     451.93 Hz  |      |
| 64 +  88 = 152 :  14254.38 Hz  :   7127.19 Hz  :    111.36 Hz  :     445.45 Hz  |      |
| 64 +  87 = 151 :  14050.02 Hz  :   7025.01 Hz  :    109.77 Hz  :     439.06 Hz  |  A-4 |
| 64 +  86 = 150 :  13848.58 Hz  :   6924.29 Hz  :    108.19 Hz  :     432.77 Hz  |      |
| 64 +  85 = 149 :  13650.04 Hz  :   6825.02 Hz  :    106.64 Hz  :     426.56 Hz  |      |
| 64 +  84 = 148 :  13454.34 Hz  :   6727.17 Hz  :    105.11 Hz  :     420.45 Hz  |      |
| 64 +  83 = 147 :  13261.45 Hz  :   6630.73 Hz  :    103.61 Hz  :     414.42 Hz  |  G#4 |
| 64 +  82 = 146 :  13071.32 Hz  :   6535.66 Hz  :    102.12 Hz  :     408.48 Hz  |      |
| 64 +  81 = 145 :  12883.92 Hz  :   6441.96 Hz  :    100.66 Hz  :     402.62 Hz  |      |
| 64 +  80 = 144 :  12699.21 Hz  :   6349.60 Hz  :     99.21 Hz  :     396.85 Hz  |      |
| 64 +  79 = 143 :  12517.14 Hz  :   6258.57 Hz  :     97.79 Hz  :     391.16 Hz  |  G-4 |
| 64 +  78 = 142 :  12337.69 Hz  :   6168.84 Hz  :     96.39 Hz  :     385.55 Hz  |      |
| 64 +  77 = 141 :  12160.80 Hz  :   6080.40 Hz  :     95.01 Hz  :     380.03 Hz  |      |
| 64 +  76 = 140 :  11986.46 Hz  :   5993.23 Hz  :     93.64 Hz  :     374.58 Hz  |      |
| 64 +  75 = 139 :  11814.61 Hz  :   5907.30 Hz  :     92.30 Hz  :     369.21 Hz  |  F#4 |
| 64 +  74 = 138 :  11645.23 Hz  :   5822.61 Hz  :     90.98 Hz  :     363.91 Hz  |      |
| 64 +  73 = 137 :  11478.27 Hz  :   5739.14 Hz  :     89.67 Hz  :     358.70 Hz  |      |
| 64 +  72 = 136 :  11313.71 Hz  :   5656.85 Hz  :     88.39 Hz  :     353.55 Hz  |      |
| 64 +  71 = 135 :  11151.51 Hz  :   5575.75 Hz  :     87.12 Hz  :     348.48 Hz  |  F-4 |
| 64 +  70 = 134 :  10991.63 Hz  :   5495.81 Hz  :     85.87 Hz  :     343.49 Hz  |      |
| 64 +  69 = 133 :  10834.04 Hz  :   5417.02 Hz  :     84.64 Hz  :     338.56 Hz  |      |
| 64 +  68 = 132 :  10678.72 Hz  :   5339.36 Hz  :     83.43 Hz  :     333.71 Hz  |      |
| 64 +  67 = 131 :  10525.62 Hz  :   5262.81 Hz  :     82.23 Hz  :     328.93 Hz  |  E-4 |
| 64 +  66 = 130 :  10374.72 Hz  :   5187.36 Hz  :     81.05 Hz  :     324.21 Hz  |      |
| 64 +  65 = 129 :  10225.98 Hz  :   5112.99 Hz  :     79.89 Hz  :     319.56 Hz  |      |
| 64 +  64 = 128 :  10079.37 Hz  :   5039.68 Hz  :     78.75 Hz  :     314.98 Hz  |      |
| 64 +  63 = 127 :   9934.86 Hz  :   4967.43 Hz  :     77.62 Hz  :     310.46 Hz  |  D#4 |
| 64 +  62 = 126 :   9792.43 Hz  :   4896.21 Hz  :     76.50 Hz  :     306.01 Hz  |      |
| 64 +  61 = 125 :   9652.04 Hz  :   4826.02 Hz  :     75.41 Hz  :     301.62 Hz  |      |
| 64 +  60 = 124 :   9513.66 Hz  :   4756.83 Hz  :     74.33 Hz  :     297.30 Hz  |      |
| 64 +  59 = 123 :   9377.26 Hz  :   4688.63 Hz  :     73.26 Hz  :     293.03 Hz  |  D-4 |
| 64 +  58 = 122 :   9242.82 Hz  :   4621.41 Hz  :     72.21 Hz  :     288.83 Hz  |      |
| 64 +  57 = 121 :   9110.31 Hz  :   4555.15 Hz  :     71.17 Hz  :     284.69 Hz  |      |
| 64 +  56 = 120 :   8979.70 Hz  :   4489.85 Hz  :     70.15 Hz  :     280.61 Hz  |      |
| 64 +  55 = 119 :   8850.96 Hz  :   4425.48 Hz  :     69.15 Hz  :     276.59 Hz  |  C#4 |
| 64 +  54 = 118 :   8724.06 Hz  :   4362.03 Hz  :     68.16 Hz  :     272.62 Hz  |      |
| 64 +  53 = 117 :   8598.99 Hz  :   4299.49 Hz  :     67.18 Hz  :     268.71 Hz  |      |
| 64 +  52 = 116 :   8475.70 Hz  :   4237.85 Hz  :     66.22 Hz  :     264.86 Hz  |      |
| 64 +  51 = 115 :   8354.19 Hz  :   4177.10 Hz  :     65.27 Hz  :     261.06 Hz  |  C-4 |
| 64 +  50 = 114 :   8234.42 Hz  :   4117.21 Hz  :     64.33 Hz  :     257.32 Hz  |      |
| 64 +  49 = 113 :   8116.36 Hz  :   4058.18 Hz  :     63.41 Hz  :     253.63 Hz  |      |
| 64 +  48 = 112 :   8000.00 Hz  :   4000.00 Hz  :     62.50 Hz  :     250.00 Hz  |      |
| 64 +  47 = 111 :   7885.31 Hz  :   3942.65 Hz  :     61.60 Hz  :     246.41 Hz  |  B-3 |
| 64 +  46 = 110 :   7772.26 Hz  :   3886.13 Hz  :     60.72 Hz  :     242.88 Hz  |      |
| 64 +  45 = 109 :   7660.83 Hz  :   3830.41 Hz  :     59.85 Hz  :     239.40 Hz  |      |
| 64 +  44 = 108 :   7550.99 Hz  :   3775.50 Hz  :     58.99 Hz  :     235.96 Hz  |      |
| 64 +  43 = 107 :   7442.74 Hz  :   3721.37 Hz  :     58.15 Hz  :     232.58 Hz  |  A#3 |
| 64 +  42 = 106 :   7336.03 Hz  :   3668.02 Hz  :     57.31 Hz  :     229.25 Hz  |      |
| 64 +  41 = 105 :   7230.86 Hz  :   3615.43 Hz  :     56.49 Hz  :     225.96 Hz  |      |
| 64 +  40 = 104 :   7127.19 Hz  :   3563.59 Hz  :     55.68 Hz  :     222.72 Hz  |      |
| 64 +  39 = 103 :   7025.01 Hz  :   3512.50 Hz  :     54.88 Hz  :     219.53 Hz  |  A-3 |
| 64 +  38 = 102 :   6924.29 Hz  :   3462.15 Hz  :     54.10 Hz  :     216.38 Hz  |      |
| 64 +  37 = 101 :   6825.02 Hz  :   3412.51 Hz  :     53.32 Hz  :     213.28 Hz  |      |
| 64 +  36 = 100 :   6727.17 Hz  :   3363.59 Hz  :     52.56 Hz  :     210.22 Hz  |      |
| 64 +  35 =  99 :   6630.73 Hz  :   3315.36 Hz  :     51.80 Hz  :     207.21 Hz  |  G#3 |
| 64 +  34 =  98 :   6535.66 Hz  :   3267.83 Hz  :     51.06 Hz  :     204.23 Hz  |      |
| 64 +  33 =  97 :   6441.96 Hz  :   3220.98 Hz  :     50.33 Hz  :     201.31 Hz  |      |
| 64 +  32 =  96 :   6349.60 Hz  :   3174.80 Hz  :     49.61 Hz  :     198.43 Hz  |      |
| 64 +  31 =  95 :   6258.57 Hz  :   3129.29 Hz  :     48.90 Hz  :     195.58 Hz  |  G-3 |
| 64 +  30 =  94 :   6168.84 Hz  :   3084.42 Hz  :     48.19 Hz  :     192.78 Hz  |      |
| 64 +  29 =  93 :   6080.40 Hz  :   3040.20 Hz  :     47.50 Hz  :     190.01 Hz  |      |
| 64 +  28 =  92 :   5993.23 Hz  :   2996.61 Hz  :     46.82 Hz  :     187.29 Hz  |      |
| 64 +  27 =  91 :   5907.30 Hz  :   2953.65 Hz  :     46.15 Hz  :     184.60 Hz  |  F#3 |
| 64 +  26 =  90 :   5822.61 Hz  :   2911.31 Hz  :     45.49 Hz  :     181.96 Hz  |      |
| 64 +  25 =  89 :   5739.14 Hz  :   2869.57 Hz  :     44.84 Hz  :     179.35 Hz  |      |
| 64 +  24 =  88 :   5656.85 Hz  :   2828.43 Hz  :     44.19 Hz  :     176.78 Hz  |      |
| 64 +  23 =  87 :   5575.75 Hz  :   2787.88 Hz  :     43.56 Hz  :     174.24 Hz  |  F-3 |
| 64 +  22 =  86 :   5495.81 Hz  :   2747.91 Hz  :     42.94 Hz  :     171.74 Hz  |      |
| 64 +  21 =  85 :   5417.02 Hz  :   2708.51 Hz  :     42.32 Hz  :     169.28 Hz  |      |
| 64 +  20 =  84 :   5339.36 Hz  :   2669.68 Hz  :     41.71 Hz  :     166.85 Hz  |      |
| 64 +  19 =  83 :   5262.81 Hz  :   2631.41 Hz  :     41.12 Hz  :     164.46 Hz  |  E-3 |
| 64 +  18 =  82 :   5187.36 Hz  :   2593.68 Hz  :     40.53 Hz  :     162.10 Hz  |      |
| 64 +  17 =  81 :   5112.99 Hz  :   2556.49 Hz  :     39.95 Hz  :     159.78 Hz  |      |
| 64 +  16 =  80 :   5039.68 Hz  :   2519.84 Hz  :     39.37 Hz  :     157.49 Hz  |      |
| 64 +  15 =  79 :   4967.43 Hz  :   2483.72 Hz  :     38.81 Hz  :     155.23 Hz  |  D#3 |
| 64 +  14 =  78 :   4896.21 Hz  :   2448.11 Hz  :     38.25 Hz  :     153.01 Hz  |      |
| 64 +  13 =  77 :   4826.02 Hz  :   2413.01 Hz  :     37.70 Hz  :     150.81 Hz  |      |
| 64 +  12 =  76 :   4756.83 Hz  :   2378.41 Hz  :     37.16 Hz  :     148.65 Hz  |      |
| 64 +  11 =  75 :   4688.63 Hz  :   2344.32 Hz  :     36.63 Hz  :     146.52 Hz  |  D-3 |
| 64 +  10 =  74 :   4621.41 Hz  :   2310.71 Hz  :     36.10 Hz  :     144.42 Hz  |      |
| 64 +   9 =  73 :   4555.15 Hz  :   2277.58 Hz  :     35.59 Hz  :     142.35 Hz  |      |
| 64 +   8 =  72 :   4489.85 Hz  :   2244.92 Hz  :     35.08 Hz  :     140.31 Hz  |      |
| 64 +   7 =  71 :   4425.48 Hz  :   2212.74 Hz  :     34.57 Hz  :     138.30 Hz  |  C#3 |
| 64 +   6 =  70 :   4362.03 Hz  :   2181.02 Hz  :     34.08 Hz  :     136.31 Hz  |      |
| 64 +   5 =  69 :   4299.49 Hz  :   2149.75 Hz  :     33.59 Hz  :     134.36 Hz  |      |
| 64 +   4 =  68 :   4237.85 Hz  :   2118.93 Hz  :     33.11 Hz  :     132.43 Hz  |      |
| 64 +   3 =  67 :   4177.10 Hz  :   2088.55 Hz  :     32.63 Hz  :     130.53 Hz  |  C-3 |
| 64 +   2 =  66 :   4117.21 Hz  :   2058.60 Hz  :     32.17 Hz  :     128.66 Hz  |      |
| 64 +   1 =  65 :   4058.18 Hz  :   2029.09 Hz  :     31.70 Hz  :     126.82 Hz  |      |
| 64 +   0 =  64 :   4000.00 Hz  :   2000.00 Hz  :     31.25 Hz  :     125.00 Hz  |      |
| 64 -   1 =  63 :   3942.65 Hz  :   1971.33 Hz  :     30.80 Hz  :     123.21 Hz  |  B-2 |
| 64 -   2 =  62 :   3886.13 Hz  :   1943.06 Hz  :     30.36 Hz  :     121.44 Hz  |      |
| 64 -   3 =  61 :   3830.41 Hz  :   1915.21 Hz  :     29.93 Hz  :     119.70 Hz  |      |
| 64 -   4 =  60 :   3775.50 Hz  :   1887.75 Hz  :     29.50 Hz  :     117.98 Hz  |      |
| 64 -   5 =  59 :   3721.37 Hz  :   1860.68 Hz  :     29.07 Hz  :     116.29 Hz  |  A#2 |
| 64 -   6 =  58 :   3668.02 Hz  :   1834.01 Hz  :     28.66 Hz  :     114.63 Hz  |      |
| 64 -   7 =  57 :   3615.43 Hz  :   1807.71 Hz  :     28.25 Hz  :     112.98 Hz  |      |
| 64 -   8 =  56 :   3563.59 Hz  :   1781.80 Hz  :     27.84 Hz  :     111.36 Hz  |      |
| 64 -   9 =  55 :   3512.50 Hz  :   1756.25 Hz  :     27.44 Hz  :     109.77 Hz  |  A-2 |
| 64 -  10 =  54 :   3462.15 Hz  :   1731.07 Hz  :     27.05 Hz  :     108.19 Hz  |      |
| 64 -  11 =  53 :   3412.51 Hz  :   1706.26 Hz  :     26.66 Hz  :     106.64 Hz  |      |
| 64 -  12 =  52 :   3363.59 Hz  :   1681.79 Hz  :     26.28 Hz  :     105.11 Hz  |      |
| 64 -  13 =  51 :   3315.36 Hz  :   1657.68 Hz  :     25.90 Hz  :     103.61 Hz  |  G#2 |
| 64 -  14 =  50 :   3267.83 Hz  :   1633.92 Hz  :     25.53 Hz  :     102.12 Hz  |      |
| 64 -  15 =  49 :   3220.98 Hz  :   1610.49 Hz  :     25.16 Hz  :     100.66 Hz  |      |
| 64 -  16 =  48 :   3174.80 Hz  :   1587.40 Hz  :     24.80 Hz  :      99.21 Hz  |      |
| 64 -  17 =  47 :   3129.29 Hz  :   1564.64 Hz  :     24.45 Hz  :      97.79 Hz  |  G-2 |
| 64 -  18 =  46 :   3084.42 Hz  :   1542.21 Hz  :     24.10 Hz  :      96.39 Hz  |      |
| 64 -  19 =  45 :   3040.20 Hz  :   1520.10 Hz  :     23.75 Hz  :      95.01 Hz  |      |
| 64 -  20 =  44 :   2996.61 Hz  :   1498.31 Hz  :     23.41 Hz  :      93.64 Hz  |      |
| 64 -  21 =  43 :   2953.65 Hz  :   1476.83 Hz  :     23.08 Hz  :      92.30 Hz  |  F#2 |
| 64 -  22 =  42 :   2911.31 Hz  :   1455.65 Hz  :     22.74 Hz  :      90.98 Hz  |      |
| 64 -  23 =  41 :   2869.57 Hz  :   1434.78 Hz  :     22.42 Hz  :      89.67 Hz  |      |
| 64 -  24 =  40 :   2828.43 Hz  :   1414.21 Hz  :     22.10 Hz  :      88.39 Hz  |      |
| 64 -  25 =  39 :   2787.88 Hz  :   1393.94 Hz  :     21.78 Hz  :      87.12 Hz  |  F-2 |
| 64 -  26 =  38 :   2747.91 Hz  :   1373.95 Hz  :     21.47 Hz  :      85.87 Hz  |      |
| 64 -  27 =  37 :   2708.51 Hz  :   1354.26 Hz  :     21.16 Hz  :      84.64 Hz  |      |
| 64 -  28 =  36 :   2669.68 Hz  :   1334.84 Hz  :     20.86 Hz  :      83.43 Hz  |      |
| 64 -  29 =  35 :   2631.41 Hz  :   1315.70 Hz  :     20.56 Hz  :      82.23 Hz  |  E-2 |
| 64 -  30 =  34 :   2593.68 Hz  :   1296.84 Hz  :     20.26 Hz  :      81.05 Hz  |      |
| 64 -  31 =  33 :   2556.49 Hz  :   1278.25 Hz  :     19.97 Hz  :      79.89 Hz  |      |
| 64 -  32 =  32 :   2519.84 Hz  :   1259.92 Hz  :     19.69 Hz  :      78.75 Hz  |      |
| 64 -  33 =  31 :   2483.71 Hz  :   1241.85 Hz  :     19.40 Hz  :      77.62 Hz  |  D#2 |
| 64 -  34 =  30 :   2448.10 Hz  :   1224.05 Hz  :     19.12 Hz  :      76.50 Hz  |      |
| 64 -  35 =  29 :   2413.00 Hz  :   1206.50 Hz  :     18.85 Hz  :      75.41 Hz  |      |
| 64 -  36 =  28 :   2378.41 Hz  :   1189.20 Hz  :     18.58 Hz  :      74.33 Hz  |      |
| 64 -  37 =  27 :   2344.31 Hz  :   1172.15 Hz  :     18.31 Hz  :      73.26 Hz  |  D-2 |
| 64 -  38 =  26 :   2310.70 Hz  :   1155.35 Hz  :     18.05 Hz  :      72.21 Hz  |      |
| 64 -  39 =  25 :   2277.57 Hz  :   1138.78 Hz  :     17.79 Hz  :      71.17 Hz  |      |
| 64 -  40 =  24 :   2244.92 Hz  :   1122.46 Hz  :     17.53 Hz  :      70.15 Hz  |      |
| 64 -  41 =  23 :   2212.73 Hz  :   1106.36 Hz  :     17.28 Hz  :      69.15 Hz  |  C#2 |
| 64 -  42 =  22 :   2181.01 Hz  :   1090.50 Hz  :     17.03 Hz  :      68.16 Hz  |      |
| 64 -  43 =  21 :   2149.74 Hz  :   1074.87 Hz  :     16.79 Hz  :      67.18 Hz  |      |
| 64 -  44 =  20 :   2118.92 Hz  :   1059.46 Hz  :     16.55 Hz  :      66.22 Hz  |      |
| 64 -  45 =  19 :   2088.54 Hz  :   1044.27 Hz  :     16.31 Hz  :      65.27 Hz  |  C-2 |
| 64 -  46 =  18 :   2058.60 Hz  :   1029.30 Hz  :     16.08 Hz  :      64.33 Hz  |      |
| 64 -  47 =  17 :   2029.09 Hz  :   1014.54 Hz  :     15.85 Hz  :      63.41 Hz  |      |
| 64 -  48 =  16 :   2000.00 Hz  :   1000.00 Hz  :     15.62 Hz  :      62.50 Hz  |      |
| 64 -  49 =  15 :   1971.32 Hz  :    985.66 Hz  :     15.40 Hz  :      61.60 Hz  |  B-1 |
| 64 -  50 =  14 :   1943.06 Hz  :    971.53 Hz  :     15.18 Hz  :      60.72 Hz  |      |
| 64 -  51 =  13 :   1915.20 Hz  :    957.60 Hz  :     14.96 Hz  :      59.85 Hz  |      |
| 64 -  52 =  12 :   1887.74 Hz  :    943.87 Hz  :     14.74 Hz  :      58.99 Hz  |      |
| 64 -  53 =  11 :   1860.68 Hz  :    930.34 Hz  :     14.53 Hz  :      58.15 Hz  |  A#1 |
| 64 -  54 =  10 :   1834.00 Hz  :    917.00 Hz  :     14.32 Hz  :      57.31 Hz  |      |
| 64 -  55 =   9 :   1807.71 Hz  :    903.85 Hz  :     14.12 Hz  :      56.49 Hz  |      |
| 64 -  56 =   8 :   1781.79 Hz  :    890.89 Hz  :     13.92 Hz  :      55.68 Hz  |      |
| 64 -  57 =   7 :   1756.25 Hz  :    878.12 Hz  :     13.72 Hz  :      54.88 Hz  |  A-1 |
| 64 -  58 =   6 :   1731.07 Hz  :    865.53 Hz  :     13.52 Hz  :      54.10 Hz  |      |
| 64 -  59 =   5 :   1706.25 Hz  :    853.12 Hz  :     13.33 Hz  :      53.32 Hz  |      |
| 64 -  60 =   4 :   1681.79 Hz  :    840.89 Hz  :     13.13 Hz  :      52.56 Hz  |      |
| 64 -  61 =   3 :   1657.68 Hz  :    828.84 Hz  :     12.95 Hz  :      51.80 Hz  |  G#1 |
| 64 -  62 =   2 :   1633.91 Hz  :    816.95 Hz  :     12.76 Hz  :      51.06 Hz  |      |
| 64 -  63 =   1 :   1610.49 Hz  :    805.24 Hz  :     12.58 Hz  :      50.33 Hz  |      |
| 64 -  64 =   0 :   1587.40 Hz  :    793.70 Hz  :     12.40 Hz  :      49.61 Hz  |      |
+----------------+---------------+---------------+---------------+----------------+------+

highest playable audio tone buffered with 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55 lowest playable audio tone buffered with 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF something suit in-between buffered with 0x00 0x00 0xFF 0xFF 0x00 0x00 0xFF 0xFF 0x00 0x00 0xFF 0xFF 0x00 0x00 0xFF 0xFF

The frequency register initialized to 64 when program resets, matching the default 4000 Hz playback rate.

According to the table above, each octaves correspond to the multiply of 48. Instead of 12, this enables composer to access half-semitones. With the precision 48 also enable one to at least match the frequency of A-3, 440 Hz. As approximation from the result of 4000*2**(39/48-4) = 439.06304009332484, instead of precision 12 or 24 that could be approximated with only 4000*2**(10/12-4) = 445.4493590701697

It’s because I want the samples being played without aliasing for the most of pitches, and without clogging the storage. I hate it when I had to create each samples for each frequencies, and ended up doesn’t sound quite well for some.

I hope you’ll make some consideration upon this. I’d very happy when you implemented this suggestion. 🙂

I might participate to this year’s OctoJam after 2 years since, taking an advantage of this functionality.

P.S : Would you don’t mind to initialize audio-buffer with audible buffer instead of silence when program starts? It’s just strange for any native Chip-8 and Superchip programs having no audio at all when they’re buzzing. 😕

Issue Analytics

  • State:closed
  • Created 2 years ago
  • Comments:11 (11 by maintainers)

github_iconTop GitHub Comments

2reactions
Chromatophorecommented, Aug 27, 2021

Hello! Octo’s sound gen has always struck me as though it would be improved with some kind of simple pitch generator that resulted in much nicer, cleaner tones, rather than as a pure 1 bit sample system, and, I think the result of your first stab here: https://github.com/JohnEarnest/Octo/issues/137#issuecomment-903103699 which allows for pitch adjustment of a sample does strike very nicely on what could be ideal for the platform. I believe that most people are likely to want to pursue simple melodies over anything else.

I was interested to have a side by side of ‘what I have achieved before’ with a ‘what I could achieve with this kind of system’

Here is a link to an implementation on the live version of octo of a simple tune. My best attempt with current live Octo: http://johnearnest.github.io/Octo/index.html?key=jXQI7BmF And here is a a quick naive attempt based on your first implementation: https://kouzeru.github.io/Octo/?gist=acb4b7e045ae2c6f746f8cc2e537249bindex.html?key=rpZzedPB

I think this offers a significant improvement and the ‘ease of use’ falls roughly into the same camp as the initial implementation. Fairly simple beeps/boops that can be tuned I think fits well with the 4 colour aesthetic of XO.

As a side note, originally, I was unintentionally sustaining my notes with … vs cutting them as I had wanted to with — (I had yet to understand the system you had built) and I found that this: https://kouzeru.github.io/Octo/?gist=acb4b7e045ae2c6f746f8cc2e537249bindex.html?key=UdN_1wLC quickly built up a noise in my ears that was very, very, uncomfortable and actually ended up distorting my perception of eg the noise in my office room for a short while. I believe this might be related to the issues you have been seeing with the aliasing eg with your saw wave example above. It does seem like there are some significant challenges related to realtime sound generation in a browser.

I think this would be a very big improvement for the XO chip concept, as I completely abandoned musical accompaniment to my attempts at XO games the past 2 years due to the heavy aliasing and subsequently displeasing results.

1reaction
Kouzerucommented, Aug 26, 2021

I’m just going to make another fork for this, the current code is long and ugly, and it was much invasive due to implementation of the other features beside the playback rate. I shouldn’t stick myself with Oscillator Node. I’m going to rewrite this.

Read more comments on GitHub >

github_iconTop Results From Across the Web

Seeking clarification on XO-CHIP audio specs : r/EmuDev
I've spent hours trying to understand how digital audio works and I think I got the basics down. I need to generate a...
Read more >
Timendus/thumby-silicon8: An interpreter for CHIP-8 ... - GitHub
An interpreter for CHIP-8, SCHIP and XO-CHIP in MicroPython for the Thumby ... Right-click on "Games" in the file system tree and select...
Read more >
XO-CHIP/CHIP-8 (JAXE) - Libretro Docs
This extension adds several more instructions and features including: 7 new opcodes; 16-bit addressing for a total of ~64kb RAM; Second display buffer...
Read more >
CHIP-8 extensions and compatibility
It features a 64 x 64 resolution, plus the I/O instructions from CHIP-8X to run Simple Sound and player 2 hexadecimal keyboard. Presumably...
Read more >
What are you making? - Octojam 7 community - itch.io
Wait, why does XO-CHIP not give you space for code? ... is best used for code, high ram can be used for graphics,...
Read more >

github_iconTop Related Medium Post

No results found

github_iconTop Related StackOverflow Question

No results found

github_iconTroubleshoot Live Code

Lightrun enables developers to add logs, metrics and snapshots to live code - no restarts or redeploys required.
Start Free

github_iconTop Related Reddit Thread

No results found

github_iconTop Related Hackernoon Post

No results found

github_iconTop Related Tweet

No results found

github_iconTop Related Dev.to Post

No results found

github_iconTop Related Hashnode Post

No results found