Jump to content

Tool to create Lyrics file from Guitar Pro file (early alpha version)


Toopee
 Share

Recommended Posts

Hi all,

 

When I first tried to create a CDLC, I gave a try to UltraStar Creator, and it really is fun, almost a game... But in terms of accuracy, it's not really ideal.

So I'v created a little tool that convert a MusicXML output from Guitar Pro into the TXT lyrics file based on USC's output.

So far it's just a Visual Studio project with no UI not even a command line, but both could be done quite easily. It's probably not bug-proof, but worked perfectly for the 2 titles I converted.

 

Questions:

- Does that kind of tool already exist?

- If it was user-friendly, do you think people here would be interested?

- To the dev community of CustomForge, I don't mind giving my source / helping with it if you'd like to make it part of a bigger toolkit, let me know if it's the case.

 

Cheers

 

  • Like 1
Link to comment
Share on other sites

I'm a bit skeptical that Guitar Pro would be more suitable for creating properly synced lyrics than a popular chart editor for a karaoke game. The biggest problem I can see is that Guitar Pro (at least the versions I've used) have no way to synchronize the tab to an audio file.

Link to comment
Share on other sites

Sure, the author of the tab file can make it as accurate as they want, but I would imagine most guitar pro files found on the internet will have less care given to the lyrics than the tablature itself, requiring the author to fix the lyrics or author them by hand.

 

Using EOF and the command line FoF Lyric Converter utility, an author could get lyrics from a Guitar Pro file into their EOF project (see the EOF manual's description of the "Import GP style lyric text" function). I get the impression that this function is rarely used if ever though so I haven't put much consideration into improving this functionality.

 

If your program can import measure/beat timings from a Go PlayAlong XML file, it would allow for greater accuracy and may be a useful alternative way for authors to add lyrics to their charts. I can describe the file format if you're interested.

Link to comment
Share on other sites

  • Administrator

@@Toopee have you written any lyrics part in GP? How many times have you found a GP file with lyrics on the most common site like Songsterr or Ultimate guitar?

 

Don't get me wrong, it's not that i don't see how this tool could be useful but cases where you actually have that part available somewhat properly is so small that i know i wouldn't use it at all. In almost 4 years of charting song, i think i can count on one hand how many times such a function would have actually been practical. So if it's there, it's good, but if it isn't, i probably wouldn't even notice it :)

 

It's just my own grain of salt and you can take it for what it's worth which isn't much and if you do feel like it would be more efficient for you, please go ahead!

Firekorn's workshop
In Flames Discography

#FirekornHasDoneNothingForTheCommunity

Link to comment
Share on other sites

Thanks for your feedback!

 

@@raynebc

I'm all in for the Go PlayAlong XML format. If you also have a link to some samples, that'd be perfect.

 

Indeed, I suppose everyone has his own way to create CDLCs, and yeah, I guess it fits my needs because of the way I do it :)

Absolutely no issue with your opinion, I'm new to all of this, so it's interesting for me to know how other people work.

It's also why I asked *if* such a tool would be useful to others ;)

Link to comment
Share on other sites

Here's a sample I got from Go PlayAlong support:

http://www.mediafire.com/file/x1ood4j4eohn9di/GPA4_Export_2017-08-19_15-06-22.zip

 

Here's their original description from when I emailed them 4.5 years ago:

 

All synchronization settings are stored within the tag of the xml file. Here's an example of a value:

 

12#60;0;0;634.8#5138;2;0;624.86#10137;4;0;636.04#17769;7;0;644.81#20349;8;0;650.62#28156;11;0;654.34#36008;14;0;657.25#46524;18;0;667.64#54536;21;0;638.72#55813;21;0.5;648.53#56462;21;0.75;748.17#57210;22;0;668.54

 

Basically these values are a collection of "synch points" that are defined by our users during the synchronization process.

 

The first integer number denotes the number of sync points used, followed by the list of sync points. Each sync point data is separated by a # sign. In the example above there are 12 sync points and the first point data looks like this: 60;0;0;634.8

 

Each sync point data consists of 4 values separated by a ; sign:

 

Mp3 track time in milliseconds ( float )

Measure (or bar) position within the tab ( unsigned int )

Position within measure ( float value between 0..1 )

Score speed until the next sync point. Score speed is expressed as the duration of one beat in milliseconds ( float )

 

Example - decoding the sync point 55813;21;0.5;648.53

 

The point has been added to the mp3 waveform at 55813 ms. The values 21 and 0.5 describe the tab position and it means the "middle" of the 21th measure. Assuming that the tab has a time signature 4/4, the "middle" means here the 2nd beat. After this point each beat is played 648.53 ms long.

When they mention "beats", they're referring to quarter notes, regardless of what the effective time signature is.

 

Here's some of EOF's logging showing the interpretation and application of the sync information from the above file's XML and GP5 files:

Sync point #0: Pos: 90ms Measure: 1.000000 Quarter note length: 634.250000ms # of qnotes to next sync point: 4.000000 Corrected length: 634.250000ms

Sync point #1: Pos: 2627ms Measure: 2.000000 Quarter note length: 628.500000ms # of qnotes to next sync point: 4.000000 Corrected length: 628.500000ms

Sync point #2: Pos: 5141ms Measure: 3.000000 Quarter note length: 623.000000ms # of qnotes to next sync point: 4.000000 Corrected length: 623.000000ms

Sync point #3: Pos: 7633ms Measure: 4.000000 Quarter note length: 628.500000ms # of qnotes to next sync point: 4.000000 Corrected length: 628.500000ms

Sync point #4: Pos: 10147ms Measure: 5.000000 Quarter note length: 634.250000ms # of qnotes to next sync point: 4.000000 Corrected length: 634.250000ms

Sync point #5: Pos: 12684ms Measure: 6.000000 Quarter note length: 634.000000ms # of qnotes to next sync point: 4.000000 Corrected length: 634.000000ms

Sync point #6: Pos: 15220ms Measure: 7.000000 Quarter note length: 634.250000ms # of qnotes to next sync point: 4.000000 Corrected length: 634.250000ms

Sync point #7: Pos: 17757ms Measure: 8.000000 Quarter note length: 639.750000ms # of qnotes to next sync point: 4.000000 Corrected length: 639.750000ms

Sync point #8: Pos: 20316ms Measure: 9.000000 Quarter note length: 651.000000ms # of qnotes to next sync point: 4.000000 Corrected length: 651.000000ms

Sync point #9: Pos: 22920ms Measure: 10.000000 Quarter note length: 651.000000ms # of qnotes to next sync point: 4.000000 Corrected length: 651.000000ms

Sync point #10: Pos: 25524ms Measure: 11.000000 Quarter note length: 656.750000ms # of qnotes to next sync point: 4.000000 Corrected length: 656.750000ms

Sync point #11: Pos: 28151ms Measure: 12.000000 Quarter note length: 656.750000ms # of qnotes to next sync point: 4.000000 Corrected length: 656.750000ms

Sync point #12: Pos: 30778ms Measure: 13.000000 Quarter note length: 656.500000ms # of qnotes to next sync point: 4.000000 Corrected length: 656.500000ms

Sync point #13: Pos: 33404ms Measure: 14.000000 Quarter note length: 656.750000ms # of qnotes to next sync point: 4.000000 Corrected length: 656.750000ms

Sync point #14: Pos: 36031ms Measure: 15.000000 Quarter note length: 656.500000ms # of qnotes to next sync point: 4.000000 Corrected length: 656.500000ms

Sync point #15: Pos: 38657ms Measure: 16.000000 Quarter note length: 656.750000ms # of qnotes to next sync point: 4.000000 Corrected length: 656.750000ms

Sync point #16: Pos: 41284ms Measure: 17.000000 Quarter note length: 656.500000ms # of qnotes to next sync point: 4.000000 Corrected length: 656.500000ms

Sync point #17: Pos: 43910ms Measure: 18.000000 Quarter note length: 656.750000ms # of qnotes to next sync point: 4.000000 Corrected length: 656.750000ms

Sync point #18: Pos: 46537ms Measure: 19.000000 Quarter note length: 662.250000ms # of qnotes to next sync point: 4.000000 Corrected length: 662.250000ms

Sync point #19: Pos: 49186ms Measure: 20.000000 Quarter note length: 662.250000ms # of qnotes to next sync point: 4.000000 Corrected length: 662.250000ms

Sync point #20: Pos: 51835ms Measure: 21.000000 Quarter note length: 662.250000ms # of qnotes to next sync point: 4.000000 Corrected length: 662.250000ms

Sync point #21: Pos: 54484ms Measure: 22.000000 Quarter note length: 662.250000ms # of qnotes to next sync point: 0.000000 Corrected length: 662.250000ms

088: Applying sync point timings

Sync point #0 (On-beat): Pos: 90ms Measure: 1.000000 Quarter note length: 634.250000ms Corrected length: 634.250000ms

Beat #0 set at pos = 90, fpos = 90.000000

Beat #1 set at pos = 724, fpos = 724.250000

Beat #2 set at pos = 1359, fpos = 1358.500000

Beat #3 set at pos = 1993, fpos = 1992.750000

Sync point #1 (On-beat): Pos: 2627ms Measure: 2.000000 Quarter note length: 628.500000ms Corrected length: 628.500000ms

Beat #4 set at pos = 2627, fpos = 2627.000000

Beat #5 set at pos = 3256, fpos = 3255.500000

Beat #6 set at pos = 3884, fpos = 3884.000000

Beat #7 set at pos = 4513, fpos = 4512.500000

Sync point #2 (On-beat): Pos: 5141ms Measure: 3.000000 Quarter note length: 623.000000ms Corrected length: 623.000000ms

Beat #8 set at pos = 5141, fpos = 5141.000000

Beat #9 set at pos = 5764, fpos = 5764.000000

Beat #10 set at pos = 6387, fpos = 6387.000000

Beat #11 set at pos = 7010, fpos = 7010.000000

Sync point #3 (On-beat): Pos: 7633ms Measure: 4.000000 Quarter note length: 628.500000ms Corrected length: 628.500000ms

Beat #12 set at pos = 7633, fpos = 7633.000000

Beat #13 set at pos = 8262, fpos = 8261.500000

Beat #14 set at pos = 8890, fpos = 8890.000000

Beat #15 set at pos = 9519, fpos = 9518.500000

Sync point #4 (On-beat): Pos: 10147ms Measure: 5.000000 Quarter note length: 634.250000ms Corrected length: 634.250000ms

Beat #16 set at pos = 10147, fpos = 10147.000000

Beat #17 set at pos = 10781, fpos = 10781.250000

Beat #18 set at pos = 11416, fpos = 11415.500000

Beat #19 set at pos = 12050, fpos = 12049.750000

Sync point #5 (On-beat): Pos: 12684ms Measure: 6.000000 Quarter note length: 634.000000ms Corrected length: 634.000000ms

Beat #20 set at pos = 12684, fpos = 12684.000000

Beat #21 set at pos = 13318, fpos = 13318.000000

Beat #22 set at pos = 13952, fpos = 13952.000000

Beat #23 set at pos = 14586, fpos = 14586.000000

Sync point #6 (On-beat): Pos: 15220ms Measure: 7.000000 Quarter note length: 634.250000ms Corrected length: 634.250000ms

Beat #24 set at pos = 15220, fpos = 15220.000000

Beat #25 set at pos = 15854, fpos = 15854.250000

Beat #26 set at pos = 16489, fpos = 16488.500000

Beat #27 set at pos = 17123, fpos = 17122.750000

Sync point #7 (On-beat): Pos: 17757ms Measure: 8.000000 Quarter note length: 639.750000ms Corrected length: 639.750000ms

Beat #28 set at pos = 17757, fpos = 17757.000000

Beat #29 set at pos = 18397, fpos = 18396.750000

Beat #30 set at pos = 19037, fpos = 19036.500000

Beat #31 set at pos = 19676, fpos = 19676.250000

Sync point #8 (On-beat): Pos: 20316ms Measure: 9.000000 Quarter note length: 651.000000ms Corrected length: 651.000000ms

Beat #32 set at pos = 20316, fpos = 20316.000000

Beat #33 set at pos = 20967, fpos = 20967.000000

Beat #34 set at pos = 21618, fpos = 21618.000000

Beat #35 set at pos = 22269, fpos = 22269.000000

Sync point #9 (On-beat): Pos: 22920ms Measure: 10.000000 Quarter note length: 651.000000ms Corrected length: 651.000000ms

Beat #36 set at pos = 22920, fpos = 22920.000000

Beat #37 set at pos = 23571, fpos = 23571.000000

Beat #38 set at pos = 24222, fpos = 24222.000000

Beat #39 set at pos = 24873, fpos = 24873.000000

Sync point #10 (On-beat): Pos: 25524ms Measure: 11.000000 Quarter note length: 656.750000ms Corrected length: 656.750000ms

Beat #40 set at pos = 25524, fpos = 25524.000000

Beat #41 set at pos = 26181, fpos = 26180.750000

Beat #42 set at pos = 26838, fpos = 26837.500000

Beat #43 set at pos = 27494, fpos = 27494.250000

Sync point #11 (On-beat): Pos: 28151ms Measure: 12.000000 Quarter note length: 656.750000ms Corrected length: 656.750000ms

Beat #44 set at pos = 28151, fpos = 28151.000000

Beat #45 set at pos = 28808, fpos = 28807.750000

Beat #46 set at pos = 29465, fpos = 29464.500000

Beat #47 set at pos = 30121, fpos = 30121.250000

Sync point #12 (On-beat): Pos: 30778ms Measure: 13.000000 Quarter note length: 656.500000ms Corrected length: 656.500000ms

Beat #48 set at pos = 30778, fpos = 30778.000000

Beat #49 set at pos = 31435, fpos = 31434.500000

Beat #50 set at pos = 32091, fpos = 32091.000000

Beat #51 set at pos = 32748, fpos = 32747.500000

Sync point #13 (On-beat): Pos: 33404ms Measure: 14.000000 Quarter note length: 656.750000ms Corrected length: 656.750000ms

Beat #52 set at pos = 33404, fpos = 33404.000000

Beat #53 set at pos = 34061, fpos = 34060.750000

Beat #54 set at pos = 34718, fpos = 34717.500000

Beat #55 set at pos = 35374, fpos = 35374.250000

Sync point #14 (On-beat): Pos: 36031ms Measure: 15.000000 Quarter note length: 656.500000ms Corrected length: 656.500000ms

Beat #56 set at pos = 36031, fpos = 36031.000000

Beat #57 set at pos = 36688, fpos = 36687.500000

Beat #58 set at pos = 37344, fpos = 37344.000000

Beat #59 set at pos = 38001, fpos = 38000.500000

Sync point #15 (On-beat): Pos: 38657ms Measure: 16.000000 Quarter note length: 656.750000ms Corrected length: 656.750000ms

Beat #60 set at pos = 38657, fpos = 38657.000000

Beat #61 set at pos = 39314, fpos = 39313.750000

Beat #62 set at pos = 39971, fpos = 39970.500000

Beat #63 set at pos = 40627, fpos = 40627.250000

Sync point #16 (On-beat): Pos: 41284ms Measure: 17.000000 Quarter note length: 656.500000ms Corrected length: 656.500000ms

Beat #64 set at pos = 41284, fpos = 41284.000000

Beat #65 set at pos = 41941, fpos = 41940.500000

Beat #66 set at pos = 42597, fpos = 42597.000000

Beat #67 set at pos = 43254, fpos = 43253.500000

Sync point #17 (On-beat): Pos: 43910ms Measure: 18.000000 Quarter note length: 656.750000ms Corrected length: 656.750000ms

Beat #68 set at pos = 43910, fpos = 43910.000000

Beat #69 set at pos = 44567, fpos = 44566.750000

Beat #70 set at pos = 45224, fpos = 45223.500000

Beat #71 set at pos = 45880, fpos = 45880.250000

Sync point #18 (On-beat): Pos: 46537ms Measure: 19.000000 Quarter note length: 662.250000ms Corrected length: 662.250000ms

Beat #72 set at pos = 46537, fpos = 46537.000000

Beat #73 set at pos = 47199, fpos = 47199.250000

Beat #74 set at pos = 47862, fpos = 47861.500000

Beat #75 set at pos = 48524, fpos = 48523.750000

Sync point #19 (On-beat): Pos: 49186ms Measure: 20.000000 Quarter note length: 662.250000ms Corrected length: 662.250000ms

Beat #76 set at pos = 49186, fpos = 49186.000000

Beat #77 set at pos = 49848, fpos = 49848.250000

Beat #78 set at pos = 50511, fpos = 50510.500000

Beat #79 set at pos = 51173, fpos = 51172.750000

Sync point #20 (On-beat): Pos: 51835ms Measure: 21.000000 Quarter note length: 662.250000ms Corrected length: 662.250000ms

Beat #80 set at pos = 51835, fpos = 51835.000000

Beat #81 set at pos = 52497, fpos = 52497.250000

Beat #82 set at pos = 53160, fpos = 53159.500000

Beat #83 set at pos = 53822, fpos = 53821.750000

Sync point #21 (On-beat): Pos: 54484ms Measure: 22.000000 Quarter note length: 662.250000ms Corrected length: 662.250000ms

Beat #84 set at pos = 54484, fpos = 54484.000000

Beat #85 set at pos = 55146, fpos = 55146.250000

Beat #86 set at pos = 55809, fpos = 55808.500000

Beat #87 set at pos = 56471, fpos = 56470.750000

Beat #88 set at pos = 57133, fpos = 57133.000000

Beat #89 set at pos = 57795, fpos = 57795.250000

Beat #90 set at pos = 58458, fpos = 58457.500000

Beat #91 set at pos = 59120, fpos = 59119.750000

Beat #92 set at pos = 59782, fpos = 59782.000000

Beat #93 set at pos = 60444, fpos = 60444.250000

Edit: Don't mind the "corrected length" stuff, that was due to a bug with GPA several years ago where it had an export bug in the quarter note lengths that had to be fixed.

  • Like 1
Link to comment
Share on other sites

  • Administrator

The GPA dev is a one man team - and he seems really approachable about things too. I recently asked him about adding in .ogg sync ability and he seemed pretty open to the idea. (I export tab/audio from oDLC and play them in GPA on a laptop to help me with sightreading proper tab and .ogg sync would just let me skip a step in the process).  

  

I'm not sure about lyric sync in GPA - but I'd certainly be open to the idea of ditching Ultrastar - particularly since it shits the bed pretty bad on longer cdlc tracks.

  • Like 1
Link to comment
Share on other sites

  • 3 weeks later...

Thx for your work, i really hope this will soon help release my customs with vocals.

So far i didn´t find the time to dig in the Ultrastar vocal creation process... maybe i won´t have to.

Link to comment
Share on other sites

  • 1 year later...
This thread is quite old. Please consider starting a new thread rather than reviving this one.

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
 Share

×
×
  • Create New...

Important Information

By using this site, you agree to our Guidelines. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. - Privacy Policy