Xrenoise To Mid?


(MickRip) #1

I have a few practical reasons to create a few .mid files from time to time, and I was wondering if there’s going to be a simple way to generate a midi file from Renoise. Either using a “save as”, or a XRNS->MID converter someone will be nice enough to write :P … is anyone here thinking about it?


File Format
Help: Best Way Of Doing Midi Export For Single Track In Renoise
Harmony Navigator
Pos_To_Time() Function. (Midi)
(migloJE) #2

i am interested in this too, waiting if there will be any tool to do that…


(MickRip) #3

Yeah, this is one of the reasons why I started the php script. I was going to convert from XRNS to MF2T, and then from that to a binary midi file.


(Mark Versluis) #4

Hi guys , is there any news about converting a .xrns to .midi ?
Does anyone know a way , or tried something with any succes ?

a .midi file is very handy when you want a track to be remixed by somebody.
Now it is not possible yet , at least I don’t have a clue how to do it … and it is really the only downside of renoise I can think of :)

So please update me ?


(looza) #5

there are workarounds with energyxt or the midi-sync, but no easy way, unfortunately.


(Marc Shake) #6

Yeah, that is IMHO the biggest fault, that simple midi-export is not onboard of my favourite tool


(Mark Versluis) #7

Are you willing to help me out and explain how to do it ?
All I need is some midi file of my renoise production , so record labels can send that to remixers ?


(Beatslaughter) #8

Check this thread:
https://forum.renoise.com/t/finding-some-way-even-if-antiquated-to-export-midi/19532


(Marc Shake) #9

This Library seems to be a good approach for converting XRNS (which is XML, fact) to standardmidi…

Although I did not check the files…

Edit: http://staff.dasdeck.de/valentin/midi/

Sorry ;)


(URBANoid) #10

Hi all, I hope I’m posting to the right topic,
I use Renoise for some years now and since I was addicted to the “tracker”-style method since my Amiga days, I still use Renoise and Vstis (rarely I use plain samples any more) as my main composing method.

I didn’t mind missing that feature in the past, but in the last year since I have started remixing my Renoise-sequences in Cubase (adding vocals, physical instruments etc) I wished there was a save/export to midi feature for my songs (so I can import my Renoise tracks as midi tracks to Cubase).

As for now, I am going to try this energy xt vsti that I just noticed on this topic

P.S. sorry for my English


(Conner_Bw) #11

Is anyone working on this?

I’m having a look at the PHP midi class linked by Marc Shake and it’s pretty damn impressive. This clear explanation of the standard midi file format is also very good. I have a feeling I could do this myself, but I don’t quite know what constitutes “midi”, that is to say what parts of XRNS are translatable into MIDI? Surely not the samples/instruments, surely not the DSP/VST, right?

What would people expect a MIDI export contain? So far as I can see:

  • Renoise Instrument and associated notes spanning 1 to many Renoise tracks and patterns -> Midi instrument to Midi track
  • Preserve volume info of instruments
  • Preserve BPM and tempo change

Is that it?


(twilek) #12

Apart from that an export should at least also support: Pitch bend, panning, modulation and all kind of control changes and program changes.


(Conner_Bw) #13

Can you specify “all kind of control changes and program changes?” This might be growing out of my range of being able to pull this off, but a clearly defined spec would help anyone trying.


(twilek) #14

It is basically everything that can be sent by the *MIDI-CC Device or by the effect commands 9x in the panning column, and for MIDI-instruments it is also the settings for program, channel and bank.
But a good start can maybe be to skip those parts and first just focus on the basic things and then add support for this later on…


(Malcolm Jacobson) #15

Wow, that is impressive. The xml2mid.php script is especially cool! :)

Why not start with the content between the tags and see how you go? It would be the “easiest” data to work with to prove the concept.

Cheers,

Malcolm.


(Transcender) #16

Yes, the tags are sufficient enough initially. Just accurate notes and their velocity/volume values will make a HUGE difference to many, many people who work in Cubase, SONAR, Ableton, Logic and other softwares (or cooperate on projects with other producers who do).

One thing is for sure… Whoever is first to develop a working .mid exporter for Renoise will be IMMORTAL. Yeah – IMMORTAL! Because, this is THE ONE feature of all features that I’ve heard so many professional producers over the years criticize Renoise for not having implemented (yet). I know that the .mid export will open up a whole new world for the possibility to attract MANY new Renoise users as well!

Keep up the good work, Conner_Bw and other developers, you are true heroes. Respect!


(Conner_Bw) #17

I’ve started on this. As I don’t know much about MIDI I need some questions answered. Before asking them, I will preface with my approach to solving this problem. I am converting to XRNS to MF2T/T2MF text format. The spec is available in the readme file. Output can be tested here. Example output looks like this:

MFile 0 1 96  
MTrk  
0 TimeSig 4/4 24 8  
0 Tempo 500000  
0 PrCh ch=1 p=5  
0 PrCh ch=2 p=46  
0 PrCh ch=3 p=70  
0 On ch=3 n=48 v=96  
0 On ch=3 n=60 v=96  
96 On ch=2 n=67 v=64  
192 On ch=1 n=76 v=32  
384 Off ch=3 n=48 v=64  
384 Off ch=3 n=60 v=64   
384 Off ch=2 n=67 v=64  
384 Off ch=1 n=76 v=64  
TrkEnd  

The following questions, in bold, I need answered:

-> MFile 0 1 96
File header
Mfile
= standard midifile (format 0 or 1)
= number of tracks
= I don’t know what this is? someone explain the Renoise equivalent?

-> 0 PrCh ch=1 p=5
Program change
PrCh
= channel
= program
What is the best approach to mapping Renoise instruments here? What channels and programs should I be using? Why?

-> 192 On ch=1 n=76 v=32
-> 384 Off ch=1 n=76 v=64
Note On / Note Off
On
= What is this number? A time stamp obviously but in what? milliseconds? someone explain this to me
= channel, mapped above in PrCh
= note, I go this one figured out fine
= volume, What are the maximum and minimum values? are the the same as Renoise or do I need to convert? If so into what?

Thank you for your time.


(Conner_Bw) #18

To prove i’m not joking, and to add yet another ego blow to real coders who are being horribly embarrassed by a half-ass PHP scripter like myself (seriously guys… make something already) here’s a snapshot of the work in progress.

  
Edit: Scroll down for download...  
  

As I will never use this, someone (preferably a coder who can read PHP) will have to meet me half way and get off their lazy asses and help me out here. This working protoype converts on-notes and off-notes into a multi track multi-timbral midi file. I have included a MIDI version of “Kaneel - Sink Sink Sink” from Beat Battle 5 for MIDI people to review.

TODO / INSIGHT ANYONE ?

  • Tempo is currently based on Renoise line position multipled by 100, every conversion has the same tempo until someone explains to me how it works.

  • Each instrument is a track, each track is assigned a unique incrementing program, each track is channel 1 by default. More channels are added if the same instrument is used in more than 1 column. This is my understanding of multi-timbral and mapping. I have no idea if I am correct as I am hacking my way through MIDI here. Spare some insight.

  • Volumes are all set at 64, I will fix this as soon as someone explains MIDI to me.

  • Etc.


(Conner_Bw) #19

Me again, I hope everyone realizes that I’m trying to be humorous when I call people lazy, etc. I’ve figured out I can import midi files into garageband and I get a “piano roll” view. Prior to this I was just listening them using Quicktime.

I now see that without manually specifying note-off there is an undesired overlapping behavior. I don’t know if this is expected or not, but to fix it in order to simulate the auto chopping that happens when samples collide in a tracker, change line 170-ish from:

  
$tmp .= $key . " On ch=$c n=$val v=64\n";  
  

To:

  
if ($lastnote) $tmp .= $key . " Off ch=$c n=$lastnote v=64\n";  
$tmp .= $key . " On ch=$c n=$val v=64\n";  
  

Feedback appreciated.


(Conner_Bw) #20

“Kaneel - Sink Sink Sink” with the tracker sample collision fix, sounds really nice in Quicktime :)

http://www.trotch.com/xrns_scripts/tmp/test2.mid