mcjMidiKit
══════════════════
Introduction
══════════════════
This page will host 2 or 3 scripts for Daz Studio
which help you create animations based on the content of a midi file
══════════════════
History
══════════════════
July 5th 2015 - new version with Inspector panel and better handling of extremely brief midi ebvents like those on drums
download MCJMIDILOADSUPERSECRETBETAJULY05.DSA and MCJMIDILOADSUPERSECRETBETAJULY05.DSA.png
and place them in your scripts/mcasual folder
April 19th 11:30 PM Release of version 001
April 20th 0:38AM Release of version 002 - v1 was sometimes unable to find bones other than the hip
April 20th 2:28AM Release of version 003 - v2
- under DS4.7 i had to very clearly typecast the times returned by getTimeStep() and getKeyTime(i) as numbers
- under DS4.x the obj and its morphs of DzBones are owned by the skeleton
- fixed the case where the scene does not have a pre-existing midi node , else the "notess" combo-box was not created
══════════════════
Installation
══════════════════
Pre-requisite: the midi-to-text utility mf2t.exe
My Daz Scripts ( at least for now ) don't directly read the content of midi ( *.mid) files
instead they expect to be fed text files ( .txt )
produced by the free midi-to-text converter utility named mf2t
the windows PC version can be downloaded here:
http://mf2t-win32.sourceforge.net/
there's a Mac/OSX version here
https://code.google.com/p/midi2text/downloads/detail?name=MacMIDIt2mf_v1.5.0.zip&can=2&q=
but i cant promise my script will be able to handle their text files
i installed ( unzipped ) mine in c:\Program Files\mf2t
it's easy to remember,
After installing it, use Explorer to make sure the files ( most of all mf2t.exe )
did end up in c:\Program Files\mf2t, not in c:\Program Files\mf2t\mf2t-win32-20110205
note that this is a Windows 32 bit version so technically it should go under C:\Program Files (x86)
but it works fine in C:\Program Files
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
The Daz Scripts
The zip package is found at the bottom of this page
unzip it in your daz content folder, typically
C:\Program Files\DAZ\Studio\content\
or
C:\Program Files (x86)\DAZ\Studio\content\
once installed, it will appear in your content library, under Studio / Scripts / mcasual
or
C:\Users\Public\Documents\My DAZ 3D Library\
once installed, it will appear in your content library, under My DAZ 3D Library / Scripts / mcasual
══════════════════
Use
══════════════════
A step by step demonstration
i go to http://sourceforge.net/projects/mf2t-win32/?source=directory
i download mf2t-win32-20110205.zip
i unzip this into C:\Program Files (x86)
using explorer i go see what happened
i see the folder mf2t-win32-20110205
i rename the folder to mf2t
i open DS 4.7
i create a primitive Cylinder, 1ft diameter, 6ft tall
i select the cylinder with my mouse
i start the script mcjMidiLoad.dsa
now i must tell mcjMidiLoad the location of mf2t.exe
i click the Locate Converter button and i browse up to C:\Program Files (86)/mf2t/
i select the mf2t(.exe) file and click Open
i click the Convert Midi to Text button
i browse to and select c:\windows\media\town(.mid)
I click open
mcjMidiLoad told mf2t.exe to convert town.mid to town.mid.txt
i think i saw something flash on screen but i’m not sure if it worked !
i click the Load Text button
mcjMidiLoad expects to find town.mid.txt in the same folder as town.mid
but it’s not there
why?
maybe because that folder is only writable to by programs with high administrative privileges
so
i copy town.mid to ....... C:\Users\Public\Music
i click the Convert Midi to Text button
i browse to and select C:\Users\Public\Music\town(.mid)
i click the Load Text button
tada! the town.mid.txt file was created!
i click the open button, wait a few seconds ( it's a script not a plug-in so it's not extremely fast )
and we can see mcjMidiLoad deciphered the town.mid.txt file
and found music sheets for a lot of instruments
before we go into animation, lets get the audio track
i download Polysoft Solutions' Free Midi To Mp3 converter
http://download.cnet.com/Free-MIDI-to-MP3-Converter/3000-2140_4-75211970.html
i carefully avoid installing any extras which are often packaged with freeware
i drag and drop town.mid , which is in a Public folder and convert the midi to mp3 format
Then i use the freeware Audacity to convert it to town.wav
http://download.cnet.com/Audacity/3000-2170_4-10058117.html
File/Open town.mp3
File/Export town.wav
is all you need to learn ! to convert it
Then i set town.wav as the audio track in Daz Studio 4.7 using the Edit / Audio menu
make sure town.wav is set to start at frame 0
While we're not in the script if we go in the Scene tab
we discover that mcjMidiLoad created a node named midi - Town.mid
and it contains 11 midi channel nodes which contain all the notes and timings for town.mid
if you inspect one of the channel nodes, you can see for instance
that the slap bass plays note F# of the second octave at full velocity (127) at frame 518
Accidentally here the Daz Studio frame rate was 12 fps but 24 or 30 fps is recommended
Ok lets get back to animation
i select the 6ft tall cylinder
i start mcjMidiLoad
from the list of midi channels, i select the Slap Bass
I could select a specific note as the source of animation
but instead i'll select the whole range of possible notes
So i leave the Notes/Drums selection at "Only In Range"
and i leave the note range at 0 to 127
The target is indeed the 6ft tall cylinder
and we decide to select the YScale of the cylinder as the property to animate
when the note velocity on the slap bass is 0% we want the YScale to be 50%
when the note velocity on the slap bass is 100% we want the YScale to be 150%
i press the "Assign channel to instrument" button and it's done
If i insist i'm pretty sure you'll agree that precise timing is essential, so we take extra care of it.
In Daz Studio we did set a frame rate of 30 fps
if we render frames 0 to 1350 as an .avi video and open it in virtualDub we discover that the real frame rate in the .avi file is
30.303 ! wrong
In VirtualDub's "Video/Frame Rate" menu, we get to change it to exactly 30 fps
if in the VirtualDub's "Video" menu, we set the "Direct Stream Copy" option, then saving this modified version of the video will take only a few seconds
else we could set the "Video / Compression" to a codec like DivX and obtain a good quality video and a smaller file
When i watch that video, yes i do see the cylinder move when the Slap Bass plays,
but the notes are interfering with each other and its not clear what's happening
mcjMidiLoader version 004 will introduce the "OR" method, so the influence of each not will be cumulative
if note1 is on or note2 is on, the cylinder is scaled up, the cylinder scale goes down only if note 1 and note 2 are off
Now lets do something fancy
Maybe you notice mf2t.exe came with t2mf.exe
we can build a midi file from a text file !
so i take town.mid.txt and delete all the tracks, except the first one and the Slap Bass track
and save this as townSlapBass.mid.txt
now i use a plain-text editor, notepad and create the following batch file named convertTextToMidi.bat
i drag and drop the townSlapBass.mid.txt file onto convertTextToMidi.bat
and this created a midi file with just the slap-bass track!
and here's the result of all that work :)
══════════════════
License
══════════════════
Copyright (c) <2015> <mCasual/Jacques>
You may use for commercial and non-commercial renders
You may not sell, resell or lease or sublicense the script.
The above copyright notice and this permission notice shall be
included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
OTHER DEALINGS IN THE SOFTWARE.