@@ -20,10 +20,138 @@ Pattern.prototype.supradough = function () {
2020 return this . onTrigger ( ( _ , hap , __ , cps , begin ) => {
2121 hap . value . _begin = begin ;
2222 hap . value . _duration = hap . duration / cps ;
23-
24- if ( ! doughWorklet ) {
25- initDoughWorklet ( ) ;
26- }
27- doughWorklet . port . postMessage ( hap . value ) ;
23+ ! doughWorklet && initDoughWorklet ( ) ;
24+ doughWorklet . port . postMessage ( { spawn : hap . value } ) ;
2825 } , 1 ) ;
2926} ;
27+
28+ async function loadSampleChannels ( url ) {
29+ const buffer = await fetch ( url )
30+ . then ( ( res ) => res . arrayBuffer ( ) )
31+ . then ( ( buf ) => getAudioContext ( ) . decodeAudioData ( buf ) ) ;
32+ // console.log('buffer', buffer, buffer.numberOfChannels);
33+ let channels = [ ] ;
34+ for ( let i = 0 ; i < buffer . numberOfChannels ; i ++ ) {
35+ channels . push ( buffer . getChannelData ( i ) ) ;
36+ }
37+ return channels ;
38+ }
39+
40+ let samples = {
41+ casio : [
42+ 'https://raw.githubusercontent.com/tidalcycles/Dirt-Samples/master/casio/high.wav' ,
43+ 'https://raw.githubusercontent.com/tidalcycles/Dirt-Samples/master/casio/low.wav' ,
44+ 'https://raw.githubusercontent.com/tidalcycles/Dirt-Samples/master/casio/noise.wav' ,
45+ ] ,
46+ crow : [
47+ 'https://raw.githubusercontent.com/tidalcycles/Dirt-Samples/master/crow/000_crow.wav' ,
48+ 'https://raw.githubusercontent.com/tidalcycles/Dirt-Samples/master/crow/001_crow2.wav' ,
49+ 'https://raw.githubusercontent.com/tidalcycles/Dirt-Samples/master/crow/002_crow3.wav' ,
50+ 'https://raw.githubusercontent.com/tidalcycles/Dirt-Samples/master/crow/003_crow4.wav' ,
51+ ] ,
52+ insect : [
53+ 'https://raw.githubusercontent.com/tidalcycles/Dirt-Samples/master/insect/000_everglades_conehead.wav' ,
54+ 'https://raw.githubusercontent.com/tidalcycles/Dirt-Samples/master/insect/001_robust_shieldback.wav' ,
55+ 'https://raw.githubusercontent.com/tidalcycles/Dirt-Samples/master/insect/002_seashore_meadow_katydid.wav' ,
56+ ] ,
57+ wind : [
58+ 'https://raw.githubusercontent.com/tidalcycles/Dirt-Samples/master/wind/000_wind1.wav' ,
59+ 'https://raw.githubusercontent.com/tidalcycles/Dirt-Samples/master/wind/001_wind10.wav' ,
60+ 'https://raw.githubusercontent.com/tidalcycles/Dirt-Samples/master/wind/002_wind2.wav' ,
61+ 'https://raw.githubusercontent.com/tidalcycles/Dirt-Samples/master/wind/003_wind3.wav' ,
62+ 'https://raw.githubusercontent.com/tidalcycles/Dirt-Samples/master/wind/004_wind4.wav' ,
63+ 'https://raw.githubusercontent.com/tidalcycles/Dirt-Samples/master/wind/005_wind5.wav' ,
64+ 'https://raw.githubusercontent.com/tidalcycles/Dirt-Samples/master/wind/006_wind6.wav' ,
65+ 'https://raw.githubusercontent.com/tidalcycles/Dirt-Samples/master/wind/007_wind7.wav' ,
66+ 'https://raw.githubusercontent.com/tidalcycles/Dirt-Samples/master/wind/008_wind8.wav' ,
67+ 'https://raw.githubusercontent.com/tidalcycles/Dirt-Samples/master/wind/009_wind9.wav' ,
68+ ] ,
69+ jazz : [
70+ 'https://raw.githubusercontent.com/tidalcycles/Dirt-Samples/master/jazz/000_BD.wav' ,
71+ 'https://raw.githubusercontent.com/tidalcycles/Dirt-Samples/master/jazz/001_CB.wav' ,
72+ 'https://raw.githubusercontent.com/tidalcycles/Dirt-Samples/master/jazz/002_FX.wav' ,
73+ 'https://raw.githubusercontent.com/tidalcycles/Dirt-Samples/master/jazz/003_HH.wav' ,
74+ 'https://raw.githubusercontent.com/tidalcycles/Dirt-Samples/master/jazz/004_OH.wav' ,
75+ 'https://raw.githubusercontent.com/tidalcycles/Dirt-Samples/master/jazz/005_P1.wav' ,
76+ 'https://raw.githubusercontent.com/tidalcycles/Dirt-Samples/master/jazz/006_P2.wav' ,
77+ 'https://raw.githubusercontent.com/tidalcycles/Dirt-Samples/master/jazz/007_SN.wav' ,
78+ ] ,
79+ metal : [
80+ 'https://raw.githubusercontent.com/tidalcycles/Dirt-Samples/master/metal/000_0.wav' ,
81+ 'https://raw.githubusercontent.com/tidalcycles/Dirt-Samples/master/metal/001_1.wav' ,
82+ 'https://raw.githubusercontent.com/tidalcycles/Dirt-Samples/master/metal/002_2.wav' ,
83+ 'https://raw.githubusercontent.com/tidalcycles/Dirt-Samples/master/metal/003_3.wav' ,
84+ 'https://raw.githubusercontent.com/tidalcycles/Dirt-Samples/master/metal/004_4.wav' ,
85+ 'https://raw.githubusercontent.com/tidalcycles/Dirt-Samples/master/metal/005_5.wav' ,
86+ 'https://raw.githubusercontent.com/tidalcycles/Dirt-Samples/master/metal/006_6.wav' ,
87+ 'https://raw.githubusercontent.com/tidalcycles/Dirt-Samples/master/metal/007_7.wav' ,
88+ 'https://raw.githubusercontent.com/tidalcycles/Dirt-Samples/master/metal/008_8.wav' ,
89+ 'https://raw.githubusercontent.com/tidalcycles/Dirt-Samples/master/metal/009_9.wav' ,
90+ ] ,
91+ east : [
92+ 'https://raw.githubusercontent.com/tidalcycles/Dirt-Samples/master/east/000_nipon_wood_block.wav' ,
93+ 'https://raw.githubusercontent.com/tidalcycles/Dirt-Samples/master/east/001_ohkawa_mute.wav' ,
94+ 'https://raw.githubusercontent.com/tidalcycles/Dirt-Samples/master/east/002_ohkawa_open.wav' ,
95+ 'https://raw.githubusercontent.com/tidalcycles/Dirt-Samples/master/east/003_shime_hi.wav' ,
96+ 'https://raw.githubusercontent.com/tidalcycles/Dirt-Samples/master/east/004_shime_hi_2.wav' ,
97+ 'https://raw.githubusercontent.com/tidalcycles/Dirt-Samples/master/east/005_shime_mute.wav' ,
98+ 'https://raw.githubusercontent.com/tidalcycles/Dirt-Samples/master/east/006_taiko_1.wav' ,
99+ 'https://raw.githubusercontent.com/tidalcycles/Dirt-Samples/master/east/007_taiko_2.wav' ,
100+ 'https://raw.githubusercontent.com/tidalcycles/Dirt-Samples/master/east/008_taiko_3.wav' ,
101+ ] ,
102+ space : [
103+ 'https://raw.githubusercontent.com/tidalcycles/Dirt-Samples/master/space/000_0.wav' ,
104+ 'https://raw.githubusercontent.com/tidalcycles/Dirt-Samples/master/space/001_1.wav' ,
105+ 'https://raw.githubusercontent.com/tidalcycles/Dirt-Samples/master/space/002_11.wav' ,
106+ 'https://raw.githubusercontent.com/tidalcycles/Dirt-Samples/master/space/003_12.wav' ,
107+ 'https://raw.githubusercontent.com/tidalcycles/Dirt-Samples/master/space/004_13.wav' ,
108+ 'https://raw.githubusercontent.com/tidalcycles/Dirt-Samples/master/space/005_14.wav' ,
109+ 'https://raw.githubusercontent.com/tidalcycles/Dirt-Samples/master/space/006_15.wav' ,
110+ 'https://raw.githubusercontent.com/tidalcycles/Dirt-Samples/master/space/007_16.wav' ,
111+ 'https://raw.githubusercontent.com/tidalcycles/Dirt-Samples/master/space/008_17.wav' ,
112+ 'https://raw.githubusercontent.com/tidalcycles/Dirt-Samples/master/space/009_18.wav' ,
113+ 'https://raw.githubusercontent.com/tidalcycles/Dirt-Samples/master/space/010_2.wav' ,
114+ 'https://raw.githubusercontent.com/tidalcycles/Dirt-Samples/master/space/011_3.wav' ,
115+ 'https://raw.githubusercontent.com/tidalcycles/Dirt-Samples/master/space/012_4.wav' ,
116+ 'https://raw.githubusercontent.com/tidalcycles/Dirt-Samples/master/space/013_5.wav' ,
117+ 'https://raw.githubusercontent.com/tidalcycles/Dirt-Samples/master/space/014_6.wav' ,
118+ 'https://raw.githubusercontent.com/tidalcycles/Dirt-Samples/master/space/015_7.wav' ,
119+ 'https://raw.githubusercontent.com/tidalcycles/Dirt-Samples/master/space/016_8.wav' ,
120+ 'https://raw.githubusercontent.com/tidalcycles/Dirt-Samples/master/space/017_9.wav' ,
121+ ] ,
122+ numbers : [
123+ 'https://raw.githubusercontent.com/tidalcycles/Dirt-Samples/master/numbers/0.wav' ,
124+ 'https://raw.githubusercontent.com/tidalcycles/Dirt-Samples/master/numbers/1.wav' ,
125+ 'https://raw.githubusercontent.com/tidalcycles/Dirt-Samples/master/numbers/2.wav' ,
126+ 'https://raw.githubusercontent.com/tidalcycles/Dirt-Samples/master/numbers/3.wav' ,
127+ 'https://raw.githubusercontent.com/tidalcycles/Dirt-Samples/master/numbers/4.wav' ,
128+ 'https://raw.githubusercontent.com/tidalcycles/Dirt-Samples/master/numbers/5.wav' ,
129+ 'https://raw.githubusercontent.com/tidalcycles/Dirt-Samples/master/numbers/6.wav' ,
130+ 'https://raw.githubusercontent.com/tidalcycles/Dirt-Samples/master/numbers/7.wav' ,
131+ 'https://raw.githubusercontent.com/tidalcycles/Dirt-Samples/master/numbers/8.wav' ,
132+ ] ,
133+ piano : [ 'https://raw.githubusercontent.com/felixroos/dough-samples/refs/heads/main/piano/A3v8.mp3' ] ,
134+ flute : [ 'https://raw.githubusercontent.com/felixroos/samples/refs/heads/main/flute/c4.mp3' ] ,
135+ bd : [
136+ 'https://raw.githubusercontent.com/geikha/tidal-drum-machines/15eac73c5e878550f91d864a4863e014799403f1/machines/RolandTR909/rolandtr909-bd/Bassdrum-01.wav' ,
137+ ] ,
138+ } ;
139+ // for some reason, only piano and flute work.. is it because mp3??
140+
141+ let loaded = false ;
142+ export async function doughsample ( ) {
143+ ! doughWorklet && initDoughWorklet ( ) ;
144+ if ( loaded ) {
145+ return ;
146+ }
147+ loaded = true ;
148+ const sampleMap = await Promise . all (
149+ Object . entries ( samples ) . map ( async ( [ key , url ] ) => {
150+ url = url [ 0 ] ;
151+ console . log ( key , 'url' , url ) ;
152+ return [ key , await loadSampleChannels ( url ) ] ;
153+ } ) ,
154+ ) ;
155+ console . log ( 'sampleMap' , sampleMap ) ;
156+ doughWorklet . port . postMessage ( { samples : sampleMap } ) ;
157+ }
0 commit comments