multimodalart HF Staff commited on
Commit
f2b3fb0
·
verified ·
1 Parent(s): 88a9db2

Upload index.html with huggingface_hub

Browse files
Files changed (1) hide show
  1. index.html +13 -2
index.html CHANGED
@@ -27,7 +27,7 @@ html,body{background:#161719;overflow:hidden}
27
  function initMidi(a){ midiDevs=[]; let ep=1; for(const i of a.inputs.values()){ i.onmidimessage=onMidi; midiDevs.push({name:i.name||("MIDI "+ep),endpoint:ep,port:i}); ep++; } pushMidi(); }
28
  if(navigator.requestMIDIAccess){ navigator.requestMIDIAccess().then(a=>{ initMidi(a); a.onstatechange=()=>initMidi(a); }).catch(()=>{}); }
29
  let playing=false, ctx=null, analyser=null, gain=null, vol=1, muted=false, midigate=false, bypassed=false, nextTime=0, client=null, freq=null;
30
- let sessionLen=120, budget=120, lastBT=0, mtick=0, settingsOpen=false, resetSeq=0, seedVal=0, bankVer=0, bankOp=null;
31
  const US=s=>{ if(window.updateState) window.updateState(s); };
32
 
33
  window.webkit={ messageHandlers:{ auHost:{ postMessage:handle } } };
@@ -61,6 +61,8 @@ html,body{background:#161719;overflow:hidden}
61
  case 'selectMidiSource': selMidi=m.endpoint||0; US({computerKeyboardMidi:(selMidi===0)}); pushMidi(); break;
62
  case 'kbdNote': if(m.on)activeNotes.add(m.note); else activeNotes.delete(m.note); US({activeNotes:[...activeNotes]}); applyVol(); setStyle(lastData||[{text:'instrumental music',weight:1}]); break;
63
  case 'gpuSession': sessionLen=+m.value; if(!playing)budget=sessionLen; emitGpu(); break;
 
 
64
  case 'saveBank': bankOp={action:"save",idx:m.index||0,ver:++bankVer}; if(lastData)setStyle(lastData); setTimeout(refreshBanks,600); break;
65
  case 'loadBank': bankOp={action:"load",idx:m.index||0,ver:++bankVer}; if(lastData)setStyle(lastData); break;
66
  case 'checkBanks': refreshBanks(); break;
@@ -88,6 +90,15 @@ html,body{background:#161719;overflow:hidden}
88
  lastData[idx].isAudio=true; lastData[idx].text=file.name; US({prompt:file.name,isAudioPrompt:true}); setStyle(lastData);
89
  }catch(e){ console.warn("audio prompt failed",e); } };
90
  inp.click(); }
 
 
 
 
 
 
 
 
 
91
  function clearAudio(idx){ fetch("/audio",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({session_id:SID,slot:idx,samples:""})}).catch(()=>{});
92
  if(lastData&&lastData[idx])lastData[idx].isAudio=false; US({isAudioPrompt:false}); if(lastData)setStyle(lastData); }
93
  async function setStyle(data){
@@ -95,7 +106,7 @@ html,body{background:#161719;overflow:hidden}
95
  try{ await fetch("/set",{method:"POST",headers:{"Content-Type":"application/json"},
96
  body:JSON.stringify({session_id:SID,prompts:data.map(d=>(d&&d.text)||""),weights:data.map(d=>(d&&d.weight)||0),audio:data.map(d=>!!(d&&d.isAudio)),
97
  temperature:params.temperature,top_k:params.topk|0,cfg:params.cfg,cfg_notes:params.cfgnotes,cfg_drums:params.cfgdrums,buffer:params.buffer|0,
98
- notes:[...activeNotes],unmaskwidth:params.unmaskwidth|0,drumless:!!params.drumless,onsetmode:!!params.onsetmode,reset:resetSeq,seed:seedVal,bank_op:bankOp,model:currentModel})}); }catch(e){}
99
  }
100
  function playChunk(b64){
101
  const bin=atob(b64),by=new Uint8Array(bin.length); for(let i=0;i<bin.length;i++)by[i]=bin.charCodeAt(i);
 
27
  function initMidi(a){ midiDevs=[]; let ep=1; for(const i of a.inputs.values()){ i.onmidimessage=onMidi; midiDevs.push({name:i.name||("MIDI "+ep),endpoint:ep,port:i}); ep++; } pushMidi(); }
28
  if(navigator.requestMIDIAccess){ navigator.requestMIDIAccess().then(a=>{ initMidi(a); a.onstatechange=()=>initMidi(a); }).catch(()=>{}); }
29
  let playing=false, ctx=null, analyser=null, gain=null, vol=1, muted=false, midigate=false, bypassed=false, nextTime=0, client=null, freq=null;
30
+ let sessionLen=120, budget=120, lastBT=0, mtick=0, settingsOpen=false, resetSeq=0, seedVal=0, bankVer=0, bankOp=null, prefillVer=0, prefillOp=null;
31
  const US=s=>{ if(window.updateState) window.updateState(s); };
32
 
33
  window.webkit={ messageHandlers:{ auHost:{ postMessage:handle } } };
 
61
  case 'selectMidiSource': selMidi=m.endpoint||0; US({computerKeyboardMidi:(selMidi===0)}); pushMidi(); break;
62
  case 'kbdNote': if(m.on)activeNotes.add(m.note); else activeNotes.delete(m.note); US({activeNotes:[...activeNotes]}); applyVol(); setStyle(lastData||[{text:'instrumental music',weight:1}]); break;
63
  case 'gpuSession': sessionLen=+m.value; if(!playing)budget=sessionLen; emitGpu(); break;
64
+ case 'silentPrefill': resetSeq++; US({audioPrefillStatus:'Success'}); if(lastData)setStyle(lastData); break;
65
+ case 'audioPrefill': pickPrefill(); break;
66
  case 'saveBank': bankOp={action:"save",idx:m.index||0,ver:++bankVer}; if(lastData)setStyle(lastData); setTimeout(refreshBanks,600); break;
67
  case 'loadBank': bankOp={action:"load",idx:m.index||0,ver:++bankVer}; if(lastData)setStyle(lastData); break;
68
  case 'checkBanks': refreshBanks(); break;
 
90
  lastData[idx].isAudio=true; lastData[idx].text=file.name; US({prompt:file.name,isAudioPrompt:true}); setStyle(lastData);
91
  }catch(e){ console.warn("audio prompt failed",e); } };
92
  inp.click(); }
93
+ function pickPrefill(){ const inp=document.createElement("input"); inp.type="file"; inp.accept="audio/*";
94
+ inp.onchange=async()=>{ const file=inp.files&&inp.files[0]; if(!file)return;
95
+ try{ const ac=new (window.AudioContext||window.webkitAudioContext)({sampleRate:48000}); const ab=await ac.decodeAudioData(await file.arrayBuffer()); ac.close();
96
+ const n=Math.min(ab.length,48000*10), L=ab.getChannelData(0), R=ab.numberOfChannels>1?ab.getChannelData(1):L, inter=new Float32Array(n*2);
97
+ for(let i=0;i<n;i++){ inter[2*i]=L[i]; inter[2*i+1]=R[i]; }
98
+ await fetch("/prefill",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({session_id:SID,samples:b64enc(new Uint8Array(inter.buffer))})});
99
+ prefillOp={action:"audio",ver:++prefillVer}; US({audioPrefillStatus:"Success"}); if(lastData)setStyle(lastData);
100
+ }catch(e){ console.warn("prefill failed",e); US({audioPrefillStatus:"Failed"}); } };
101
+ inp.click(); }
102
  function clearAudio(idx){ fetch("/audio",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({session_id:SID,slot:idx,samples:""})}).catch(()=>{});
103
  if(lastData&&lastData[idx])lastData[idx].isAudio=false; US({isAudioPrompt:false}); if(lastData)setStyle(lastData); }
104
  async function setStyle(data){
 
106
  try{ await fetch("/set",{method:"POST",headers:{"Content-Type":"application/json"},
107
  body:JSON.stringify({session_id:SID,prompts:data.map(d=>(d&&d.text)||""),weights:data.map(d=>(d&&d.weight)||0),audio:data.map(d=>!!(d&&d.isAudio)),
108
  temperature:params.temperature,top_k:params.topk|0,cfg:params.cfg,cfg_notes:params.cfgnotes,cfg_drums:params.cfgdrums,buffer:params.buffer|0,
109
+ notes:[...activeNotes],unmaskwidth:params.unmaskwidth|0,drumless:!!params.drumless,onsetmode:!!params.onsetmode,reset:resetSeq,seed:seedVal,bank_op:bankOp,prefill_op:prefillOp,model:currentModel})}); }catch(e){}
110
  }
111
  function playChunk(b64){
112
  const bin=atob(b64),by=new Uint8Array(bin.length); for(let i=0;i<bin.length;i++)by[i]=bin.charCodeAt(i);