A new feature for the XO-Chip sound system
See original GitHub issueGreetings, 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:
- Created 2 years ago
- Comments:11 (11 by maintainers)
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.
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.