MIDI
Midi converter : podman exec -ti NodeMidi /bin/bash ; cd /node
node run.js example.mid 1200
Result: example.txt
cp example.txt new.txt
node makeFromTXT.js new.txt
Result: _new.mid
Load Data in Editor
podman exec -ti NodeMidi /bin/bash
cp /node/new.txt data/demo.txt
* Changes: /home/podman/NodeMidi/html/Editor
MIDI Converter
Oracle Linux 8.6
nmtui : Network Address : set IP Address/subnetmask , default gw, dns
nmcli connection up enp0s3
systemctl stop firewalld
yum install -y podman
mkdir -p /home/podman/NodeMidi
mkdir -p /home/podman/NodeMidi/html
chown -R 48:48 /home/podman/NodeMidi
vi /home/podman/Node/install.sh
systemctl disable firewalld
systemctl stop firewalld
yum install -y epel-release
yum install -y httpd
yum install -y nodejs
yum install -y python38
npm install midi-note
npm install @tonejs/midi
yum install -y wget
# ---
echo "This should already be in the directory where you mount the /node onto "
echo " TO BE DONE : #wget http://photoquesting.com/midi/midi.tar "
echo "TO BE DONE : #tar xvf midi.tar "
echo "#cp 1.mid example.mid "
mkdir -p /var/www/html/Node
chown -R 48:48 /var/www/html/Node
echo "
const fs=require('fs');
const { Midi } = require('@tonejs/midi')
var note = require('midi-note')
const midiData = fs.readFileSync('example.mid')
const midi = new Midi(midiData)
console.log('Midi read :', midi);
console.log('Midi tracks/notes:', midi.tracks);
for(t in midi.tracks){
console.log('Track t:', midi.tracks[t]);
for(n in midi.tracks[t].notes){
var midiNote=midi.tracks[t].notes[n];
console.log('note.midi', midiNote.midi);
console.log('converted:', note(midiNote.midi));
}
}
" > /node/run_oldie.js
cd /node
echo "-----------------------"
cat info.inf
echo "-----------------------"
((httpd &) | sleep infinity)
vi ~/startNodeMidi.sh
podman stop NodeMidi
podman rm -f NodeMidi
podman run --name=NodeMidi -v /home/podman/NodeMidi/html:/var/www/html/ -p 8011:80 -v /home/podman/NodeMidi:/node:Z -t -d container-registry.oracle.com/os/oraclelinux:8 /bin/bash -c " sleep infinity "
podman exec -i NodeMidi /bin/bash -c "sh /node/install.sh" &
echo "interactive "
echo "podman exec -ti NodeMidi /bin/bash "
sh ~/startNodeMidi.sh
podman exec -ti NodeMidi /bin/bash
cd /node
vi run.js
//
// Generate midi files
//
const fs=require('fs');
const { Midi } = require('@tonejs/midi')
var note = require('midi-note')
const zeroPad = (num, places) => String(num).padStart(places, '0')
function getFilesizeInBytes(filename) {
var stats = fs.statSync(filename);
var fileSizeInBytes = stats.size;
return fileSizeInBytes;
}
console.log(" Process argv :" , process.argv.length, process.argv );
if(process.argv.length < 3){
console.log(" use run.js with midi file as argument : node run.js 1.mid [duration]");
return;
}
var tempo=0;
var inputMidi=process.argv[2];
var txtOutputFile=inputMidi.replace(".mid", ".txt");
var isSmallFile=getFilesizeInBytes(inputMidi) < 120;
console.log(getFilesizeInBytes(inputMidi), isSmallFile);
const midiData = fs.readFileSync(inputMidi)
const midi = new Midi(midiData)
if(isSmallFile ){
tempo=parseInt(process.argv[3]);
}else{
console.log("---0-0-0--0-0");
console.log("---------------------------------Source tempo: ", midi.header.tempos[0].bpm);
console.log("---0-0-0--0-0");
tempo=parseInt(midi.header.tempos[0].bpm)*100;
}
//console.log("txtOutputFile", txtOutputFile);
console.log("input", tempo);
if(isNaN(tempo)){
console.log("Bad tempo", midi.header.tempos);
return;
}
console.log("------------");
var outnotes=[];
for(t in midi.tracks){
for(n in midi.tracks[t].notes){
var midiNote=midi.tracks[t].notes[n];
var duration=midiNote. durationTicks;
var _note=note(midiNote.midi);
var outnote="";
if(_note.length > 2){
outnote=_note.substring(0,1);
outnote+=_note.substring(2,3);
}else{
outnote=_note;
}
//console.log("midiNote duration", duration, 'converted outnote :', outnote,"note()", _note);
outnotes.push({note:""+outnote,duration:duration});;
}
}
var output="";
fs.writeFileSync('/var/www/html/Node/index.html', output);
var midiOut = new Midi()
// add a track
var track = midiOut.addTrack();
var timer=0;
var textOutput="";
for(i=0; i < outnotes.length; i++){
var outnote=outnotes[i];
var duration=parseInt(outnote.duration)/(tempo);
var name=outnote.note;
var note={name:name, time:timer, duration:duration};
var durationFormat=zeroPad(duration*100, 8);
var timerFormat=zeroPad(timer*100, 8);
textOutput+=""+name+":"+timerFormat+":"+durationFormat+" ";
track = track.addNote(note);
timer+=duration;
}
//console.log("textOutout", textOutput);
console.log("------------");
console.log(" Parse String/TextFile ");
console.log("------------");
var midiOutFile=new Midi();
var outputTrack = midiOutFile.addTrack();
var textSplit=textOutput.split(" ");
var t=0;
var outTimer=0;
for(t=0; t < textSplit.length; t++){
var name=textSplit[t].split(":")[0];
var timer=parseInt(textSplit[t].split(":")[1])/100;
var duration=parseInt(textSplit[t].split(":")[2])/100;
var note={name:name, time:timer, duration:duration};
if(!isNaN(duration) && !isNaN(timer)){
outputTrack = outputTrack.addNote(note);
}
}
fs.writeFileSync("/var/www/html/Node/a.mid", new Buffer(midiOutFile.toArray()))
fs.writeFileSync("/var/www/html/Node/"+txtOutputFile, textOutput)
fs.writeFileSync(""+txtOutputFile, textOutput)
------
MidiEditor
Download Midi Files : https://www.midiworld.com/
https://www.conversion-tool.com/audiotomidi/
* Music Editor: /home/podman/NodeMidi/html/Editor
* Browser: http://photoquesting.com:8011/Editor/
* Midi converter : podman exec -ti NodeMidi /bin/bash ; cd /node
node run.js example.mid 1200
Result: example.txt
cp example.txt new.txt
node makeFromTXT.js new.txt
Result: _new.mid
Load Data in Editor
podman exec -ti NodeMidi /bin/bash
cp /node/new.txt data/demo.txt
* Changes: /home/podman/NodeMidi/html/Editor
----
podman exec -ti NodeMidi /bin/bash
cd /node/html/Editor
sh installInContainer.sh
cd upload
node server.js
----