{
 "timestamp": "2026-06-18T15:06:10.757Z",
 "code": "# Source: https://in-thread.sonic-pi.net/t/blues-machine-12-bar-blues-variations/9619\n# Author: rothen_s\n# Title: Blues Machine - 12-Bar-Blues-Variations\n# Captured: 2026-04-24\n\nuse_bpm 80\nuse_random_seed 70\n\n# Chord diffs relative to the root (halftone steps)\ng_chord_diffs = [0, [0,5], 0, 0,\n 5, 5, 0, 0,\n 7, 5, 0, [0,7]]\ng_licks = {\n lick_pause:\n [[:r],[4]],\n lick_cjamblues_1:\n [[3,0,3,0], [0.5,0.5,0.5,2.5]],\n lick_cjamblues_2:\n [[7,5,3,0],[0.5,0.5,0.5,2.5]],\n lick_cjamblues_3:\n [[:r, 0],[2,2]],\n lick_cjamblues_4:\n [[5,3,0,:r],[1,0.5,1.5,1]],\n lick_cjamblues_5:\n [[-2,-2,0,3,0,-2, 0],[0.5,0.5,1.0,0.5,0.5,0.5,0.5]]\n}\n\ng_max = g_licks.length - 1\n\ng_sleep = 4\ng_times = 1\ng_grundton = :C3\ng_note = g_grundton\n\n# Drums\nwith_fx :reverb, room: 0.6, mix: 0.3 do\n live_loop :ll_drums do\n with_fx :compressor, threshold: 0.2, slope_above: 0.5 do\n sample :drum_bass_hard, amp: [1.3,1.5,1.7].choose\n sleep 0.5\n p_times = 1\n if one_in 4 then\n p_times = [1,2,3].choose\n end\n p_times.times do\n sample [:drum_snare_soft, :drum_snare_hard].choose, amp: [1.1,1.4,1.6].choose\n sleep 0.5 / p_times\n end\n end\n end\nend\n\n# Chords\nlive_loop :ll_chords, delay: 8 do\n use_synth :piano\n use_synth_defaults decay: g_sleep, amp: 2\n\n g_chord_diffs.each do |p_diff|\n if p_diff.kind_of?(Array) then\n l_diff = p_diff.choose\n else\n l_diff = p_diff\n end\n g_note = g_grundton + l_diff\n if l_diff == 0 then\n l_chord = (chord g_note, '6')\n else\n l_chord = (chord g_note, '7')\n end\n g_times.times do\n play l_chord\n sleep g_sleep\n end\n end\nend\n\n# Licks\nwith_fx :reverb, room: 0.6, mix: 0.3 do\n live_loop :ll_licks, delay: 8 do\n use_synth :pluck\n use_synth_defaults amp: 4, coef: [0.2,0.3,0.4].choose, sustain: 0.5\n temp_num = rrand_i(0, g_max)\n p_lick = g_licks.values[temp_num]\n l_notes = p_lick[0].map {|a| a + 12 + note_info(g_note).midi_note}\n play_pattern_timed l_notes, p_lick[1]\n end\nend\n\n# Bass\nlive_loop :ll_bass, delay: 4 do\n use_synth :bass_foundation\n l_note = g_note - 24\n play l_note, release: 0.5, amp: 1.5\n sleep 0.5\n play l_note + 7, release: 0.5, amp: 1.2\n sleep 0.5\n play l_note + 12, release: 0.5, amp: 1\n sleep 0.5\n play l_note + 7, release: 0.5, amp: 1.3\n sleep 0.5\nend\n",
 "duration": 30000,
 "name": "comm-in-thread-forum__39_blues_machine",
 "desktop": {
 "wavPath": "/Users/mrityunjaybhardwaj/Documents/projects/sonicPiWeb/.captures/desktop-recordings/desktop_2026-06-18T15-04-55-482Z_comm-in-thread-forum__39_blues_machine.wav",
 "stats": {
 "duration": 31.369333333333334,
 "peak": 1,
 "rms": 0.1219,
 "clipping": 0,
 "sampleRate": 48000,
 "channels": 2
 },
 "ok": true,
 "pitch": {
 "count": 28,
 "median_spacing_s": 0.38,
 "midi": [
 41,
 56,
 42,
 56,
 41,
 56,
 41,
 56,
 43,
 56,
 41,
 43,
 43,
 56,
 41,
 43,
 57,
 55,
 55,
 55,
 55,
 55,
 55,
 55,
 60,
 55,
 55,
 55
 ],
 "pc": [
 5,
 8,
 6,
 8,
 5,
 8,
 5,
 8,
 7,
 8,
 5,
 7,
 7,
 8,
 5,
 7,
 9,
 7,
 7,
 7,
 7,
 7,
 7,
 7,
 0,
 7,
 7,
 7
 ],
 "names": [
 "F2",
 "G#3",
 "F#2",
 "G#3",
 "F2",
 "G#3",
 "F2",
 "G#3",
 "G2",
 "G#3",
 "F2",
 "G2",
 "G2",
 "G#3",
 "F2",
 "G2",
 "A3",
 "G3",
 "G3",
 "G3",
 "G3",
 "G3",
 "G3",
 "G3",
 "C4",
 "G3",
 "G3",
 "G3"
 ],
 "method": "onset",
 "confidence": 1,
 "inconclusive": false,
 "compare": "midi"
 }
 },
 "web": {
 "wavPath": "/Users/mrityunjaybhardwaj/Documents/projects/sonicPiWeb/.captures/2026-06-18T15-04-56-679Z_inline_audio.wav",
 "stats": {
 "duration": 29.696,
 "peak": 0.3805,
 "rms": 0.0639,
 "clipping": 0,
 "sampleRate": 48000,
 "channels": 2
 },
 "ok": true,
 "pitch": {
 "count": 19,
 "median_spacing_s": 0.38,
 "midi": [
 41,
 56,
 40,
 54,
 40,
 54,
 41,
 56,
 43,
 56,
 48,
 43,
 43,
 43,
 41,
 43,
 52,
 52,
 60
 ],
 "pc": [
 5,
 8,
 4,
 6,
 4,
 6,
 5,
 8,
 7,
 8,
 0,
 7,
 7,
 7,
 5,
 7,
 4,
 4,
 0
 ],
 "names": [
 "F2",
 "G#3",
 "E2",
 "F#3",
 "E2",
 "F#3",
 "F2",
 "G#3",
 "G2",
 "G#3",
 "C3",
 "G2",
 "G2",
 "G2",
 "F2",
 "G2",
 "E3",
 "E3",
 "C4"
 ],
 "method": "onset",
 "confidence": 1,
 "inconclusive": false,
 "compare": "midi"
 },
 "toolFailReason": null,
 "errors": []
 },
 "spectrogram": {
 "l2_mel_db": 14.503155708312988,
 "mfcc_distance": 141.6293182373047,
 "frames_compared": 2785,
 "spectrogram_png": "/Users/mrityunjaybhardwaj/Documents/projects/sonicPiWeb/.captures/compare_2026-06-18T15-05-32-682Z_comm-in-thread-forum__39_blues_machine_spectrogram.png",
 "desktop_peak_freq_hz": 196.3382496705912,
 "web_peak_freq_hz": 165.1737607758621,
 "per_beat": null
 },
 "spectrogramError": null,
 "reportPath": "/Users/mrityunjaybhardwaj/Documents/projects/sonicPiWeb/.captures/compare_2026-06-18T15-05-32-682Z_comm-in-thread-forum__39_blues_machine.md",
 "reconciledPitch": null,
 "eventParity": {
 "report": {
 "verdict": "STRUCTURE-DIVERGE",
 "isPrng": true,
 "reasons": [
 "Web DROPPED 1 significant layer(s) desktop produces: pluck×17",
 "Significant-layer first-appearance order differs (desktop: basic_mono_player→bass_foundation→piano→pluck | web: basic_mono_player→bass_foundation→piano) — common for PRNG layer selection."
 ],
 "rows": [
 {
 "synthdef": "sonic-pi-basic_mono_player",
 "desktop": 91,
 "web": 89,
 "ratio": 0.978021978021978,
 "significant": true,
 "status": "match",
 "desktopOnset": 0,
 "webOnset": 0
 },
 {
 "synthdef": "sonic-pi-bass_foundation",
 "desktop": 76,
 "web": 74,
 "ratio": 0.9736842105263158,
 "significant": true,
 "status": "match",
 "desktopOnset": 3,
 "webOnset": 3
 },
 {
 "synthdef": "sonic-pi-piano",
 "desktop": 36,
 "web": 36,
 "ratio": 1,
 "significant": true,
 "status": "match",
 "desktopOnset": 6,
 "webOnset": 6
 },
 {
 "synthdef": "sonic-pi-pluck",
 "desktop": 17,
 "web": 0,
 "ratio": 0,
 "significant": true,
 "status": "only-desktop",
 "desktopOnset": 7.5,
 "webOnset": null
 }
 ],
 "fxRows": [
 {
 "synthdef": "sonic-pi-fx_compressor",
 "desktop": 42,
 "web": 41,
 "ratio": 0.9761904761904762,
 "significant": true,
 "status": "match",
 "desktopOnset": 0,
 "webOnset": -2.007
 },
 {
 "synthdef": "sonic-pi-fx_reverb",
 "desktop": 2,
 "web": 2,
 "ratio": 1,
 "significant": false,
 "status": "match",
 "desktopOnset": null,
 "webOnset": -2.007
 }
 ],
 "desktopTotal": 220,
 "webTotal": 199,
 "totalRatio": 0.9,
 "orderMatch": false,
 "desktopOrder": [
 "basic_mono_player",
 "bass_foundation",
 "piano",
 "pluck"
 ],
 "webOrder": [
 "basic_mono_player",
 "bass_foundation",
 "piano"
 ],
 "sequenceParity": {
 "match": false,
 "epsilonMs": 15,
 "notesChecked": true,
 "rows": [
 {
 "synthdef": "sonic-pi-basic_mono_player",
 "desktopOnsets": [
 0,
 0.375,
 0.563,
 0.75,
 1.125,
 1.5,
 1.875,
 2.25,
 2.625,
 3,
 3.375,
 3.75,
 4.125,
 4.5,
 4.875,
 5.25,
 5.625,
 6,
 6.375,
 6.75,
 7.125,
 7.5,
 7.875,
 8.25,
 8.625,
 9,
 9.375,
 9.75,
 10.125,
 10.25,
 10.375,
 10.5,
 10.875,
 11.25,
 11.625,
 11.813,
 12,
 12.375,
 12.75,
 13.125,
 13.5,
 13.875,
 14.25,
 14.625,
 15,
 15.375,
 15.75,
 16.125,
 16.5,
 16.875,
 17.25,
 17.625,
 18,
 18.375,
 18.75,
 19.125,
 19.5,
 19.875,
 20.25,
 20.625,
 21,
 21.375,
 21.75,
 22.125,
 22.5,
 22.875,
 23.25,
 23.625,
 24,
 24.375,
 24.5,
 24.625,
 24.75,
 25.125,
 25.5,
 25.875,
 26.25,
 26.625,
 27,
 27.375,
 27.75,
 28.125,
 28.313,
 28.5,
 28.875,
 29.25,
 29.625,
 30,
 30.375,
 30.75,
 31.125
 ],
 "webOnsets": [
 0,
 0.375,
 0.563,
 0.75,
 1.125,
 1.5,
 1.875,
 2.25,
 2.625,
 3,
 3.375,
 3.75,
 4.125,
 4.5,
 4.875,
 5.25,
 5.625,
 6,
 6.375,
 6.75,
 7.125,
 7.5,
 7.875,
 8.25,
 8.625,
 9,
 9.375,
 9.75,
 10.125,
 10.25,
 10.375,
 10.5,
 10.875,
 11.25,
 11.625,
 11.813,
 12,
 12.375,
 12.75,
 13.125,
 13.5,
 13.875,
 14.25,
 14.625,
 15,
 15.375,
 15.75,
 16.125,
 16.5,
 16.875,
 17.25,
 17.625,
 18,
 18.375,
 18.75,
 19.125,
 19.5,
 19.875,
 20.25,
 20.625,
 21,
 21.375,
 21.75,
 22.125,
 22.5,
 22.875,
 23.25,
 23.625,
 24,
 24.375,
 24.5,
 24.625,
 24.75,
 25.125,
 25.5,
 25.875,
 26.25,
 26.625,
 27,
 27.375,
 27.75,
 28.125,
 28.313,
 28.5,
 28.875,
 29.25,
 29.625,
 30,
 30.375
 ],
 "comparedLen": 89,
 "timingMatched": true,
 "firstMismatchIdx": -1,
 "maxDevMs": 0,
 "noteMatched": true,
 "matched": true
 },
 {
 "synthdef": "sonic-pi-bass_foundation",
 "desktopOnsets": [
 3,
 3.375,
 3.75,
 4.125,
 4.5,
 4.875,
 5.25,
 5.625,
 6,
 6.375,
 6.75,
 7.125,
 7.5,
 7.875,
 8.25,
 8.625,
 9,
 9.375,
 9.75,
 10.125,
 10.5,
 10.875,
 11.25,
 11.625,
 12,
 12.375,
 12.75,
 13.125,
 13.5,
 13.875,
 14.25,
 14.625,
 15,
 15.375,
 15.75,
 16.125,
 16.5,
 16.875,
 17.25,
 17.625,
 18,
 18.375,
 18.75,
 19.125,
 19.5,
 19.875,
 20.25,
 20.625,
 21,
 21.375,
 21.75,
 22.125,
 22.5,
 22.875,
 23.25,
 23.625,
 24,
 24.375,
 24.75,
 25.125,
 25.5,
 25.875,
 26.25,
 26.625,
 27,
 27.375,
 27.75,
 28.125,
 28.5,
 28.875,
 29.25,
 29.625,
 30,
 30.375,
 30.75,
 31.125
 ],
 "webOnsets": [
 3,
 3.375,
 3.75,
 4.125,
 4.5,
 4.875,
 5.25,
 5.625,
 6,
 6.375,
 6.75,
 7.125,
 7.5,
 7.875,
 8.25,
 8.625,
 9,
 9.375,
 9.75,
 10.125,
 10.5,
 10.875,
 11.25,
 11.625,
 12,
 12.375,
 12.75,
 13.125,
 13.5,
 13.875,
 14.25,
 14.625,
 15,
 15.375,
 15.75,
 16.125,
 16.5,
 16.875,
 17.25,
 17.625,
 18,
 18.375,
 18.75,
 19.125,
 19.5,
 19.875,
 20.25,
 20.625,
 21,
 21.375,
 21.75,
 22.125,
 22.5,
 22.875,
 23.25,
 23.625,
 24,
 24.375,
 24.75,
 25.125,
 25.5,
 25.875,
 26.25,
 26.625,
 27,
 27.375,
 27.75,
 28.125,
 28.5,
 28.875,
 29.25,
 29.625,
 30,
 30.375
 ],
 "comparedLen": 74,
 "timingMatched": true,
 "firstMismatchIdx": -1,
 "maxDevMs": 0,
 "noteMatched": false,
 "matched": false
 },
 {
 "synthdef": "sonic-pi-piano",
 "desktopOnsets": [
 6,
 6,
 6,
 6,
 9,
 9,
 9,
 9,
 12,
 12,
 12,
 12,
 15,
 15,
 15,
 15,
 18,
 18,
 18,
 18,
 21,
 21,
 21,
 21,
 24,
 24,
 24,
 24,
 27,
 27,
 27,
 27,
 30,
 30,
 30,
 30
 ],
 "webOnsets": [
 6,
 6,
 6,
 6,
 9,
 9,
 9,
 9,
 12,
 12,
 12,
 12,
 15,
 15,
 15,
 15,
 18,
 18,
 18,
 18,
 21,
 21,
 21,
 21,
 24,
 24,
 24,
 24,
 27,
 27,
 27,
 27,
 30,
 30,
 30,
 30
 ],
 "comparedLen": 36,
 "timingMatched": true,
 "firstMismatchIdx": -1,
 "maxDevMs": 0,
 "noteMatched": true,
 "matched": true
 }
 ],
 "reasons": [
 "basic_mono_player: 89 onsets match within ε (max Δ 0ms), notes match",
 "bass_foundation: onset times match but per-tick NOTE multiset differs — wrong notes (transposition?)",
 "piano: 36 onsets match within ε (max Δ 0ms), notes match"
 ]
 }
 },
 "note": "STRUCTURE-DIVERGE · onset-seq diverge · d220/w199"
 }
}