From 1a54037c743818d5fe6dd7d40aedb62609be0dfe Mon Sep 17 00:00:00 2001 From: Adam Oswald Date: Wed, 12 Oct 2022 12:26:14 -0400 Subject: [PATCH 1/2] Add files via upload --- base.mid | Bin 0 -> 168 bytes build.bat.txt | 1 + bundle.js | 1047 +++++++++++++++++++++++++++++++++++++++++++++ chord.wav | Bin 0 -> 97016 bytes index.html | 687 +++++++++++++++++++++++++++++ main.js | 339 +++++++++++++++ package-lock.json | 11 + tokens.txt | 768 +++++++++++++++++++++++++++++++++ 8 files changed, 2853 insertions(+) create mode 100644 base.mid create mode 100644 build.bat.txt create mode 100644 bundle.js create mode 100644 chord.wav create mode 100644 index.html create mode 100644 main.js create mode 100644 package-lock.json create mode 100644 tokens.txt diff --git a/base.mid b/base.mid new file mode 100644 index 0000000000000000000000000000000000000000..9717282aad8486e9aaefa8ca2b8dd56d180ecc74 GIT binary patch literal 168 zcmeYb$w*;fU|?flWZ+^j@C_--2J*NW4lpn@02%-F8K6S!3 { + var content = new Uint8Array(readerEvent.target.result); + var midiData = parseMidi(content); + console.log(midiData); + + var mergedTrack = []; + var originalOrder = 0; + for (var i=0; i b.startTime) { return 1; } + if(a.originalOrder < b.originalOrder) { return -1; } + if(a.originalOrder > b.originalOrder) { return 1; } + return 0; + }) + + document.getElementById("piano").checked = false; + document.getElementById("strings").checked = false; + document.getElementById("winds").checked = false; + document.getElementById("drums").checked = false; + document.getElementById("harp").checked = false; + document.getElementById("guitar").checked = false; + document.getElementById("bass").checked = false; + + var encoded = ""; + var currentInsts = [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]; + for (var i=0; i 0) { + var waitTime = timeLeftToWait > 128 ? 128 : timeLeftToWait; + var token = 3968 + waitTime - 1; + encoded += token + " "; + timeLeftToWait -= waitTime; + } + + if (event.type == "programChange") { + currentInsts[event.channel] = event.programNumber; + } + var currentInst = currentInsts[event.channel]; + var inst; + var baseNoteOn; + var baseNoteOff; + var checkboxID; + if ([40,41,44,45,48,49,50,51].indexOf(currentInst) > -1) { + inst = "violin"; + baseNoteOn = 14*128; + baseNoteOff = 15*128; + checkboxID = "strings"; + } else if ([42,43].indexOf(currentInst) > -1) { + inst = "cello"; + baseNoteOn = 16*128; + baseNoteOff = 17*128; + checkboxID = "strings"; + } else if ([32,33,34,35,36,37,38,39].indexOf(currentInst) > -1) { + inst = "bass"; + baseNoteOn = 18*128; + baseNoteOff = 19*128; + checkboxID = "bass"; + } else if ([24,25,26,27,28,29,30,31].indexOf(currentInst) > -1) { + inst = "guitar"; + baseNoteOn = 20*128; + baseNoteOff = 21*128; + checkboxID = "guitar"; + } else if ([72,73,74,75,76,77,78,79].indexOf(currentInst) > -1) { + inst = "flute"; + baseNoteOn = 22*128; + baseNoteOff = 23*128; + checkboxID = "winds"; + } else if ([64,65,66,67,68,69,70,71].indexOf(currentInst) > -1) { + inst = "clarinet"; + baseNoteOn = 24*128; + baseNoteOff = 25*128; + checkboxID = "winds"; + } else if ([56,57,58,59,60,61,62,63].indexOf(currentInst) > -1) { + inst = "trumpet"; + baseNoteOn = 26*128; + baseNoteOff = 27*128; + checkboxID = "winds"; + } else if ([46].indexOf(currentInst) > -1) { + inst = "harp"; + baseNoteOn = 28*128; + baseNoteOff = 29*128; + checkboxID = "harp"; + } else { + inst = "piano"; + baseNoteOn = 8*128; + baseNoteOff = 0*128; + checkboxID = "piano"; + } + + if (event.channel == 9) { + inst = "drum"; + baseNoteOn = 3840; + baseNoteOff = null; + checkboxID = "drums"; + } + if (event.type == "noteOff" || (event.type == "noteOn" && event.velocity==0)) { + if (baseNoteOff !== null) { + token = baseNoteOff + event.noteNumber; + encoded += token + " "; + } + } else if (event.type == "noteOn" && event.velocity > 0) { + token = baseNoteOn + event.noteNumber; + encoded += token + " "; + document.getElementById(checkboxID).checked = true; + } + } + + document.getElementById("inbox").value = encoded.trim(); + window.encodingToMidiFile(document.getElementById("inbox").value, "download_inbox"); + } +} + +var ding = new Audio('chord.wav'); +ding.volume = 0.1; + +window.extend = function() { + document.getElementById("button").disabled = true; + document.getElementById("loader-inner").style.animation = "progress 60s linear both"; + var genreList = ["chopin","mozart","rachmaninoff","ladygaga","country","disney","jazz","bach","beethoven","journey","thebeatles","video","broadway","franksinatra","bluegrass","tchaikovsky","liszt","everything","ragtime","andrehazes","cocciante","thecranberries","ligabue","metallica","traffic","philcollins","nineinchnails","thepretenders","sugarray","grandfunkrailroad","ron","ellington","fleetwoodmac","thebeachboys","kool & the gang","foreigner","tlc","scottjames","benfoldsfive","smashmouth","oasis","allsaints","donnasummer","weezer","bjork","mariahcarey","berte","cheaptrick","caroleking","thecars","gganderson","robertpalmer","zucchero","alicecooper","vanhalen","brucehornsby","coolio","jimmybuffett","lobo","badcompany","eminem","creedenceclearwaterrevival","deeppurple","shearinggeorge","robbiewilliams","dalla","ub40","lindaronstadt","sinatra","inxs","jonimitchell","michaeljackson","last","devo","shaniatwain","korn","brooksgarth","sweet","thewho","roxette","bowiedavid","beegees","renefroger","mina","estefangloria","mccartney","theventures","carboni","simplyred","santana","jewel","meatloaf","giorgia","nofx","rickymartin","thecure","thetemptations","tozzi","beck","eiffel65","jenniferlopez","reelbigfish","patsycline","richardcliff","styx","acdc","brucespringsteen","michaelgeorge","blondie","pinkfloyd","oldfieldmike","redhotchilipeppers","therollingstones","morandi","heart","robertaflack","pantera","alabama","jethrotull","hanson","mosch","ludwigvanbeethoven","dvorak","chrisrea","guns n' roses","duranduran","ericclapton","bettemidler","bwitched","gordonlightfoot","thegrassroots","chicago","whitezombie","michaelbolton","paulsimon","marillion","thepointersisters","theanimals","cher","haydn","aerosmith","supertramp","littleriverband","america","tonyorlando","tompetty","thecorrs","aliceinchains","kiss","prince","toto","vanmorrison","wagner","cashjohnny","annielennox","enya","thedoobiebrothers","thetragicallyhip","rush","laurapausini","stevemillerband","simonandgarfunkel","fiorellamannoia","olivianewton-john","carlysimon","elvispresley","vangelis","bobdylan","bbking","vengaboys","paoli","thehollies","alainsouchon","pooh","raf","fiorello","lionelrichie","jimihendrix","theeverlybrothers","limpbizkit","donhenley","georgeharrison","threedognight","johnmellencamp","carpenters","raycharles","basie","billyocean","scorpions","royorbison","whitneyhouston","ironmaiden","jovanotti","alanjackson","barrymanilow","hueylewis","kennyloggins","chopinfrederic","talkingheads","themonkees","rem","jeanmicheljarre","michelezarrillo","eurythmics","thedoors","guesswho","miller","thefourseasons","matiabazar","tompettyandtheheartbreakers","chickcorea","scottjoplin","amedeominghi","bryanadams","paulaabdul","rossivasco","billyjoel","daniele","claudedebussy","gilbert & sullivan","chakakhan","nirvana","garbage","andreabocelli","johnnyrivers","emerson, lake & palmer","theallmanbrothersband","zappa","boston","mango","barbrastreisand","willsmith","ozzyosbourne","janetjackson","antonellovenditti","u2","humperdinckengelbert","jamiroquai","zero","chuckberry","spicegirls","ledzeppelin","masini","thekinks","eagles","billyidol","alanismorissette","joecocker","jimcroce","bobmarley","blacksabbath","stonetemplepilots","silverchair","paulmccartney","blur","nek","greenday","thepolice","depechemode","rageagainstthemachine","madonna","rogerskenny","brooks & dunn","883","thedrifters","amygrant","herman","toriamos","eltonjohn","britneyspears","lennykravitz","celentano","ringostarr","neildiamond","aqua","oscarpeterson","joejackson","moby","collinsphil","leosayer","takethat","electriclightorchestra","pearljam","marcanthony","borodin","petshopboys","stevienicks","hollybuddy","turnertina","annaoxa","zztop","sting","themoodyblues","ruggeri","creed","claudebolling","renzoarbore","erasure","elviscostello","airsupply","tinaturner","leali","petergabriel","nodoubt","bread","huey lewis & the news","brandy","level42","radiohead","georgebenson","wonderstevie","thesmashingpumpkins","cyndilauper","rodstewart","bush","ramazzotti","bobseger","theshadows","gershwin","cream","biagioantonacci","steviewonder","nomadi","direstraits","davidbowie","amostori","thealanparsonsproject","johnlennon","crosbystillsnashandyoung","battiato","kansas","clementi","richielionel","yes","brassensgeorges","steelydan","jacksonmichael","buddyholly","earthwindandfire","natkingcole","therascals","bonjovi","alanparsons","backstreetboys","glencampbell","howardcarpendale","thesupremes","villagepeople","blink-182","jacksonbrowne","sade","lynyrdskynyrd","foofighters","2unlimited","battisti","hall & oates","stansfieldlisa","genesis","boyzone","theoffspring","tomjones","davematthewsband","johnelton","neilyoung","dionnewarwick","aceofbase","marilynmanson","taylorjames","rkelly","grandi","sublime","edvardgrieg","tool","bachjohannsebastian","patbenatar","celinedion","queen","soundgarden","abba","drdre","defleppard","dominofats","realmccoy","natalieimbruglia","hole","spinners","arethafranklin","reospeedwagon","indian","movie","scottish","irish","african","taylorswift","shakira","blues","latin","katyperry","world","kpop","africandrum","michaelbuble","rihanna","gospel","beyonce","chinese","arabic","adele","kellyclarkson","theeagles","handel","rachmaninov","schumann","christmas","dance","punk","natl_anthem","brahms","rap","ravel","burgmueller","other","schubert","granados","albeniz","mendelssohn","debussy","grieg","moszkowski","godowsky","folk","mussorgsky","kids","balakirev","hymns","verdi","hummel","deleted","delibes","saint-saens","puccini","satie","offenbach","widor","songs","stravinsky","vivaldi","gurlitt","alkan","weber","strauss","traditional","rossini","mahler","soler","sousa","telemann","busoni","scarlatti","stamitz","classical","jstrauss2","gabrieli","nielsen","purcell","donizetti","kuhlau","gounod","gibbons","weiss","faure","holst","spohr","monteverdi","reger","bizet","elgar","czerny","sullivan","shostakovich","franck","rubinstein","albrechtsberger","paganini","diabelli","gottschalk","wieniawski","lully","morley","sibelius","scriabin","heller","thalberg","dowland","carulli","pachelbel","sor","marcello","ketterer","rimsky-korsakov","ascher","bruckner","janequin","anonymous","kreutzer","sanz","joplin","susato","giuliani","lassus","palestrina","smetana","berlioz","couperin","gomolka","daquin","herz","campion","walthew","pergolesi","reicha","polak","holborne","hassler","corelli","cato","azzaiolo","anerio","gastoldi","goudimel","dussek","prez","cimarosa","byrd","praetorius","rameau","khachaturian","machaut","gade","perosi","gorzanis","smith","haberbier","carr","marais","glazunov","guerrero","cabanilles","losy","roman","hasse","sammartini","blow","zipoli","duvernoy","aguado","cherubini","victoria","field","andersen","poulenc","d'aragona","lemire","krakowa","maier","rimini","encina","banchieri","best","galilei","warhorse","gypsy","soundtrack","encore","roblaidlow","nationalanthems","benjyshelton","ongcmu","crosbystillsnashyoung","smashingpumpkins","aaaaaaaaaaa","alanismorrisette","animenz","onedirection","nintendo","disneythemes","gunsnroses","rollingstones","juliancasablancas","abdelmoinealfa","berckmansdeoliveira","moviethemes","beachboys","davemathews","videogamethemes","moabberckmansdeoliveira","unknown","cameronleesimpson","johannsebastianbach","thecarpenters","elo","nightwish","blink182","emersonlakeandpalmer","tvthemes"]; + var genre = document.getElementById("genre").value; + if (genre == "") { + genre = genreList[Math.floor(Math.random()*genreList.length)]; + } + fetch("https://musenet.openai.com/sample", { + "method": "POST", + "headers": { + "Content-Type": "application/json" + }, + "body": JSON.stringify({ + "genre": genre, + "instrument":{ + "piano": document.getElementById("piano").checked, + "strings": document.getElementById("strings").checked, + "winds": document.getElementById("winds").checked, + "drums": document.getElementById("drums").checked, + "harp": document.getElementById("harp").checked, + "guitar": document.getElementById("guitar").checked, + "bass": document.getElementById("bass").checked + }, + "encoding":document.getElementById("inbox").value, + "temperature":parseFloat(document.getElementById("temperature").value), + "truncation":parseFloat(document.getElementById("truncation").value), + "generationLength":parseFloat(document.getElementById("generationLength").value), + "audioFormat": document.getElementById("format").value + }) + }).then(res => res.json()).then(function (response) { + window.oldDuration = Math.min(document.getElementById('sound1').duration, + document.getElementById('sound2').duration, + document.getElementById('sound3').duration, + document.getElementById('sound4').duration); + window.oldDuration -= 5; + if (isNaN(oldDuration) || !isFinite(oldDuration) || oldDuration < 0) { + oldDuration = 0; + } + //need to convert from dataURI to blob to avoid firefox issue + var format = "audio/mp3"; + var audioKey = "audioFile"; + if (response.completions[0].oggFile) { + format = "audio/ogg"; + audioKey = "oggFile"; + } + document.getElementById('sound1').src=URL.createObjectURL(new Blob([convertDataURIToBinary("data:"+format+";base64,"+response.completions[0][audioKey].substring(2,response.completions[0][audioKey].length-1))], {type : format})); + document.getElementById('sound2').src=URL.createObjectURL(new Blob([convertDataURIToBinary("data:"+format+";base64,"+response.completions[1][audioKey].substring(2,response.completions[1][audioKey].length-1))], {type : format})); + document.getElementById('sound3').src=URL.createObjectURL(new Blob([convertDataURIToBinary("data:"+format+";base64,"+response.completions[2][audioKey].substring(2,response.completions[2][audioKey].length-1))], {type : format})); + document.getElementById('sound4').src=URL.createObjectURL(new Blob([convertDataURIToBinary("data:"+format+";base64,"+response.completions[3][audioKey].substring(2,response.completions[3][audioKey].length-1))], {type : format})); + document.getElementById("outbox1").value = response.completions[0].encoding; + document.getElementById("outbox2").value = response.completions[1].encoding; + document.getElementById("outbox3").value = response.completions[2].encoding; + document.getElementById("outbox4").value = response.completions[3].encoding; + window.encodingToMidiFile(response.completions[0].encoding, "download_outbox1"); + window.encodingToMidiFile(response.completions[1].encoding, "download_outbox2"); + window.encodingToMidiFile(response.completions[2].encoding, "download_outbox3"); + window.encodingToMidiFile(response.completions[3].encoding, "download_outbox4"); + document.getElementById('sound1').currentTime = oldDuration; + document.getElementById('sound2').currentTime = oldDuration; + document.getElementById('sound3').currentTime = oldDuration; + document.getElementById('sound4').currentTime = oldDuration; + ding.play(); + document.getElementById("button").disabled = false; + document.getElementById("loader-inner").style.animation = "none"; + }).catch(error => { + ding.play(); + document.getElementById("button").disabled = false; + document.getElementById("loader-inner").style.animation = "none"; + alert(error); + }); +} + +function convertDataURIToBinary(dataURI) { + var BASE64_MARKER = ';base64,'; + var base64Index = dataURI.indexOf(BASE64_MARKER) + BASE64_MARKER.length; + var base64 = dataURI.substring(base64Index); + var raw = window.atob(base64); + var rawLength = raw.length; + var array = new Uint8Array(new ArrayBuffer(rawLength)); + + for(i = 0; i < rawLength; i++) { + array[i] = raw.charCodeAt(i); + } + return array; +} + +window.oldDuration = 0; + +window.encodingToMidiFile = function(encoding, outlink) { + var midiData = { + header: { + "format": 1, + "numTracks": 10, + "ticksPerBeat": 48 + }, + tracks: [[{"deltaTime":0,"channel":0,"type":"programChange","programNumber":0}], + [{"deltaTime":0,"channel":1,"type":"programChange","programNumber":40}], + [{"deltaTime":0,"channel":2,"type":"programChange","programNumber":42}], + [{"deltaTime":0,"channel":3,"type":"programChange","programNumber":32}], + [{"deltaTime":0,"channel":4,"type":"programChange","programNumber":24}], + [{"deltaTime":0,"channel":5,"type":"programChange","programNumber":73}], + [{"deltaTime":0,"channel":6,"type":"programChange","programNumber":71}], + [{"deltaTime":0,"channel":7,"type":"programChange","programNumber":56}], + [{"deltaTime":0,"channel":8,"type":"programChange","programNumber":46}], + [{"deltaTime":0,"channel":9,"type":"programChange","programNumber":0}]] + }; + + var tokens = encoding.trim().split(" "); + + var deltaTimes = [0,0,0,0,0,0,0,0,0,0]; + var usedDrumNotes = new Set(); + for (var i=0; i 0 ? "noteOn" : "noteOff", + "noteNumber": parsedToken.pitch, + "velocity": parsedToken.volume + }); + if (parsedToken.instrument == "drum") { + usedDrumNotes.add(parsedToken.pitch); + } + deltaTimes[trackIndex] = 0; + } else if (parsedToken.type == "wait") { + for (var j=0; j<10; j++) { + deltaTimes[j] += parsedToken.delay; + } + } + } + for (let pitch of usedDrumNotes) { + midiData.tracks[9].push({ + "deltaTime": deltaTimes[9], + "channel": 9, + "type": "noteOff", + "noteNumber": pitch, + "velocity": 0 + }); + deltaTimes[9] = 0; + } + + for (var i=0; i track.length > 2); + + console.log(midiData); + + var midiBlob = new Blob([new Uint8Array(writeMidi(midiData))], {type: "audio/midi"}); + document.getElementById(outlink).href = URL.createObjectURL(midiBlob); + document.getElementById(outlink).target = "_blank"; +} +window.encodingToMidiFile(document.getElementById("inbox").value, "download_inbox"); +window.encodingToMidiFile(document.getElementById("outbox1").value, "download_outbox1"); +window.encodingToMidiFile(document.getElementById("outbox2").value, "download_outbox2"); +window.encodingToMidiFile(document.getElementById("outbox3").value, "download_outbox3"); +window.encodingToMidiFile(document.getElementById("outbox4").value, "download_outbox4"); + +function parseToken(token) { + token = +token; + if (token >= 0 && token < 3840) { + var pitch = token % 128; + var inst_vol_index = token >> 7; + var instrument = ["piano","piano","piano","piano","piano","piano","piano","piano","piano","piano","piano","piano","piano","piano", + "violin","violin","cello","cello","bass","bass","guitar","guitar", + "flute","flute","clarinet","clarinet","trumpet","trumpet","harp","harp"][inst_vol_index]; + var volume = [0,24,32,40,48,56,64,72,80,88,96,104,112,120,80,0,80,0,80,0,80,0,80,0,80,0,80,0,80,0][inst_vol_index]; + return {"type":"note","pitch":pitch,"instrument":instrument,"volume":volume}; + } else if (token >= 3840 && token < 3968) { + var pitch = token % 128; + return {"type":"note","pitch":pitch,"instrument":"drum","volume":80}; + } else if (token >= 3968 && token < 4096) { + var delay = (token % 128) + 1; + return {"type":"wait","delay":delay} + } else if (token == 4096) { + return {"type":"start"} + } else { + return {"type":"invalid"} + } + +} +},{"midi-file":2}],2:[function(require,module,exports){ +exports.parseMidi = require('./lib/midi-parser') +exports.writeMidi = require('./lib/midi-writer') + +},{"./lib/midi-parser":3,"./lib/midi-writer":4}],3:[function(require,module,exports){ +// data can be any array-like object. It just needs to support .length, .slice, and an element getter [] + +function parseMidi(data) { + var p = new Parser(data) + + var headerChunk = p.readChunk() + if (headerChunk.id != 'MThd') + throw "Bad MIDI file. Expected 'MHdr', got: '" + headerChunk.id + "'" + var header = parseHeader(headerChunk.data) + + var tracks = [] + for (var i=0; !p.eof() && i < header.numTracks; i++) { + var trackChunk = p.readChunk() + if (trackChunk.id != 'MTrk') + throw "Bad MIDI file. Expected 'MTrk', got: '" + trackChunk.id + "'" + var track = parseTrack(trackChunk.data) + tracks.push(track) + } + + return { + header: header, + tracks: tracks + } +} + + +function parseHeader(data) { + var p = new Parser(data) + + var format = p.readUInt16() + var numTracks = p.readUInt16() + + var result = { + format: format, + numTracks: numTracks + } + + var timeDivision = p.readUInt16() + if (timeDivision & 0x8000) { + result.framesPerSecond = 0x100 - (timeDivision >> 8) + result.ticksPerFrame = timeDivision & 0xFF + } else { + result.ticksPerBeat = timeDivision + } + + return result +} + +function parseTrack(data) { + var p = new Parser(data) + + var events = [] + while (!p.eof()) { + var event = readEvent() + events.push(event) + } + + return events + + var lastEventTypeByte = null + + function readEvent() { + var event = {} + event.deltaTime = p.readVarInt() + + var eventTypeByte = p.readUInt8() + + if ((eventTypeByte & 0xf0) === 0xf0) { + // system / meta event + if (eventTypeByte === 0xff) { + // meta event + event.meta = true + var metatypeByte = p.readUInt8() + var length = p.readVarInt() + switch (metatypeByte) { + case 0x00: + event.type = 'sequenceNumber' + if (length !== 2) throw "Expected length for sequenceNumber event is 2, got " + length + event.number = stream.readUInt16() + return event + case 0x01: + event.type = 'text' + event.text = p.readString(length) + return event + case 0x02: + event.type = 'copyrightNotice' + event.text = p.readString(length) + return event + case 0x03: + event.type = 'trackName' + event.text = p.readString(length) + return event + case 0x04: + event.type = 'instrumentName' + event.text = p.readString(length) + return event + case 0x05: + event.type = 'lyrics' + event.text = p.readString(length) + return event + case 0x06: + event.type = 'marker' + event.text = p.readString(length) + return event + case 0x07: + event.type = 'cuePoint' + event.text = p.readString(length) + return event + case 0x20: + event.type = 'channelPrefix' + if (length != 1) throw "Expected length for channelPrefix event is 1, got " + length + event.channel = p.readUInt8() + return event + case 0x21: + event.type = 'portPrefix' + if (length != 1) throw "Expected length for portPrefix event is 1, got " + length + event.port = p.readUInt8() + return event + case 0x2f: + event.type = 'endOfTrack' + if (length != 0) throw "Expected length for endOfTrack event is 0, got " + length + return event + case 0x51: + event.type = 'setTempo'; + if (length != 3) throw "Expected length for setTempo event is 3, got " + length + event.microsecondsPerBeat = p.readUInt24() + return event + case 0x54: + event.type = 'smpteOffset'; + if (length != 5) throw "Expected length for smpteOffset event is 5, got " + length + var hourByte = p.readUInt8() + var FRAME_RATES = { 0x00: 24, 0x20: 25, 0x40: 29, 0x60: 30 } + event.frameRate = FRAME_RATES[hourByte & 0x60] + event.hour = hourByte & 0x1f + event.min = p.readUInt8() + event.sec = p.readUInt8() + event.frame = p.readUInt8() + event.subFrame = p.readUInt8() + return event + case 0x58: + event.type = 'timeSignature' + if (length != 4) throw "Expected length for timeSignature event is 4, got " + length + event.numerator = p.readUInt8() + event.denominator = (1 << p.readUInt8()) + event.metronome = p.readUInt8() + event.thirtyseconds = p.readUInt8() + return event + case 0x59: + event.type = 'keySignature' + if (length != 2) throw "Expected length for keySignature event is 2, got " + length + event.key = p.readInt8() + event.scale = p.readUInt8() + return event + case 0x7f: + event.type = 'sequencerSpecific' + event.data = p.readBytes(length) + return event + default: + event.type = 'unknownMeta' + event.data = p.readBytes(length) + event.metatypeByte = metatypeByte + return event + } + } else if (eventTypeByte == 0xf0) { + event.type = 'sysEx' + var length = p.readVarInt() + event.data = p.readBytes(length) + return event + } else if (eventTypeByte == 0xf7) { + event.type = 'endSysEx' + var length = p.readVarInt() + event.data = p.readBytes(length) + return event + } else { + throw "Unrecognised MIDI event type byte: " + eventTypeByte + } + } else { + // channel event + var param1 + if ((eventTypeByte & 0x80) === 0) { + // running status - reuse lastEventTypeByte as the event type. + // eventTypeByte is actually the first parameter + if (lastEventTypeByte === null) + throw "Running status byte encountered before status byte" + param1 = eventTypeByte + eventTypeByte = lastEventTypeByte + event.running = true + } else { + param1 = p.readUInt8() + lastEventTypeByte = eventTypeByte + } + var eventType = eventTypeByte >> 4 + event.channel = eventTypeByte & 0x0f + switch (eventType) { + case 0x08: + event.type = 'noteOff' + event.noteNumber = param1 + event.velocity = p.readUInt8() + return event + case 0x09: + var velocity = p.readUInt8() + event.type = velocity === 0 ? 'noteOff' : 'noteOn' + event.noteNumber = param1 + event.velocity = velocity + if (velocity === 0) event.byte9 = true + return event + case 0x0a: + event.type = 'noteAftertouch' + event.noteNumber = param1 + event.amount = p.readUInt8() + return event + case 0x0b: + event.type = 'controller' + event.controllerType = param1 + event.value = p.readUInt8() + return event + case 0x0c: + event.type = 'programChange' + event.programNumber = param1 + return event + case 0x0d: + event.type = 'channelAftertouch' + event.amount = param1 + return event + case 0x0e: + event.type = 'pitchBend' + event.value = (param1 + (p.readUInt8() << 7)) - 0x2000 + return event + default: + throw "Unrecognised MIDI event type: " + eventType + } + } + } +} + +function Parser(data) { + this.buffer = data + this.bufferLen = this.buffer.length + this.pos = 0 +} + +Parser.prototype.eof = function() { + return this.pos >= this.bufferLen +} + +Parser.prototype.readUInt8 = function() { + var result = this.buffer[this.pos] + this.pos += 1 + return result +} + +Parser.prototype.readInt8 = function() { + var u = this.readUInt8() + if (u & 0x80) + return u - 0x100 + else + return u +} + +Parser.prototype.readUInt16 = function() { + var b0 = this.readUInt8(), + b1 = this.readUInt8() + + return (b0 << 8) + b1 +} + +Parser.prototype.readInt16 = function() { + var u = this.readUInt16() + if (u & 0x8000) + return u - 0x10000 + else + return u +} + +Parser.prototype.readUInt24 = function() { + var b0 = this.readUInt8(), + b1 = this.readUInt8(), + b2 = this.readUInt8() + + return (b0 << 16) + (b1 << 8) + b2 +} + +Parser.prototype.readInt24 = function() { + var u = this.readUInt24() + if (u & 0x800000) + return u - 0x1000000 + else + return u +} + +Parser.prototype.readUInt32 = function() { + var b0 = this.readUInt8(), + b1 = this.readUInt8(), + b2 = this.readUInt8(), + b3 = this.readUInt8() + + return (b0 << 24) + (b1 << 16) + (b2 << 8) + b3 +} + +Parser.prototype.readBytes = function(len) { + var bytes = this.buffer.slice(this.pos, this.pos + len) + this.pos += len + return bytes +} + +Parser.prototype.readString = function(len) { + var bytes = this.readBytes(len) + return String.fromCharCode.apply(null, bytes) +} + +Parser.prototype.readVarInt = function() { + var result = 0 + while (!this.eof()) { + var b = this.readUInt8() + if (b & 0x80) { + result += (b & 0x7f) + result <<= 7 + } else { + // b is last byte + return result + b + } + } + // premature eof + return result +} + +Parser.prototype.readChunk = function() { + var id = this.readString(4) + var length = this.readUInt32() + var data = this.readBytes(length) + return { + id: id, + length: length, + data: data + } +} + +module.exports = parseMidi + +},{}],4:[function(require,module,exports){ +// data should be the same type of format returned by parseMidi +// for maximum compatibililty, returns an array of byte values, suitable for conversion to Buffer, Uint8Array, etc. + +// opts: +// - running reuse previous eventTypeByte when possible, to compress file +// - useByte9ForNoteOff use 0x09 for noteOff when velocity is zero + +function writeMidi(data, opts) { + if (typeof data !== 'object') + throw 'Invalid MIDI data' + + opts = opts || {} + + var header = data.header || {} + var tracks = data.tracks || [] + var i, len = tracks.length + + var w = new Writer() + writeHeader(w, header, len) + + for (i=0; i < len; i++) { + writeTrack(w, tracks[i], opts) + } + + return w.buffer +} + +function writeHeader(w, header, numTracks) { + var format = header.format == null ? 1 : header.format + + var timeDivision = 128 + if (header.timeDivision) { + timeDivision = header.timeDivision + } else if (header.ticksPerFrame && header.framesPerSecond) { + timeDivision = (-(header.framesPerSecond & 0xFF) << 8) | (ticksPerFrame & 0xFF) + } else if (header.ticksPerBeat) { + timeDivision = header.ticksPerBeat & 0x7FFF + } + + var h = new Writer() + h.writeUInt16(format) + h.writeUInt16(numTracks) + h.writeUInt16(timeDivision) + + w.writeChunk('MThd', h.buffer) +} + +function writeTrack(w, track, opts) { + var t = new Writer() + var i, len = track.length + var eventTypeByte = null + for (i=0; i < len; i++) { + // Reuse last eventTypeByte when opts.running is set, or event.running is explicitly set on it. + // parseMidi will set event.running for each event, so that we can get an exact copy by default. + // Explicitly set opts.running to false, to override event.running and never reuse last eventTypeByte. + if (opts.running === false || !opts.running && !track[i].running) eventTypeByte = null + + eventTypeByte = writeEvent(t, track[i], eventTypeByte, opts.useByte9ForNoteOff) + } + w.writeChunk('MTrk', t.buffer) +} + +function writeEvent(w, event, lastEventTypeByte, useByte9ForNoteOff) { + var type = event.type + var deltaTime = event.deltaTime + var text = event.text || '' + var data = event.data || [] + var eventTypeByte = null + w.writeVarInt(deltaTime) + + switch (type) { + // meta events + case 'sequenceNumber': + w.writeUInt8(0xFF) + w.writeUInt8(0x00) + w.writeVarInt(2) + w.writeUInt16(event.number) + break; + + case 'text': + w.writeUInt8(0xFF) + w.writeUInt8(0x01) + w.writeVarInt(text.length) + w.writeString(text) + break; + + case 'copyrightNotice': + w.writeUInt8(0xFF) + w.writeUInt8(0x02) + w.writeVarInt(text.length) + w.writeString(text) + break; + + case 'trackName': + w.writeUInt8(0xFF) + w.writeUInt8(0x03) + w.writeVarInt(text.length) + w.writeString(text) + break; + + case 'instrumentName': + w.writeUInt8(0xFF) + w.writeUInt8(0x04) + w.writeVarInt(text.length) + w.writeString(text) + break; + + case 'lyrics': + w.writeUInt8(0xFF) + w.writeUInt8(0x05) + w.writeVarInt(text.length) + w.writeString(text) + break; + + case 'marker': + w.writeUInt8(0xFF) + w.writeUInt8(0x06) + w.writeVarInt(text.length) + w.writeString(text) + break; + + case 'cuePoint': + w.writeUInt8(0xFF) + w.writeUInt8(0x07) + w.writeVarInt(text.length) + w.writeString(text) + break; + + case 'channelPrefix': + w.writeUInt8(0xFF) + w.writeUInt8(0x20) + w.writeVarInt(1) + w.writeUInt8(event.channel) + break; + + case 'portPrefix': + w.writeUInt8(0xFF) + w.writeUInt8(0x21) + w.writeVarInt(1) + w.writeUInt8(event.port) + break; + + case 'endOfTrack': + w.writeUInt8(0xFF) + w.writeUInt8(0x2F) + w.writeVarInt(0) + break; + + case 'setTempo': + w.writeUInt8(0xFF) + w.writeUInt8(0x51) + w.writeVarInt(3) + w.writeUInt24(event.microsecondsPerBeat) + break; + + case 'smpteOffset': + w.writeUInt8(0xFF) + w.writeUInt8(0x54) + w.writeVarInt(5) + var FRAME_RATES = { 24: 0x00, 25: 0x20, 29: 0x40, 30: 0x60 } + var hourByte = (event.hour & 0x1F) | FRAME_RATES[event.frameRate] + w.writeUInt8(hourByte) + w.writeUInt8(event.min) + w.writeUInt8(event.sec) + w.writeUInt8(event.frame) + w.writeUInt8(event.subFrame) + break; + + case 'timeSignature': + w.writeUInt8(0xFF) + w.writeUInt8(0x58) + w.writeVarInt(4) + w.writeUInt8(event.numerator) + var denominator = Math.floor((Math.log(event.denominator) / Math.LN2)) & 0xFF + w.writeUInt8(denominator) + w.writeUInt8(event.metronome) + w.writeUInt8(event.thirtyseconds || 8) + break; + + case 'keySignature': + w.writeUInt8(0xFF) + w.writeUInt8(0x59) + w.writeVarInt(2) + w.writeInt8(event.key) + w.writeUInt8(event.scale) + break; + + case 'sequencerSpecific': + w.writeUInt8(0xFF) + w.writeUInt8(0x7F) + w.writeVarInt(data.length) + w.writeBytes(data) + break; + + case 'unknownMeta': + if (event.metatypeByte != null) { + w.writeUInt8(0xFF) + w.writeUInt8(event.metatypeByte) + w.writeVarInt(data.length) + w.writeBytes(data) + } + break; + + // system-exclusive + case 'sysEx': + w.writeUInt8(0xF0) + w.writeVarInt(data.length) + w.writeBytes(data) + break; + + case 'endSysEx': + w.writeUInt8(0xF7) + w.writeVarInt(data.length) + w.writeBytes(data) + break; + + // channel events + case 'noteOff': + // Use 0x90 when opts.useByte9ForNoteOff is set and velocity is zero, or when event.byte9 is explicitly set on it. + // parseMidi will set event.byte9 for each event, so that we can get an exact copy by default. + // Explicitly set opts.useByte9ForNoteOff to false, to override event.byte9 and always use 0x80 for noteOff events. + var noteByte = ((useByte9ForNoteOff !== false && event.byte9) || (useByte9ForNoteOff && event.velocity == 0)) ? 0x90 : 0x80 + + eventTypeByte = noteByte | event.channel + if (eventTypeByte !== lastEventTypeByte) w.writeUInt8(eventTypeByte) + w.writeUInt8(event.noteNumber) + w.writeUInt8(event.velocity) + break; + + case 'noteOn': + eventTypeByte = 0x90 | event.channel + if (eventTypeByte !== lastEventTypeByte) w.writeUInt8(eventTypeByte) + w.writeUInt8(event.noteNumber) + w.writeUInt8(event.velocity) + break; + + case 'noteAftertouch': + eventTypeByte = 0xA0 | event.channel + if (eventTypeByte !== lastEventTypeByte) w.writeUInt8(eventTypeByte) + w.writeUInt8(event.noteNumber) + w.writeUInt8(event.amount) + break; + + case 'controller': + eventTypeByte = 0xB0 | event.channel + if (eventTypeByte !== lastEventTypeByte) w.writeUInt8(eventTypeByte) + w.writeUInt8(event.controllerType) + w.writeUInt8(event.value) + break; + + case 'programChange': + eventTypeByte = 0xC0 | event.channel + if (eventTypeByte !== lastEventTypeByte) w.writeUInt8(eventTypeByte) + w.writeUInt8(event.programNumber) + break; + + case 'channelAftertouch': + eventTypeByte = 0xD0 | event.channel + if (eventTypeByte !== lastEventTypeByte) w.writeUInt8(eventTypeByte) + w.writeUInt8(event.amount) + break; + + case 'pitchBend': + eventTypeByte = 0xE0 | event.channel + if (eventTypeByte !== lastEventTypeByte) w.writeUInt8(eventTypeByte) + var value14 = 0x2000 + event.value + var lsb14 = (value14 & 0x7F) + var msb14 = (value14 >> 7) & 0x7F + w.writeUInt8(lsb14) + w.writeUInt8(msb14) + break; + + default: + throw 'Unrecognized event type: ' + type + } + return eventTypeByte +} + + +function Writer() { + this.buffer = [] +} + +Writer.prototype.writeUInt8 = function(v) { + this.buffer.push(v & 0xFF) +} +Writer.prototype.writeInt8 = Writer.prototype.writeUInt8 + +Writer.prototype.writeUInt16 = function(v) { + var b0 = (v >> 8) & 0xFF, + b1 = v & 0xFF + + this.writeUInt8(b0) + this.writeUInt8(b1) +} +Writer.prototype.writeInt16 = Writer.prototype.writeUInt16 + +Writer.prototype.writeUInt24 = function(v) { + var b0 = (v >> 16) & 0xFF, + b1 = (v >> 8) & 0xFF, + b2 = v & 0xFF + + this.writeUInt8(b0) + this.writeUInt8(b1) + this.writeUInt8(b2) +} +Writer.prototype.writeInt24 = Writer.prototype.writeUInt24 + +Writer.prototype.writeUInt32 = function(v) { + var b0 = (v >> 24) & 0xFF, + b1 = (v >> 16) & 0xFF, + b2 = (v >> 8) & 0xFF, + b3 = v & 0xFF + + this.writeUInt8(b0) + this.writeUInt8(b1) + this.writeUInt8(b2) + this.writeUInt8(b3) +} +Writer.prototype.writeInt32 = Writer.prototype.writeUInt32 + + +Writer.prototype.writeBytes = function(arr) { + this.buffer = this.buffer.concat(Array.prototype.slice.call(arr, 0)) +} + +Writer.prototype.writeString = function(str) { + var i, len = str.length, arr = [] + for (i=0; i < len; i++) { + arr.push(str.codePointAt(i)) + } + this.writeBytes(arr) +} + +Writer.prototype.writeVarInt = function(v) { + if (v < 0) throw "Cannot write negative variable-length integer" + + if (v <= 0x7F) { + this.writeUInt8(v) + } else { + var i = v + var bytes = [] + bytes.push(i & 0x7F) + i >>= 7 + while (i) { + var b = i & 0x7F | 0x80 + bytes.push(b) + i >>= 7 + } + this.writeBytes(bytes.reverse()) + } +} + +Writer.prototype.writeChunk = function(id, data) { + this.writeString(id) + this.writeUInt32(data.length) + this.writeBytes(data) +} + +module.exports = writeMidi + +},{}]},{},[1]); diff --git a/chord.wav b/chord.wav new file mode 100644 index 0000000000000000000000000000000000000000..0193a11623efe30bf30945b6cdd55d9fde36ba1f GIT binary patch literal 97016 zcmX7P1$5g;+x3VgQ|!bJV^c_(nHf^XEz_3McFWAXW$u=7%iL|Z%$&lOlQc=gwa z_UMCweg3xv0EqCwD?}i$7XU<{k^i^+?^pkO|Np-y|L-XH|9$@7cmHd2U~ewajDdA9 zFa?fm1(v|V1{xDs^9Z4AREA!mk0=+VB8Z%*VPM-T&=-){U9b!5gz4~~*jw-qb_Kpd zxW>UYN?$cX&XcQ2Zb>it#b<&;m@NGz8kAo0Pc>b60ncjrUhZDDa?j2*b~TH^krgPii>1f*D5FXSXwdvu1VO0cq6-L6c~x~l)eP8x}(!V$=b zGSE>p1D!<&VK{21$=XNdmAY14uf_wHHU~cg-jE;h1`I}d*$&J%_99!Ioz1$blgt<5 z4)r@$hJS}`fK_VWn@S>(k19h&``rLV>%D8UvzKe1<2Ppu$1F!5N1_8cMmd(c ztGjObNbfyifWKUsB!AYXYxPh(Y5~rH4`3U124rHdu~FD{d<|%bp9hujaX`V>0fst* z8>m8Z78x42b5*D?YGdGvRb|qRm-N+aHG*?u_C|D1yd1y1k~uNEQhwsw3aCPOOh(*_ z(2R($LDNFkFdy|FPzZTZwrNPXB)a_lg)hPs!7j`cFALkmdcrEPj@U<>E5DEisXLTH z?Uh;!UeOk7rE0d?OnoRll|S%LgdN@&z9X)N-uCv!uC2v4$~qPh#Ut{u0;OPmez(Go z1w#t&6bvuPFT~2fltNdoBUX6iyQfZ6dJ?1Xrh3HTA(@uc=pPYvDz=J0T6sss)0GBR z9$evO;*zK{F}FiTho082G<~C@nfKU8ya!wl>nJT1ReCOI$~2`Hs082B8;F(qQQX#` zx5h`7`j!f|Rl&B10oGB`jxaUmWTX(?)DzkmBynsGXPQBF#Bt)j05R(nDj?+S9Q^0(!GX|v^X zqz&uFZD;D}Q+2<%%KE|7ZuS!P7kM1zg1KruTp-<$DWO#8$_kmY7?TL7W~X61(I-;ZOdP^v>Cre^p$|m7Kr5q+K2;x>Hb6(4?em(LDR` z((cZ_<(u7;ogch&-Anu-z6klU|GnBr7S!o#JtbY~E;dl+_`Zsb_&>(a z*>8BC6%Ti?C6!B;m5nL+v+`{*~a zH#sj=nTaNj6RS{jY`?M_h6)Xo-`&%N9wnz8p_U%DiMlR9^@&y7ez`i~b@x#nrBi&%@;jG1 zvQmoXW*6kH&1Z9K*e~ao@NLUD_|hkltF%G77vu%g8QrwtZl=i4>z4E3udONJrJ+-7 zRYSK0jk9)RtD9?Jk2yj9gva``lp>eM-`W1gQ>Ub}qe1cX(tTxZi__c_O1n#w-E*+7 zfR~`)gYmvtf2=+A1N3J9#nYJ6^hx3kb4p!E zo%BaxZ@pt=i>C(v(rNOh+KXKCiw8L-;qI6w(ZBR*gn=u^O6d{UP3kJ1MocGb5Z#z-L_6IWve1At7Bj1RA5vy; zg|;?hk#9r3hojIc)|KHcOvggYnMon7@aM)1?O)m|C4x`h#)??J-k({}+nt?JyUh93 zmuLJ|HOrV0mY(~oW%~F+PnOj_Jpa9Cb;&l_2)P-v53bEMJv9xi};@D}O-IsXV#7TER!}{gT(>L+78W$9D|=CshN{ za2+-!Fsl8BT|oEnPReC$mv0h$>L`_Fm6?2hmi*<|QFNg+HUD(+*PNK5f!Tci$gDoO zWxx9Tno;~bySw*SZZ#NQGKZPy`76k!9uDnDyP}$!$`bNyx2hb9u3fz}!C1{-d0l0) z>dJ($Dr;iCCN7JZ7iX}2kGyG~686{tL*B6c%~L3+Asv6j4a1rQ>d7N2jh;eH(%GrI zh9V}-=+)gZjyLu&J~S2UzMDMsLt}4Zl>QkU$;^=SgzD*~Ew=9!LW=fzYYijzu%o^z*Gk#@^PcQq`DIJugWi0jl{Nd9=zylggo z&9IA053Z=c5MFNhC#tsPew5!PMobNF64of`P;iZkVpWp*8o=bVqkQXrRFm6m1%8>J)U!giH~ZwWj2dVAIslG}ERC#?m{oEO5r2^j^A;oL*uXLUBML61fFF0b|Gd%5_tT@~mtC`%b@Jakg_ON^{=mc6Gc7i+; zcSr}SEU@US?~CYKjjKRczEbhBVzffbYwn@%0i0@(z*k_foD4z0hb$M|_u$(CxIFYy<2ZS4akPg$$yGa%X{? z9jta?Hi-qqBX2T#=xm^@u;1`kC>`ToP@H2wQnA;qAyXOloKf>4GO+c`Ko?o{3^Om z_*gvFoUU!)zKEyDZ{Ee=j%&2~(WMA?eGPn~bklPU{_;X>nsA#eP%MlW9p!H04GiH_ zf@v=^+{oyekJ?u@&2jB{XI+ampK~cW|gkaQ42ff zpUJyg`YPAs{x^TWSiSfId|AGXtl_iiBIS>!OQ@+io!oDp&HZk!ZhC8sw2b5ySZ)%< zLH}qmh6mzfrV0N8W4+1h7SB6jmuHi2g8PCe(s|W$vb@yu%2C z(xJXux_(l!VJ2E?YCsLNROMdU8X6jhw+>n#+9~*lrH^fZ(P2Bqy${Kx{|h=s*3tX1 zm&`DTs4>z=vKwCkZ{ahcX2L5uTfHfG@G9a3dbGThT@Opxox}|82Yp<3j~%5y#>x8Y zTr2%r-2k?i{uwb$e-Z8Ayy`G|m)ZtjuI53HTvvN1W~vkXes#R>s^a%;l2-WR1W`EU zYo;{tt%BwJHmseXqe`S{%u~(EUB(E*W@>hjg{v2`P+uH+#dsimxcOdKO7IrjW9uXH z($FNGW*bKw3%Q{xL2vnd-5tk#5*Eo?asCJ)x$u&!RT*8{!yQ~y#Ag?2;-#`1N(Xl> z6y`rqtdx4`nyGP?8*oHud%Rt^lW84#&$!OA((<<;@tG9K8F`Vs z>h26Y?hJXe?-Kt|{OZ4HPf6Jqcvb+=jPt7I5amPSc==V84pOsJ9myQBK|d4(lk#O&=~>5Sjf9)EXb&HA>b zAnChm-;+lB60V~(3Az+(W60QW)9LWvZRO_T$bLFc^l)lu zWKH~c>m#(yctP97R8$j)0qR�IR~K#4OdQ)07|PrqCUF5pNX*+4R`;K?f@o+WJ*) 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 literal 0 HcmV?d00001 diff --git a/index.html b/index.html new file mode 100644 index 00000000..592f93c1 --- /dev/null +++ b/index.html @@ -0,0 +1,687 @@ + + + + Project Adam By AIX + + + +

+ + Import Midi - Export Midi - Base Midi | AIX Project Adam - Mendax Enterprises LLC + +

+

+ Genre: +   +   +   +   +   +   +   +   + Temperature:   + Truncation:   + Generation Length:   + Preview: +   +   + +

+

+ + + export midiexport midiexport midiexport midi + +

+ + + + diff --git a/main.js b/main.js new file mode 100644 index 00000000..aaaf4b24 --- /dev/null +++ b/main.js @@ -0,0 +1,339 @@ +var parseMidi = require('midi-file').parseMidi; +var writeMidi = require('midi-file').writeMidi; + +var inst_to_track = {"piano":0,"violin":1,"cello":2,"bass":3,"guitar":4,"flute":5,"clarinet":6,"trumpet":7,"harp":8,"drum":9}; + +window.copyup = function(elemid) { + document.getElementById("inbox").value = document.getElementById(elemid).value.trim(); + window.encodingToMidiFile(document.getElementById("inbox").value, "download_inbox"); +} + +window.importMidi = function() { + alert("For best results, assign different tracks to different instruments out of Piano, Violin, Cello, Bass, Guitar, Flute, Clarinet, Trumpet, Harp, and Drums.\n" + + "The base MIDI linked to the right is already set up with these tracks.\n"); + javascript:document.getElementById('file-input').click(); +} +window.importMidiFile = function(file) { + var reader = new FileReader(); + reader.readAsArrayBuffer(file); + window.file = file; + + reader.onload = readerEvent => { + var content = new Uint8Array(readerEvent.target.result); + var midiData = parseMidi(content); + console.log(midiData); + + var mergedTrack = []; + var originalOrder = 0; + for (var i=0; i b.startTime) { return 1; } + if(a.originalOrder < b.originalOrder) { return -1; } + if(a.originalOrder > b.originalOrder) { return 1; } + return 0; + }) + + document.getElementById("piano").checked = false; + document.getElementById("strings").checked = false; + document.getElementById("winds").checked = false; + document.getElementById("drums").checked = false; + document.getElementById("harp").checked = false; + document.getElementById("guitar").checked = false; + document.getElementById("bass").checked = false; + + var encoded = ""; + var currentInsts = [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]; + for (var i=0; i 0) { + var waitTime = timeLeftToWait > 128 ? 128 : timeLeftToWait; + var token = 3968 + waitTime - 1; + encoded += token + " "; + timeLeftToWait -= waitTime; + } + + if (event.type == "programChange") { + currentInsts[event.channel] = event.programNumber; + } + var currentInst = currentInsts[event.channel]; + var inst; + var baseNoteOn; + var baseNoteOff; + var checkboxID; + if ([40,41,44,45,48,49,50,51].indexOf(currentInst) > -1) { + inst = "violin"; + baseNoteOn = 14*128; + baseNoteOff = 15*128; + checkboxID = "strings"; + } else if ([42,43].indexOf(currentInst) > -1) { + inst = "cello"; + baseNoteOn = 16*128; + baseNoteOff = 17*128; + checkboxID = "strings"; + } else if ([32,33,34,35,36,37,38,39].indexOf(currentInst) > -1) { + inst = "bass"; + baseNoteOn = 18*128; + baseNoteOff = 19*128; + checkboxID = "bass"; + } else if ([24,25,26,27,28,29,30,31].indexOf(currentInst) > -1) { + inst = "guitar"; + baseNoteOn = 20*128; + baseNoteOff = 21*128; + checkboxID = "guitar"; + } else if ([72,73,74,75,76,77,78,79].indexOf(currentInst) > -1) { + inst = "flute"; + baseNoteOn = 22*128; + baseNoteOff = 23*128; + checkboxID = "winds"; + } else if ([64,65,66,67,68,69,70,71].indexOf(currentInst) > -1) { + inst = "clarinet"; + baseNoteOn = 24*128; + baseNoteOff = 25*128; + checkboxID = "winds"; + } else if ([56,57,58,59,60,61,62,63].indexOf(currentInst) > -1) { + inst = "trumpet"; + baseNoteOn = 26*128; + baseNoteOff = 27*128; + checkboxID = "winds"; + } else if ([46].indexOf(currentInst) > -1) { + inst = "harp"; + baseNoteOn = 28*128; + baseNoteOff = 29*128; + checkboxID = "harp"; + } else { + inst = "piano"; + baseNoteOn = 8*128; + baseNoteOff = 0*128; + checkboxID = "piano"; + } + + if (event.channel == 9) { + inst = "drum"; + baseNoteOn = 3840; + baseNoteOff = null; + checkboxID = "drums"; + } + if (event.type == "noteOff" || (event.type == "noteOn" && event.velocity==0)) { + if (baseNoteOff !== null) { + token = baseNoteOff + event.noteNumber; + encoded += token + " "; + } + } else if (event.type == "noteOn" && event.velocity > 0) { + token = baseNoteOn + event.noteNumber; + encoded += token + " "; + document.getElementById(checkboxID).checked = true; + } + } + + document.getElementById("inbox").value = encoded.trim(); + window.encodingToMidiFile(document.getElementById("inbox").value, "download_inbox"); + } +} + +var ding = new Audio('chord.wav'); +ding.volume = 0.1; + +window.extend = function() { + document.getElementById("button").disabled = true; + document.getElementById("loader-inner").style.animation = "progress 60s linear both"; + var genreList = ["chopin","mozart","rachmaninoff","ladygaga","country","disney","jazz","bach","beethoven","journey","thebeatles","video","broadway","franksinatra","bluegrass","tchaikovsky","liszt","everything","ragtime","andrehazes","cocciante","thecranberries","ligabue","metallica","traffic","philcollins","nineinchnails","thepretenders","sugarray","grandfunkrailroad","ron","ellington","fleetwoodmac","thebeachboys","kool & the gang","foreigner","tlc","scottjames","benfoldsfive","smashmouth","oasis","allsaints","donnasummer","weezer","bjork","mariahcarey","berte","cheaptrick","caroleking","thecars","gganderson","robertpalmer","zucchero","alicecooper","vanhalen","brucehornsby","coolio","jimmybuffett","lobo","badcompany","eminem","creedenceclearwaterrevival","deeppurple","shearinggeorge","robbiewilliams","dalla","ub40","lindaronstadt","sinatra","inxs","jonimitchell","michaeljackson","last","devo","shaniatwain","korn","brooksgarth","sweet","thewho","roxette","bowiedavid","beegees","renefroger","mina","estefangloria","mccartney","theventures","carboni","simplyred","santana","jewel","meatloaf","giorgia","nofx","rickymartin","thecure","thetemptations","tozzi","beck","eiffel65","jenniferlopez","reelbigfish","patsycline","richardcliff","styx","acdc","brucespringsteen","michaelgeorge","blondie","pinkfloyd","oldfieldmike","redhotchilipeppers","therollingstones","morandi","heart","robertaflack","pantera","alabama","jethrotull","hanson","mosch","ludwigvanbeethoven","dvorak","chrisrea","guns n' roses","duranduran","ericclapton","bettemidler","bwitched","gordonlightfoot","thegrassroots","chicago","whitezombie","michaelbolton","paulsimon","marillion","thepointersisters","theanimals","cher","haydn","aerosmith","supertramp","littleriverband","america","tonyorlando","tompetty","thecorrs","aliceinchains","kiss","prince","toto","vanmorrison","wagner","cashjohnny","annielennox","enya","thedoobiebrothers","thetragicallyhip","rush","laurapausini","stevemillerband","simonandgarfunkel","fiorellamannoia","olivianewton-john","carlysimon","elvispresley","vangelis","bobdylan","bbking","vengaboys","paoli","thehollies","alainsouchon","pooh","raf","fiorello","lionelrichie","jimihendrix","theeverlybrothers","limpbizkit","donhenley","georgeharrison","threedognight","johnmellencamp","carpenters","raycharles","basie","billyocean","scorpions","royorbison","whitneyhouston","ironmaiden","jovanotti","alanjackson","barrymanilow","hueylewis","kennyloggins","chopinfrederic","talkingheads","themonkees","rem","jeanmicheljarre","michelezarrillo","eurythmics","thedoors","guesswho","miller","thefourseasons","matiabazar","tompettyandtheheartbreakers","chickcorea","scottjoplin","amedeominghi","bryanadams","paulaabdul","rossivasco","billyjoel","daniele","claudedebussy","gilbert & sullivan","chakakhan","nirvana","garbage","andreabocelli","johnnyrivers","emerson, lake & palmer","theallmanbrothersband","zappa","boston","mango","barbrastreisand","willsmith","ozzyosbourne","janetjackson","antonellovenditti","u2","humperdinckengelbert","jamiroquai","zero","chuckberry","spicegirls","ledzeppelin","masini","thekinks","eagles","billyidol","alanismorissette","joecocker","jimcroce","bobmarley","blacksabbath","stonetemplepilots","silverchair","paulmccartney","blur","nek","greenday","thepolice","depechemode","rageagainstthemachine","madonna","rogerskenny","brooks & dunn","883","thedrifters","amygrant","herman","toriamos","eltonjohn","britneyspears","lennykravitz","celentano","ringostarr","neildiamond","aqua","oscarpeterson","joejackson","moby","collinsphil","leosayer","takethat","electriclightorchestra","pearljam","marcanthony","borodin","petshopboys","stevienicks","hollybuddy","turnertina","annaoxa","zztop","sting","themoodyblues","ruggeri","creed","claudebolling","renzoarbore","erasure","elviscostello","airsupply","tinaturner","leali","petergabriel","nodoubt","bread","huey lewis & the news","brandy","level42","radiohead","georgebenson","wonderstevie","thesmashingpumpkins","cyndilauper","rodstewart","bush","ramazzotti","bobseger","theshadows","gershwin","cream","biagioantonacci","steviewonder","nomadi","direstraits","davidbowie","amostori","thealanparsonsproject","johnlennon","crosbystillsnashandyoung","battiato","kansas","clementi","richielionel","yes","brassensgeorges","steelydan","jacksonmichael","buddyholly","earthwindandfire","natkingcole","therascals","bonjovi","alanparsons","backstreetboys","glencampbell","howardcarpendale","thesupremes","villagepeople","blink-182","jacksonbrowne","sade","lynyrdskynyrd","foofighters","2unlimited","battisti","hall & oates","stansfieldlisa","genesis","boyzone","theoffspring","tomjones","davematthewsband","johnelton","neilyoung","dionnewarwick","aceofbase","marilynmanson","taylorjames","rkelly","grandi","sublime","edvardgrieg","tool","bachjohannsebastian","patbenatar","celinedion","queen","soundgarden","abba","drdre","defleppard","dominofats","realmccoy","natalieimbruglia","hole","spinners","arethafranklin","reospeedwagon","indian","movie","scottish","irish","african","taylorswift","shakira","blues","latin","katyperry","world","kpop","africandrum","michaelbuble","rihanna","gospel","beyonce","chinese","arabic","adele","kellyclarkson","theeagles","handel","rachmaninov","schumann","christmas","dance","punk","natl_anthem","brahms","rap","ravel","burgmueller","other","schubert","granados","albeniz","mendelssohn","debussy","grieg","moszkowski","godowsky","folk","mussorgsky","kids","balakirev","hymns","verdi","hummel","deleted","delibes","saint-saens","puccini","satie","offenbach","widor","songs","stravinsky","vivaldi","gurlitt","alkan","weber","strauss","traditional","rossini","mahler","soler","sousa","telemann","busoni","scarlatti","stamitz","classical","jstrauss2","gabrieli","nielsen","purcell","donizetti","kuhlau","gounod","gibbons","weiss","faure","holst","spohr","monteverdi","reger","bizet","elgar","czerny","sullivan","shostakovich","franck","rubinstein","albrechtsberger","paganini","diabelli","gottschalk","wieniawski","lully","morley","sibelius","scriabin","heller","thalberg","dowland","carulli","pachelbel","sor","marcello","ketterer","rimsky-korsakov","ascher","bruckner","janequin","anonymous","kreutzer","sanz","joplin","susato","giuliani","lassus","palestrina","smetana","berlioz","couperin","gomolka","daquin","herz","campion","walthew","pergolesi","reicha","polak","holborne","hassler","corelli","cato","azzaiolo","anerio","gastoldi","goudimel","dussek","prez","cimarosa","byrd","praetorius","rameau","khachaturian","machaut","gade","perosi","gorzanis","smith","haberbier","carr","marais","glazunov","guerrero","cabanilles","losy","roman","hasse","sammartini","blow","zipoli","duvernoy","aguado","cherubini","victoria","field","andersen","poulenc","d'aragona","lemire","krakowa","maier","rimini","encina","banchieri","best","galilei","warhorse","gypsy","soundtrack","encore","roblaidlow","nationalanthems","benjyshelton","ongcmu","crosbystillsnashyoung","smashingpumpkins","aaaaaaaaaaa","alanismorrisette","animenz","onedirection","nintendo","disneythemes","gunsnroses","rollingstones","juliancasablancas","abdelmoinealfa","berckmansdeoliveira","moviethemes","beachboys","davemathews","videogamethemes","moabberckmansdeoliveira","unknown","cameronleesimpson","johannsebastianbach","thecarpenters","elo","nightwish","blink182","emersonlakeandpalmer","tvthemes"]; + var genre = document.getElementById("genre").value; + if (genre == "") { + genre = genreList[Math.floor(Math.random()*genreList.length)]; + } + fetch("https://musenet.openai.com/sample", { + "method": "POST", + "headers": { + "Content-Type": "application/json" + }, + "body": JSON.stringify({ + "genre": genre, + "instrument":{ + "piano": document.getElementById("piano").checked, + "strings": document.getElementById("strings").checked, + "winds": document.getElementById("winds").checked, + "drums": document.getElementById("drums").checked, + "harp": document.getElementById("harp").checked, + "guitar": document.getElementById("guitar").checked, + "bass": document.getElementById("bass").checked + }, + "encoding":document.getElementById("inbox").value, + "temperature":parseFloat(document.getElementById("temperature").value), + "truncation":parseFloat(document.getElementById("truncation").value), + "generationLength":parseFloat(document.getElementById("generationLength").value), + "audioFormat": document.getElementById("format").value + }) + }).then(res => res.json()).then(function (response) { + window.oldDuration = Math.min(document.getElementById('sound1').duration, + document.getElementById('sound2').duration, + document.getElementById('sound3').duration, + document.getElementById('sound4').duration); + window.oldDuration -= 5; + if (isNaN(oldDuration) || !isFinite(oldDuration) || oldDuration < 0) { + oldDuration = 0; + } + //need to convert from dataURI to blob to avoid firefox issue + var format = "audio/mp3"; + var audioKey = "audioFile"; + if (response.completions[0].oggFile) { + format = "audio/ogg"; + audioKey = "oggFile"; + } + document.getElementById('sound1').src=URL.createObjectURL(new Blob([convertDataURIToBinary("data:"+format+";base64,"+response.completions[0][audioKey].substring(2,response.completions[0][audioKey].length-1))], {type : format})); + document.getElementById('sound2').src=URL.createObjectURL(new Blob([convertDataURIToBinary("data:"+format+";base64,"+response.completions[1][audioKey].substring(2,response.completions[1][audioKey].length-1))], {type : format})); + document.getElementById('sound3').src=URL.createObjectURL(new Blob([convertDataURIToBinary("data:"+format+";base64,"+response.completions[2][audioKey].substring(2,response.completions[2][audioKey].length-1))], {type : format})); + document.getElementById('sound4').src=URL.createObjectURL(new Blob([convertDataURIToBinary("data:"+format+";base64,"+response.completions[3][audioKey].substring(2,response.completions[3][audioKey].length-1))], {type : format})); + document.getElementById("outbox1").value = response.completions[0].encoding; + document.getElementById("outbox2").value = response.completions[1].encoding; + document.getElementById("outbox3").value = response.completions[2].encoding; + document.getElementById("outbox4").value = response.completions[3].encoding; + window.encodingToMidiFile(response.completions[0].encoding, "download_outbox1"); + window.encodingToMidiFile(response.completions[1].encoding, "download_outbox2"); + window.encodingToMidiFile(response.completions[2].encoding, "download_outbox3"); + window.encodingToMidiFile(response.completions[3].encoding, "download_outbox4"); + document.getElementById('sound1').currentTime = oldDuration; + document.getElementById('sound2').currentTime = oldDuration; + document.getElementById('sound3').currentTime = oldDuration; + document.getElementById('sound4').currentTime = oldDuration; + ding.play(); + document.getElementById("button").disabled = false; + document.getElementById("loader-inner").style.animation = "none"; + }).catch(error => { + ding.play(); + document.getElementById("button").disabled = false; + document.getElementById("loader-inner").style.animation = "none"; + alert(error); + }); +} + +function convertDataURIToBinary(dataURI) { + var BASE64_MARKER = ';base64,'; + var base64Index = dataURI.indexOf(BASE64_MARKER) + BASE64_MARKER.length; + var base64 = dataURI.substring(base64Index); + var raw = window.atob(base64); + var rawLength = raw.length; + var array = new Uint8Array(new ArrayBuffer(rawLength)); + + for(i = 0; i < rawLength; i++) { + array[i] = raw.charCodeAt(i); + } + return array; +} + +window.oldDuration = 0; + +window.encodingToMidiFile = function(encoding, outlink) { + var midiData = { + header: { + "format": 1, + "numTracks": 10, + "ticksPerBeat": 48 + }, + tracks: [[{"deltaTime":0,"channel":0,"type":"programChange","programNumber":0}], + [{"deltaTime":0,"channel":1,"type":"programChange","programNumber":40}], + [{"deltaTime":0,"channel":2,"type":"programChange","programNumber":42}], + [{"deltaTime":0,"channel":3,"type":"programChange","programNumber":32}], + [{"deltaTime":0,"channel":4,"type":"programChange","programNumber":24}], + [{"deltaTime":0,"channel":5,"type":"programChange","programNumber":73}], + [{"deltaTime":0,"channel":6,"type":"programChange","programNumber":71}], + [{"deltaTime":0,"channel":7,"type":"programChange","programNumber":56}], + [{"deltaTime":0,"channel":8,"type":"programChange","programNumber":46}], + [{"deltaTime":0,"channel":9,"type":"programChange","programNumber":0}]] + }; + + var tokens = encoding.trim().split(" "); + + var deltaTimes = [0,0,0,0,0,0,0,0,0,0]; + var usedDrumNotes = new Set(); + for (var i=0; i 0 ? "noteOn" : "noteOff", + "noteNumber": parsedToken.pitch, + "velocity": parsedToken.volume + }); + if (parsedToken.instrument == "drum") { + usedDrumNotes.add(parsedToken.pitch); + } + deltaTimes[trackIndex] = 0; + } else if (parsedToken.type == "wait") { + for (var j=0; j<10; j++) { + deltaTimes[j] += parsedToken.delay; + } + } + } + for (let pitch of usedDrumNotes) { + midiData.tracks[9].push({ + "deltaTime": deltaTimes[9], + "channel": 9, + "type": "noteOff", + "noteNumber": pitch, + "velocity": 0 + }); + deltaTimes[9] = 0; + } + + for (var i=0; i track.length > 2); + + console.log(midiData); + + var midiBlob = new Blob([new Uint8Array(writeMidi(midiData))], {type: "audio/midi"}); + document.getElementById(outlink).href = URL.createObjectURL(midiBlob); + document.getElementById(outlink).target = "_blank"; +} +window.encodingToMidiFile(document.getElementById("inbox").value, "download_inbox"); +window.encodingToMidiFile(document.getElementById("outbox1").value, "download_outbox1"); +window.encodingToMidiFile(document.getElementById("outbox2").value, "download_outbox2"); +window.encodingToMidiFile(document.getElementById("outbox3").value, "download_outbox3"); +window.encodingToMidiFile(document.getElementById("outbox4").value, "download_outbox4"); + +function parseToken(token) { + token = +token; + if (token >= 0 && token < 3840) { + var pitch = token % 128; + var inst_vol_index = token >> 7; + var instrument = ["piano","piano","piano","piano","piano","piano","piano","piano","piano","piano","piano","piano","piano","piano", + "violin","violin","cello","cello","bass","bass","guitar","guitar", + "flute","flute","clarinet","clarinet","trumpet","trumpet","harp","harp"][inst_vol_index]; + var volume = [0,24,32,40,48,56,64,72,80,88,96,104,112,120,80,0,80,0,80,0,80,0,80,0,80,0,80,0,80,0][inst_vol_index]; + return {"type":"note","pitch":pitch,"instrument":instrument,"volume":volume}; + } else if (token >= 3840 && token < 3968) { + var pitch = token % 128; + return {"type":"note","pitch":pitch,"instrument":"drum","volume":80}; + } else if (token >= 3968 && token < 4096) { + var delay = (token % 128) + 1; + return {"type":"wait","delay":delay} + } else if (token == 4096) { + return {"type":"start"} + } else { + return {"type":"invalid"} + } + +} \ No newline at end of file diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 00000000..bcc2bab4 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,11 @@ +{ + "requires": true, + "lockfileVersion": 1, + "dependencies": { + "midi-file": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/midi-file/-/midi-file-1.1.1.tgz", + "integrity": "sha512-HI6Y/kc9g1Af0OqMkTzI2AeGgPJMONgQcd/13gBf8C9BcUh7wa/AnXR1Fgl8SIuO7GJmFhSIACEWcwiAz2E2Pg==" + } + } +} diff --git a/tokens.txt b/tokens.txt new file mode 100644 index 00000000..0dc373f6 --- /dev/null +++ b/tokens.txt @@ -0,0 +1,768 @@ +4096 +4097 +4098 +4099 drums +4100 winds +4101 winds_drums +4102 harp +4103 harp_drums +4104 harp_winds +4105 harp_winds_drums +4106 guitar +4107 guitar_drums +4108 guitar_winds +4109 guitar_winds_drums +4110 guitar_harp +4111 guitar_harp_drums +4112 guitar_harp_winds +4113 guitar_harp_winds_drums +4114 bass +4115 bass_drums +4116 bass_winds +4117 bass_winds_drums +4118 bass_harp +4119 bass_harp_drums +4120 bass_harp_winds +4121 bass_harp_winds_drums +4122 bass_guitar +4123 bass_guitar_drums +4124 bass_guitar_winds +4125 bass_guitar_winds_drums +4126 bass_guitar_harp +4127 bass_guitar_harp_drums +4128 bass_guitar_harp_winds +4129 bass_guitar_harp_winds_drums +4130 strings +4131 strings_drums +4132 strings_winds +4133 strings_winds_drums +4134 strings_harp +4135 strings_harp_drums +4136 strings_harp_winds +4137 strings_harp_winds_drums +4138 strings_guitar +4139 strings_guitar_drums +4140 strings_guitar_winds +4141 strings_guitar_winds_drums +4142 strings_guitar_harp +4143 strings_guitar_harp_drums +4144 strings_guitar_harp_winds +4145 strings_guitar_harp_winds_drums +4146 strings_bass +4147 strings_bass_drums +4148 strings_bass_winds +4149 strings_bass_winds_drums +4150 strings_bass_harp +4151 strings_bass_harp_drums +4152 strings_bass_harp_winds +4153 strings_bass_harp_winds_drums +4154 strings_bass_guitar +4155 strings_bass_guitar_drums +4156 strings_bass_guitar_winds +4157 strings_bass_guitar_winds_drums +4158 strings_bass_guitar_harp +4159 strings_bass_guitar_harp_drums +4160 strings_bass_guitar_harp_winds +4161 strings_bass_guitar_harp_winds_drums +4162 piano +4163 piano_drums +4164 piano_winds +4165 piano_winds_drums +4166 piano_harp +4167 piano_harp_drums +4168 piano_harp_winds +4169 piano_harp_winds_drums +4170 piano_guitar +4171 piano_guitar_drums +4172 piano_guitar_winds +4173 piano_guitar_winds_drums +4174 piano_guitar_harp +4175 piano_guitar_harp_drums +4176 piano_guitar_harp_winds +4177 piano_guitar_harp_winds_drums +4178 piano_bass +4179 piano_bass_drums +4180 piano_bass_winds +4181 piano_bass_winds_drums +4182 piano_bass_harp +4183 piano_bass_harp_drums +4184 piano_bass_harp_winds +4185 piano_bass_harp_winds_drums +4186 piano_bass_guitar +4187 piano_bass_guitar_drums +4188 piano_bass_guitar_winds +4189 piano_bass_guitar_winds_drums +4190 piano_bass_guitar_harp +4191 piano_bass_guitar_harp_drums +4192 piano_bass_guitar_harp_winds +4193 piano_bass_guitar_harp_winds_drums +4194 piano_strings +4195 piano_strings_drums +4196 piano_strings_winds +4197 piano_strings_winds_drums +4198 piano_strings_harp +4199 piano_strings_harp_drums +4200 piano_strings_harp_winds +4201 piano_strings_harp_winds_drums +4202 piano_strings_guitar +4203 piano_strings_guitar_drums +4204 piano_strings_guitar_winds +4205 piano_strings_guitar_winds_drums +4206 piano_strings_guitar_harp +4207 piano_strings_guitar_harp_drums +4208 piano_strings_guitar_harp_winds +4209 piano_strings_guitar_harp_winds_drums +4210 piano_strings_bass +4211 piano_strings_bass_drums +4212 piano_strings_bass_winds +4213 piano_strings_bass_winds_drums +4214 piano_strings_bass_harp +4215 piano_strings_bass_harp_drums +4216 piano_strings_bass_harp_winds +4217 piano_strings_bass_harp_winds_drums +4218 piano_strings_bass_guitar +4219 piano_strings_bass_guitar_drums +4220 piano_strings_bass_guitar_winds +4221 piano_strings_bass_guitar_winds_drums +4222 piano_strings_bass_guitar_harp +4223 piano_strings_bass_guitar_harp_drums +4224 piano_strings_bass_guitar_harp_winds +4225 piano_strings_bass_guitar_harp_winds_drums +4226 chopin +4227 liszt +4228 everything +4229 broadway +4230 rachmaninoff +4231 ragtime +4232 andrehazes +4233 cocciante +4234 thecranberries +4235 ligabue +4236 metallica +4237 traffic +4238 philcollins +4239 nineinchnails +4240 thepretenders +4241 sugarray +4242 grandfunkrailroad +4243 ron +4244 ellington +4245 fleetwoodmac +4246 thebeachboys +4247 kool & the gang +4248 foreigner +4249 tlc +4250 scottjames +4251 benfoldsfive +4252 smashmouth +4253 oasis +4254 allsaints +4255 donnasummer +4256 weezer +4257 bjork +4258 mariahcarey +4259 berte +4260 cheaptrick +4261 caroleking +4262 thecars +4263 gganderson +4264 robertpalmer +4265 zucchero +4266 alicecooper +4267 vanhalen +4268 brucehornsby +4269 coolio +4270 jimmybuffett +4271 lobo +4272 badcompany +4273 eminem +4274 creedenceclearwaterrevival +4275 deeppurple +4276 shearinggeorge +4277 robbiewilliams +4278 dalla +4279 ub40 +4280 lindaronstadt +4281 sinatra +4282 inxs +4283 jonimitchell +4284 michaeljackson +4285 last +4286 devo +4287 shaniatwain +4288 korn +4289 brooksgarth +4290 sweet +4291 thewho +4292 roxette +4293 bowiedavid +4294 beegees +4295 renefroger +4296 mina +4297 estefangloria +4298 mccartney +4299 theventures +4300 carboni +4301 simplyred +4302 santana +4303 jewel +4304 meatloaf +4305 giorgia +4306 nofx +4307 rickymartin +4308 thecure +4309 thetemptations +4310 tozzi +4311 beck +4312 eiffel65 +4313 jenniferlopez +4314 reelbigfish +4315 patsycline +4316 richardcliff +4317 styx +4318 acdc +4319 brucespringsteen +4320 michaelgeorge +4321 blondie +4322 pinkfloyd +4323 oldfieldmike +4324 redhotchilipeppers +4325 therollingstones +4326 morandi +4327 heart +4328 robertaflack +4329 pantera +4330 alabama +4331 jethrotull +4332 hanson +4333 mosch +4334 ludwigvanbeethoven +4335 dvorak +4336 chrisrea +4337 guns n' roses +4338 duranduran +4339 ericclapton +4340 bettemidler +4341 bwitched +4342 gordonlightfoot +4343 thegrassroots +4344 chicago +4345 whitezombie +4346 michaelbolton +4347 paulsimon +4348 marillion +4349 thepointersisters +4350 theanimals +4351 cher +4352 haydn +4353 aerosmith +4354 supertramp +4355 littleriverband +4356 america +4357 tonyorlando +4358 tompetty +4359 thecorrs +4360 aliceinchains +4361 kiss +4362 prince +4363 toto +4364 vanmorrison +4365 wagner +4366 cashjohnny +4367 annielennox +4368 enya +4369 thedoobiebrothers +4370 thetragicallyhip +4371 rush +4372 laurapausini +4373 stevemillerband +4374 simonandgarfunkel +4375 fiorellamannoia +4376 olivianewton-john +4377 carlysimon +4378 elvispresley +4379 vangelis +4380 bobdylan +4381 bbking +4382 vengaboys +4383 paoli +4384 thehollies +4385 alainsouchon +4386 pooh +4387 raf +4388 fiorello +4389 lionelrichie +4390 jimihendrix +4391 theeverlybrothers +4392 limpbizkit +4393 donhenley +4394 georgeharrison +4395 threedognight +4396 johnmellencamp +4397 carpenters +4398 raycharles +4399 basie +4400 billyocean +4401 scorpions +4402 royorbison +4403 whitneyhouston +4404 ironmaiden +4405 jovanotti +4406 journey +4407 alanjackson +4408 barrymanilow +4409 hueylewis +4410 kennyloggins +4411 chopinfrederic +4412 talkingheads +4413 themonkees +4414 rem +4415 jeanmicheljarre +4416 michelezarrillo +4417 eurythmics +4418 thedoors +4419 guesswho +4420 miller +4421 thefourseasons +4422 matiabazar +4423 tompettyandtheheartbreakers +4424 chickcorea +4425 scottjoplin +4426 amedeominghi +4427 bryanadams +4428 paulaabdul +4429 rossivasco +4430 billyjoel +4431 daniele +4432 claudedebussy +4433 gilbert & sullivan +4434 chakakhan +4435 nirvana +4436 garbage +4437 andreabocelli +4438 johnnyrivers +4439 emerson, lake & palmer +4440 theallmanbrothersband +4441 zappa +4442 boston +4443 mango +4444 barbrastreisand +4445 willsmith +4446 ozzyosbourne +4447 janetjackson +4448 antonellovenditti +4449 u2 +4450 humperdinckengelbert +4451 jamiroquai +4452 zero +4453 chuckberry +4454 spicegirls +4455 ledzeppelin +4456 masini +4457 thekinks +4458 eagles +4459 billyidol +4460 alanismorissette +4461 joecocker +4462 jimcroce +4463 bobmarley +4464 blacksabbath +4465 stonetemplepilots +4466 silverchair +4467 paulmccartney +4468 blur +4469 nek +4470 greenday +4471 thepolice +4472 depechemode +4473 rageagainstthemachine +4474 madonna +4475 rogerskenny +4476 brooks & dunn +4477 883 +4478 thedrifters +4479 amygrant +4480 herman +4481 toriamos +4482 eltonjohn +4483 britneyspears +4484 lennykravitz +4485 celentano +4486 ringostarr +4487 neildiamond +4488 aqua +4489 oscarpeterson +4490 joejackson +4491 franksinatra +4492 moby +4493 collinsphil +4494 leosayer +4495 takethat +4496 electriclightorchestra +4497 pearljam +4498 marcanthony +4499 borodin +4500 petshopboys +4501 stevienicks +4502 hollybuddy +4503 turnertina +4504 annaoxa +4505 zztop +4506 sting +4507 themoodyblues +4508 ruggeri +4509 creed +4510 claudebolling +4511 renzoarbore +4512 erasure +4513 elviscostello +4514 airsupply +4515 tinaturner +4516 leali +4517 petergabriel +4518 nodoubt +4519 bread +4520 huey lewis & the news +4521 brandy +4522 level42 +4523 radiohead +4524 georgebenson +4525 wonderstevie +4526 thesmashingpumpkins +4527 cyndilauper +4528 rodstewart +4529 bush +4530 ramazzotti +4531 bobseger +4532 theshadows +4533 gershwin +4534 cream +4535 biagioantonacci +4536 steviewonder +4537 nomadi +4538 direstraits +4539 davidbowie +4540 amostori +4541 thealanparsonsproject +4542 johnlennon +4543 crosbystillsnashandyoung +4544 battiato +4545 kansas +4546 clementi +4547 richielionel +4548 yes +4549 brassensgeorges +4550 steelydan +4551 jacksonmichael +4552 thebeatles +4553 buddyholly +4554 earthwindandfire +4555 natkingcole +4556 therascals +4557 bonjovi +4558 alanparsons +4559 backstreetboys +4560 glencampbell +4561 howardcarpendale +4562 thesupremes +4563 villagepeople +4564 blink-182 +4565 jacksonbrowne +4566 sade +4567 lynyrdskynyrd +4568 foofighters +4569 2unlimited +4570 battisti +4571 hall & oates +4572 stansfieldlisa +4573 genesis +4574 boyzone +4575 theoffspring +4576 tomjones +4577 davematthewsband +4578 johnelton +4579 neilyoung +4580 dionnewarwick +4581 aceofbase +4582 marilynmanson +4583 taylorjames +4584 rkelly +4585 grandi +4586 sublime +4587 edvardgrieg +4588 tool +4589 bachjohannsebastian +4590 patbenatar +4591 celinedion +4592 queen +4593 soundgarden +4594 abba +4595 drdre +4596 defleppard +4597 dominofats +4598 realmccoy +4599 natalieimbruglia +4600 hole +4601 spinners +4602 arethafranklin +4603 reospeedwagon +4604 indian +4605 video +4606 movie +4607 scottish +4608 irish +4609 ladygaga +4610 african +4611 taylorswift +4612 shakira +4613 blues +4614 latin +4615 katyperry +4616 world +4617 kpop +4618 africandrum +4619 michaelbuble +4620 rihanna +4621 gospel +4622 beyonce +4623 chinese +4624 arabic +4625 country +4626 adele +4627 jazz +4628 kellyclarkson +4629 theeagles +4630 mozart +4631 handel +4632 tchaikovsky +4633 rachmaninov +4634 beethoven +4635 schumann +4636 christmas +4637 bach +4638 dance +4639 punk +4640 natl_anthem +4641 brahms +4642 disney +4643 rap +4644 ravel +4645 burgmueller +4646 other +4647 schubert +4648 granados +4649 albeniz +4650 mendelssohn +4651 debussy +4652 grieg +4653 moszkowski +4654 godowsky +4655 folk +4656 mussorgsky +4657 kids +4658 balakirev +4659 hymns +4660 verdi +4661 hummel +4662 deleted +4663 delibes +4664 saint-saens +4665 puccini +4666 satie +4667 offenbach +4668 widor +4669 songs +4670 stravinsky +4671 vivaldi +4672 gurlitt +4673 alkan +4674 weber +4675 strauss +4676 traditional +4677 rossini +4678 mahler +4679 soler +4680 sousa +4681 telemann +4682 busoni +4683 scarlatti +4684 stamitz +4685 classical +4686 jstrauss2 +4687 gabrieli +4688 nielsen +4689 purcell +4690 donizetti +4691 kuhlau +4692 gounod +4693 gibbons +4694 weiss +4695 faure +4696 holst +4697 spohr +4698 monteverdi +4699 reger +4700 bizet +4701 elgar +4702 czerny +4703 sullivan +4704 shostakovich +4705 franck +4706 rubinstein +4707 albrechtsberger +4708 paganini +4709 diabelli +4710 gottschalk +4711 wieniawski +4712 lully +4713 morley +4714 sibelius +4715 scriabin +4716 heller +4717 thalberg +4718 dowland +4719 carulli +4720 pachelbel +4721 sor +4722 marcello +4723 ----- Internal Server Error ----- +4724 ketterer +4725 rimsky-korsakov +4726 ascher +4727 bruckner +4728 janequin +4729 anonymous +4730 kreutzer +4731 sanz +4732 joplin +4733 susato +4734 giuliani +4735 lassus +4736 palestrina +4737 smetana +4738 berlioz +4739 couperin +4740 gomolka +4741 daquin +4742 herz +4743 campion +4744 ----- Internal Server Error ----- +4745 walthew +4746 pergolesi +4747 ----- Internal Server Error ----- +4748 reicha +4749 polak +4750 holborne +4751 hassler +4752 corelli +4753 cato +4754 azzaiolo +4755 anerio +4756 gastoldi +4757 goudimel +4758 dussek +4759 prez +4760 cimarosa +4761 byrd +4762 praetorius +4763 rameau +4764 khachaturian +4765 machaut +4766 gade +4767 perosi +4768 gorzanis +4769 smith +4770 haberbier +4771 carr +4772 marais +4773 glazunov +4774 guerrero +4775 ----- Internal Server Error ----- +4776 cabanilles +4777 losy +4778 roman +4779 hasse +4780 sammartini +4781 blow +4782 zipoli +4783 duvernoy +4784 aguado +4785 cherubini +4786 victoria +4787 field +4788 andersen +4789 ----- Internal Server Error ----- +4790 poulenc +4791 d'aragona +4792 lemire +4793 krakowa +4794 maier +4795 rimini +4796 encina +4797 banchieri +4798 best +4799 galilei +4800 warhorse +4801 gypsy +4802 soundtrack +4803 encore +4804 roblaidlow +4805 nationalanthems +4806 benjyshelton +4807 ongcmu +4808 crosbystillsnashyoung +4809 smashingpumpkins +4810 aaaaaaaaaaa +4811 alanismorrisette +4812 animenz +4813 onedirection +4814 nintendo +4815 disneythemes +4816 gunsnroses +4817 rollingstones +4818 juliancasablancas +4819 abdelmoinealfa +4820 berckmansdeoliveira +4821 moviethemes +4822 beachboys +4823 davemathews +4824 videogamethemes +4825 moabberckmansdeoliveira +4826 bluegrass +4827 unknown +4828 cameronleesimpson +4829 johannsebastianbach +4830 thecarpenters +4831 elo +4832 nightwish +4833 blink182 +4834 emersonlakeandpalmer +4835 tvthemes +4836 ----- Internal Server Error ----- +4837 ----- Internal Server Error ----- +4838 ----- Internal Server Error ----- +4839 ----- Internal Server Error ----- +4840 ----- Internal Server Error ----- +4841 ----- Internal Server Error ----- +4842 ----- Internal Server Error ----- +4843 ----- Internal Server Error ----- +4844 ----- Internal Server Error ----- +4845 ----- Internal Server Error ----- +4846 ----- Internal Server Error ----- +4847 ----- Internal Server Error ----- +4848 ----- Internal Server Error ----- +4849 ----- Internal Server Error ----- +4850 ----- Internal Server Error ----- +4851 ----- Internal Server Error ----- +4852 ----- Internal Server Error ----- +4853 ----- Internal Server Error ----- +4854 ----- Internal Server Error ----- +4855 ----- Internal Server Error ----- +4856 ----- Internal Server Error ----- +4857 ----- Internal Server Error ----- +4858 ----- Internal Server Error ----- +4859 ----- Internal Server Error ----- +4860 ----- Internal Server Error ----- +4861 ----- Internal Server Error ----- +4862 ----- Internal Server Error ----- +4863 ----- Internal Server Error ----- From 8e326ac4a586c05d38e206f26e4cbf7ad34d54f6 Mon Sep 17 00:00:00 2001 From: Adam Oswald Date: Wed, 12 Oct 2022 12:26:52 -0400 Subject: [PATCH 2/2] Rename build.bat.txt to build.bat --- build.bat.txt => build.bat | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename build.bat.txt => build.bat (100%) diff --git a/build.bat.txt b/build.bat similarity index 100% rename from build.bat.txt rename to build.bat