[New! Program] Voxinator: A Rockband Vocals Visualizer
- This topic is empty.
-
AuthorPosts
-
December 11, 2014 at 5:42 pm #391426
Warning: This post is frequently edited.
Update: I am no longer programming. Sorry.
Ever wondered what note that singer was hitting in Rockband? Well now you can!
This program will show you the vocal chart just like you would see in the actual game…
and tell you important data about the song such as what section your in and what note is being sung…
as well as tell you what all words each singer is singing and when…
and display any song in the new RB3 display (different colored octaves).What goes on in the background is complicated but what you have to do couldn’t be easier.
Simply drag and drop the midi file into the program’s designated area and it will do all the work for you!You will need the midi file to see the data. To hear the song with it you will need a OGG, WAV, or MP3 file with the same name as the midi file in the same folder. These files are obtained by downloading the Phase Shift version of the song. Right now I have no way to decrypt the music files inside of official content but you can still extract the mid and watch the song play through silent (or look up a youtube video and faux sync it).
Updates
v1.0b-Debut.
v1.1b
-Fixed tempo track issue and phrase markers issues.
v1.2b
-Added in support for Ogg and Wave.
-Added “About” button at top-right of GUI.
-Enabled scaling of pitch name font, section name font, and lyric area.
-Changed the playrate of the songs to x1 instead of the previous x0.4 (this basically means hyperspeed enabled) and the FPS limit decreased to 40fps to alleviate graphic issues (the graphics was getting too many requests and it would essentially crash out the track).
-Removed quality menu selection and implemented an (internal) permanent low quality setting since it makes little difference in perceived quality and I need all the performance boost I can get.
-Fixed slightly off sync tempo changes. This may also be the reason my first attempt at changing how fast the songs playback (getting it to show the same scroll speed as in the RB3 game) failed.
-Fixed track selection to where it will keep your choice unless a new imported song doesn’t have that part.
-Changed music file detection to be same name as midi file instead of always having to be named vocals.
-Pause function (spacebar) and Restart function (backspace) introduced.
-Auto restart the song at the end.
-Made the program resizable, so blow it up fullscreen or shrink it to a tiny window!v1.3b
-Fixed the play line to be in the proper place. It’s currently a little farther to the right than it should be.
-MAJOR! Fixed the bug causing the track to go off sync when changing track speed. Now I have the track where it goes roughly the same speed as RB3 (means you see the same amount of notes in Voxinator as you would in-game RB3).
-Added in auto-detection of your refresh rate and I set the program’s refresh rate to the same as your monitors. If can’t detect it for some reason then the default is 60FPS.
-Changed default size to 1280×720 which is what resolution RB3 is rendered at. The vocal track would be much thinner than 720px but it’s a much nicer visual experience this way (like a fullscreen vocal track in the game). The program is still resizable to any resolution.
-Fixed the FPS crash issue (the tracks – even crazy 3 part harmonies – now play relatively smooth while scaling the track and text).v1.4b (RELEASED!)
-A bunch of new features (see To Do List).
-Narrowed down specific causes of FPS diving (when the track appears choppy and jittering while moving) and eliminated it. I currently have a 3-part harmony track playing at a constant 120FPS (my display uses a 120Hz refresh rate).
-Implemented correct object layering as RB3.
-Fixed a bug that would crash the program if minimized.
MAJOR! -Pitch slide bug is now fixed.v1.5 (UNRELEASED)
-Pulling this program out of beta since it does what it’s suppose to do now.
-Added: Auto selection of .ogg, .mp3, or .wav. What this means is that as long as you have at least one mp3/ogg/wav file with the same name as the midi chart then it will play the audio.
-Added: Volume slider.
-Added: Rounded rectangles to better emulate Rock Band engine.
-Working on: Only showing the true range of the song. Right now it shows entire octaves.Current Bugs
v1.3b: Notes that slide (up/down in pitch) cause wacky things to occur but shouldn’t hurt playback.Fixed v1.4bv1.3b: Auto-restart occurs at the end of the last phrase which may cut a song off early if the song continues without vocals.Fixed v1.4b- v1.4b: Pause function causes track to become out of sync.
Requirements
- Microsoft .NET 3.5 or later.
Download
- Latest version!
The link name may change over time but always point to the latest version.
December 11, 2014 at 6:13 pm #434220Cool. Always good to have others creating programs for the community.
A couple of tips after trying the program and looking at the source code:
1) You definitely need some error catchers there. NAudio does a lot with MIDI files, more so than Mark (the creator) really thought about when he created the library. But it still is not very robust when it comes to MIDI files with non-standard features. raynebc takes care of fixing most issues that NAudio can’t handle with the tool he created for us called midishrink. You can get it from the C3 CON Tools /bin folder. The way I handle it is try to read the MIDI file with NAudio, if it works, fine, if it doesn’t, it’ll throw an exception. Catch that exception, then throw that MIDI at midishrink, it’ll output a version that has worked i think 100% of the times that the original MIDI hasn’t, in my testing. Then load that MIDI into NAudio and go from there.
Your current code
MidiFile midiFile1 = new MidiFile(midiFile)
assumes NAudio will be able to load any MIDI file and will just throw an unhandled exception when it doesn’t. Also, don’t forget I can add .mid extension to any file. So it’s always good to handle exceptions ” src=”/wp-content/uploads/invision_emoticons/default_SA_wink.gif” />
2) The program (seems like it) does a decent job at separating vocal phrases when the lyrics are pitched, but unpitched songs (I tried Sir Mix-a-lot – Baby Got Back) just gives you a non-stop string without any phrase breaks. They can already do this with Song Analyzer in C3 CON Tools, so anyone who really wants it can get it there. But you’re already separating phrases here, why not with unpitched songs?
Great job at figuring out NAudio on your own. It’s not the easiest library to work with for MIDI creation and editing, but it’s the best for C#, hands down.
December 11, 2014 at 8:34 pm #4342281) Totally right. I built this without any error checking. I’m just being lazy at the moment. If the midi is built right you shouldn’t run into errors, though.
2) This shouldn’t happen. The phrase markers are not dependent apon phrase marking. I don’t have “Baby Got Back” so I can’t test that out but a song like “Somebody Kill Me” by Adam Sandler which has an entire phrase as talkies got separated just fine.
December 11, 2014 at 8:45 pm #434230Doesn’t seem to be doing anything for me. Tried drag and dropping a couple of songs .mid files and nothing. Any reason for this? Curious to see this work.
December 11, 2014 at 8:50 pm #434231If the program doesn’t crash or make an error then either the file doesn’t end with “.mid” or “.midi” or the midi does not have a track called “PART VOCALS” or “HARM1” etc. Has to be all caps just like that.
That’s the only reason why the program won’t try and process the file.
If it does crash / spit out an error then I’ll have to check your individual file so upload it somewhere.
December 11, 2014 at 8:55 pm #434233If the midi is built right you shouldn’t run into errors, though.Well, it’s obviously your call. But if we didn’t need to deal with nonstandard MIDIs, I wouldn’t have done the extra work. You will eventually run into problems unless you handle those exceptions. The reality is more than a few older MIDIs will have problems.
2) This shouldn’t happen. The phrase markers are not dependent apon phrase marking. I don’t have “Baby Got Back” so I can’t test that out but a song like “Somebody Kill Me” by Adam Sandler which has an entire phrase as talkies got separated just fine.
Seems to be your code isn’t handling something with that song in particular. I tried my own Stephen Lynch – Craig song and it did separate those phrases correctly. If you’re ignoring the notes for unpitched lyrics with the # marker, you might want to also do that for lyrics with the ^ marker. Those show the corresponding note, although in game it behaves pretty much like the # but more lenient still.
Also, Ludacris – My Chick Bad doesn’t work with your code. There’s no error handling, so I don’t know why.
You’re quickly going to realize that you got two choices: 1) leave it as is and it works when it works (which is perfectly fine), or 2) go crazy trying to make it work with all sorts of MIDI files and all sorts of songs. This is the path I chose. And it’ll drive you crazy.
December 11, 2014 at 10:43 pm #434247This program is just the first version. ” src=”/wp-content/uploads/invision_emoticons/default_SA_cheeky.001.gif” />
It wasn’t meant to work for every midi file ever.
There’s no reason the program can’t be mended.
If you find something wrong specifically you could try and help me figure out the new code or just give me the midi file and I’ll see what is going on.
December 12, 2014 at 10:50 am #4342752) This shouldn’t happen. The phrase markers are not dependent apon phrase marking. I don’t have “Baby Got Back” so I can’t test that out but a song like “Somebody Kill Me” by Adam Sandler which has an entire phrase as talkies got separated just fine.That was a horrible sentence mistake. I meant to say “the phrase markers are not dependent upon pitch / talky markers.”
Also where are you getting all these files that don’t work? I can’t seem to find them. Point me in the direction of where to download them and I’ll see what is wrong.
The program I built was working 90% of the time on C3 officially released customs.
December 12, 2014 at 5:42 pm #434301The program I built was working 90% of the time on C3 officially released customs.Your program should work 100% with C3 MIDI files, as they are standardized and using modern Magma. If you’re only getting 90% success rate, you got to improve the code ” src=”/wp-content/uploads/invision_emoticons/default_SA_wink.gif” />
The songs I tested I got from the Other Customs board here.
December 12, 2014 at 5:59 pm #434302Years ago when I was working on my lyric converter I found all sorts of formatting errors I had to account for. Even with official Harmonix MIDIs.
December 12, 2014 at 6:13 pm #434303The program I built was working 90% of the time on C3 officially released customs.Your program should work 100% with C3 MIDI files, as they are standardized and using modern Magma. If you’re only getting 90% success rate, you got to improve the code ” src=”/wp-content/uploads/invision_emoticons/default_SA_wink.gif” />
The songs I tested I got from the Other Customs board here.
Thanks for giving me a link. ” src=”/wp-content/uploads/invision_emoticons/default_SA_emot-3.gif” />
I was able to search for the Ludacris song and tested it out.
The program failed because the entire song was talkies and I was still trying to sort the pitches to find the highest / lowest notes for the range of the song. All I had to do was add in a check for at least 1 pitched note and it worked just fine. ” src=”/wp-content/uploads/invision_emoticons/default_SA_biggrin.gif” />
There is another bug that doesn’t produce an error but for some reason it will not generate any phrase separators for HARM3. I’ll have to open the midi up in reaper and see how it’s charted differently or if my code is somehow skipping that part. It’s probably my code.
As for the bug checking; I added in a global error catcher to the processing of the midi. If an error occurs it will catch it and display it for you instead of just crashing the program out.
All this in V2 which will be uploaded shortly.
December 12, 2014 at 6:24 pm #434307There is another bug that doesn’t produce an error but for some reason it will not generate any phrase separators for HARM3.
HARM3 tracks have no phrase markers.
December 12, 2014 at 6:27 pm #434308There is another bug that doesn’t produce an error but for some reason it will not generate any phrase separators for HARM3.
HARM3 tracks have no phrase markers.
So it wasn’t my code.
December 12, 2014 at 10:04 pm #434332Thanks for giving me a link. ” src=”/wp-content/uploads/invision_emoticons/default_SA_emot-3.gif” />
It might give the impression that I have all the time in the world. I don’t always have the time ” src=”/wp-content/uploads/invision_emoticons/default_SA_wink.gif” />
There is another bug that doesn’t produce an error but for some reason it will not generate any phrase separators for HARM3.
HARM3 tracks have no phrase markers.
So it wasn’t my code.
Just make sure it doesn’t break whenever a song has HARM3 in it, and you’re good ” src=”/wp-content/uploads/invision_emoticons/default_SA_smile.gif” />
December 12, 2014 at 11:13 pm #434335OK going over Baby Got Back by Sir-Mix-A-Lot and the midi looks very weird to me.
It has 2 PART VOCALS.
The intro is charted as talkies but all the rapping bits is charted as C#1, D1, or D#1.
Except PART VOCALS where the intro is charted as C4.
Reaper shows C#1, D1, D#1, and C4 but my program reads it as C#3, D3, D#3, and C6.
Hmm…
-
AuthorPosts
- You must be logged in to reply to this topic.