Jump to content

Avatar

[New! Program] Voxinator: A Rockband Vocals Visualizer


  • Please log in to reply
68 replies to this topic

#1 dreamtheaterfan

dreamtheaterfan
  • 171 posts

Posted December 11, 2014 - 05:42 PM

Warning: This post is frequently edited.

 

Update: I am no longer programming. Sorry.

 

2094322-169_the_beatles_rock_band_video_

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

v1.1b
v1.2b
v1.3b
v1.4b (RELEASED!)
v1.5 (UNRELEASED)


Current Bugs


  • v1.3b: Notes that slide (up/down in pitch) cause wacky things to occur but shouldn't hurt playback. Fixed v1.4b
  • v1.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.

Sample image:
v1_4b.jpg

Requirements


  • Microsoft .NET 3.5 or later.

Download


  • Latest version!
    The link name may change over time but always point to the latest version.


#2 TrojanNemo

TrojanNemo

    The Programmer

  • 4,748 posts
  • Location
    Miami, Florida

Posted December 11, 2014 - 06:13 PM

Cool. 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 ;)

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.

#3 dreamtheaterfan

dreamtheaterfan
  • 171 posts

Posted December 11, 2014 - 08:34 PM

1) 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.

#4 dmbdaw

dmbdaw
  • 54 posts
  • Location
    Nashville, TN

Posted December 11, 2014 - 08:45 PM

Doesn'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.

#5 dreamtheaterfan

dreamtheaterfan
  • 171 posts

Posted December 11, 2014 - 08:50 PM

If 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.

#6 TrojanNemo

TrojanNemo

    The Programmer

  • 4,748 posts
  • Location
    Miami, Florida

Posted December 11, 2014 - 08:55 PM

If 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. :haw:

#7 dreamtheaterfan

dreamtheaterfan
  • 171 posts

Posted December 11, 2014 - 10:43 PM

This program is just the first version. :P
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.

#8 dreamtheaterfan

dreamtheaterfan
  • 171 posts

Posted December 12, 2014 - 10:50 AM

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.


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.

#9 TrojanNemo

TrojanNemo

    The Programmer

  • 4,748 posts
  • Location
    Miami, Florida

Posted December 12, 2014 - 05:42 PM

The 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 ;)

The songs I tested I got from the Other Customs board here.

#10 raynebc

raynebc
  • 230 posts

Posted December 12, 2014 - 05:59 PM

Years 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.

#11 dreamtheaterfan

dreamtheaterfan
  • 171 posts

Posted December 12, 2014 - 06:13 PM

The 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 ;)

The songs I tested I got from the Other Customs board here.


Thanks for giving me a link. :3
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. :D

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. :sweatdrop:

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.

#12 Farottone

Farottone

    The Lean Mean Customs Charting Machine

  • Administrator
  • 6,127 posts

Posted December 12, 2014 - 06:24 PM

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.

#13 dreamtheaterfan

dreamtheaterfan
  • 171 posts

Posted December 12, 2014 - 06:27 PM

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.

Posted Image

#14 TrojanNemo

TrojanNemo

    The Programmer

  • 4,748 posts
  • Location
    Miami, Florida

Posted December 12, 2014 - 10:04 PM

Thanks for giving me a link. :3


It might give the impression that I have all the time in the world. I don't always have the time ;)


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 :)

#15 dreamtheaterfan

dreamtheaterfan
  • 171 posts

Posted December 12, 2014 - 11:13 PM

OK 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...

https://encrypted-tb...egfp2JpdT57qXfg

#16 TrojanNemo

TrojanNemo

    The Programmer

  • 4,748 posts
  • Location
    Miami, Florida

Posted December 12, 2014 - 11:33 PM

My understanding is it doesn't matter what notes are used as long as the lyrics are unpitched, the game treats them the same.

#17 dreamtheaterfan

dreamtheaterfan
  • 171 posts

Posted December 13, 2014 - 12:39 AM

Well I've given up trying to figure this chart out.
If someone wants to explain in detail why this chart is the way it is then I'll look further into fixing it.
But it's the only chart I've seen like that so I'm not really concerned with it.

The program works on like 99% of charts.

#18 TrojanNemo

TrojanNemo

    The Programmer

  • 4,748 posts
  • Location
    Miami, Florida

Posted December 13, 2014 - 01:46 AM

Again, work as much or as little as you want. But if your code doesn't work with this file, you should look at why your code fails, rather than saying "well, it's not my code's fault, it's the file." Because that file works fine in game (I've played it) and it works fine with C3 CON Tools.

http://www.keepitfis... ... Vocals.txt
http://www.keepitfis... ... onies1.txt
http://www.keepitfis... ... onies2.txt
http://www.keepitfis... ... onies3.txt

I don't remember from when I looked at your source code, but there is no reason that the unpitched notes being on a note that you don't expect or that you consider "weird" should break the program working. And if it does, doesn't Visual Studio tell you why it's causing an exception when you debug?

#19 Farottone

Farottone

    The Lean Mean Customs Charting Machine

  • Administrator
  • 6,127 posts

Posted December 13, 2014 - 02:21 AM

Again, work as much or as little as you want. But if your code doesn't work with this file, you should look at why your code fails, rather than saying "well, it's not my code's fault, it's the file." Because that file works fine in game


That means little in terms of MIDI format handling. The game can read notes of any channel in example, while analysing the file with any library you may or may not need to account for that. I'd say that for the first day of release or os he's done pretty well all in all. :)

#20 TrojanNemo

TrojanNemo

    The Programmer

  • 4,748 posts
  • Location
    Miami, Florida

Posted December 13, 2014 - 02:47 AM

I'd say that for the first day of release or os he's done pretty well all in all. :)


That is certainly true. But it's not clear whether he's got a lot of programming knowledge and is about to drop some teachin' on me, which I certainly need, or if he's a beginner needing some guidance. I assumed the latter and was offering it, but perhaps I should wait until help is asked for instead. :)




5 user(s) are reading this topic

0 members, 5 guests, 0 anonymous users