FAQFAQ   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 
BandFuse: Rock Legends Customs Research

 
Post new topic   Reply to topic    ScoreHero Forum Index -> Software
View previous topic :: View next topic  
Author Message
ComicBookGuru  





Joined: 16 Dec 2007
Posts: 1678

PostPosted: Thu Feb 26, 2015 12:12 am    Post subject: BandFuse: Rock Legends Customs Research Reply with quote

I'll be updating this as I can add more information. Between school projects at the moment so I have free time to upload information and attempt to set up a code repository for what I have now. ;)

So who remembers BandFuse? Right? That game that everyone laughed at, that, uh... wasn't actually too bad! And I actually happen to like a lot.

Well, game received... not very much content, and I'd really like to see that change. To that end, I've been doing a lot of work on figuring out data structures and writing some basic parsing/writing code. The good news: 95% of this is totally doable! (The other 5% I'll get to later.) Bad news: I'm running into issues. Better news: Maybe you guys can help! (I'll also be cross-posting this at CustomsForge once all my information is up.)

PART ONE: Files you'll find in DLC

Let's take a look at the structure of a BandFuse DLC file. This is an image from The Downfall Of Us All. While chronologically not the last DLC released, numerically it is, and as such, contains key information from other files (more on this later).



We'll start with the files at the root directory.

Catalog2.rif: Every catalog entry (i.e., visual representation of a song/tutorial/lesson/video/backing track/etc.). I have this (mostly) worked out.
index2.rif: Indexing of every single file in disc and DLC; for example, this index2.rif contains all the indexing for every file, from Alive to All I Want to Crazy on You. This is where I'm having issues currently.
packagedef.rif: The numerical package declaration. I haven't played with modifying this yet, but I have the data structure down, and after some testing I doubt this will be particularly difficult to tackle.

NOTE: packagedef.rif is identical in both root and packagedefs/[DLCNUM]/packagedef.rif.

I'll knock out two self-explanatory ones real quick:
songs/[artist]/[name]/album.xpr: Microsoft-proprietary XPR2 image format. Likely the only difference between 360/PS3 DLC. You can take it apart and rebuild it with Unbundler/Bundler, though that's highly unadvisable as you can only acquire it from Microsoft's leaked 360 SDKs. Completely working.
songs/[artist]/[name]/musicvideo/video.bk2: The music video Bink format. Completely working. Currently how we are playing audio through the game.

Audio is where we currently can't do anything because it's nice and encrypted and compressed. Good job protecting your game, Realta... but now it's a nightmare for us! I'll include information that @PikminGuts92 was able to grab, but I haven't made any progress and neither did he. I know that TrojanNemo took a look at it at least; I don't know if he ever got anywhere.

Audio is stored in the following places:

songs/[artist]/[name]/preview/audio.clt
songs/[artist]/[name]/gamestems/gtr1/audio.clt
songs/[artist]/[name]/gamestems/gtr2/audio.clt
songs/[artist]/[name]/gamestems/bass/audio.clt
songs/[artist]/[name]/gamestems/back/audio.clt
songs/[artist]/[name]/gamestems/drums/audio.clt
songs/[artist]/[name]/gamestems/vox/audio.clt

(Interesting, to me at least, that they would pre-emptively separate out drums, but not keys- seems keys would have been more forward-thinking, not that it matters now anyways.)

songs/[artist]/[name]/fused.rif: The note tracks! HOW COOL IS THAT oh they're not standard MIDI. Well, not to fear, we have a lot of that figured out too!
songs/[artist]/[name]/tones/[any tone folder]/fused.rif: The tones for the song. I'm sure software-wise there's a max number of tones you can have; we don't know what that is (and who cares man let's make tons of crazy tones). Of note: sometimes bass gets its own tone, sometimes there's a tones.bassfused.rif, and sometimes, like here, there's nothing.
licks/[artist]/[name](b or g).rif/fused.rif: The lick lab sections for the game. I haven't looked too much into these since honestly DLC and lick lab don't mix, but the structures should be easy enough to figure out.

I'LL BE ADDING MORE INFO. GOTTA HEAD OUT FOR NOW THOUGH
_________________
Yep, I learned through Rocksmith!


Last edited by ComicBookGuru on Thu Feb 26, 2015 12:24 am; edited 3 times in total
Back to top
View user's profile Send private message
ComicBookGuru  





Joined: 16 Dec 2007
Posts: 1678

PostPosted: Thu Feb 26, 2015 12:13 am    Post subject: Reply with quote

PART TWO: Fun Data Structure Information!

This is taken verbatim from PikminGuts- without it, I wouldn't have been able to even get started on this.

Quote:
All bytes are in big endian order.

RIFF files are made up of chunks. There are three basic chunk types not including the the child variation of the ZOBJ chunk.
The first chunk is always the index chunk that lists the offsets and 64-bit index keys of the remaining chunks.

The RIFF file as a whole can be looked at as containing several parent objects, each containing their own string tables and child objects.
ZOBJ chunks are grouped together by their 64-bit object key. The first object to use that unique key will always be the parent object.
The parent object will contain various metadeta that's used specifically for that object. "video" and "audio" objects contain stuff like a file location.
And "song" will contain song info like artist name, song name, tags used, difficulty tiers, etc. Parent objects can also have what appears to be
references to other objects be them child or another parent. Unlike parent objects, the child objects have a standard form and appear to mostly
be used to notate entries in time such as tab/vox entires.

A string table contains a dictionary of all strings used in its object group (parent + children) with their corresponding 64-bit keys.
The string table chunks are placed in the order as object chunks appear. But the object chunks are not always placed in the order they should be
(i.e. object 1, object 2, object 1). For that reason my program currently runs through the RIFF file twice. The first time loads up all the objects
and the second time parses the string tables and adds those to each object. You must also take into account that DLC files use four additional languages.

Examples:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- Object Type:
"instrument"
- String Tables:
English (160 Entries)
Japanese (161 Entries)
- Folder:
"songs.Halestorm.LoveBites"
- Object Key:
(ulong)17935271347890891574

- Child Objects
- - "vox"
- - "voxpushphrase"

- Metadata
- - vocals
- - ...
- - ...
- - E Standard
- -
- - 16448 (0x00 0x00 0x40 0x40) E3
- - 15152 (0x00 0x00 0x3B 0x30) B2
- - 14128 (0x00 0x00 0x37 0x30) G2
- - 12848 (0x00 0x00 0x32 0x30) D2
- - 11552 (0x00 0x00 0x2D 0x20) A1
- - 10272 (0x00 0x00 0x28 0x20) E1
- -
- - ...
- - 2
- - 4
- - songs.Halestorm.LoveBites.vox.vox
- - songs.Halestorm.LoveBites.vox.voxpushphrase

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

- Object Type:
"instrument"
- String Tables:
English (17 Entries)
Japanese (18 Entries)
- Folder:
"songs.BadReligion.Infected"
- Object Key:
(ulong)1132897977276097590

- Child Objects
- - "audioeffect"
- - "chord"
- - "tab"

- Metadata
- - guitar
- - beg
- - ...
- - D Standard
- -
- - 15936 (0x00 0x00 0x3E 0x40) D3
- - 14640 (0x00 0x00 0x39 0x30) A2
- - 13616 (0x00 0x00 0x35 0x30) F2
- - 12336 (0x00 0x00 0x30 0x30) C2
- - 11040 (0x00 0x00 0x2B 0x20) G1
- - 9760 (0x00 0x00 0x26 0x20) D1
- -
- - ...
- - 3
- - 4
- - songs.BadReligion.Infected.gtr_beg.audioeffect
- - songs.BadReligion.Infected.gtr_beg.chord
- - songs.BadReligion.Infected.gtr_beg.tab

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Header
======
BYTES(4) - "FFIR" (Riff backwards)
INT32 - Total Size of Chunks

Chunk:
======
BYTES(4) - Identifier
* Observed Values:
* * "INDX" (Index)
* * "STbl" (String Table)
* * "ZOBJ" (Object)
INT32 - Size of Chunk
BYTES(?) - Specific Chunk Data

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

---- CHUNKS ----

"INDX" - Index
==============
INT32 - Count of Chunks
INT32 - Always 4

* Chunk Entry (16 bytes)
* ======================
* INT64 - Index Key
* INT32 - Offset
* INT32 - Unknown (Always 0)


"STbl" - String Table
=====================
# Encoding : ASCII

INT64 - Index Key
INT64 - Folder Key
INT64 - Language Identifier
For Disc + DLC:
(ENG): 5412069155413958780 # This does not contain string for folder name.
(JAP): -4916594395764136780

For DLC:
(GER): 8434362063832740322
(ITA): 4181558474080832064
(ESP): -1868168087102288302
(FRE): 6388165613802289312
BYTES(8) - Zero'd Data

INT32 - Count of Entries
INT32 - Always 12
INT32 - Size of String Table
INT32 - Size of Data Leading Up to String Table (Including This)

* Entry (16 bytes)
* ================
* BYTES(8) - String Key // Warning: The same string with different casings will share the same key.
* INT32 - Offset
* INT32 - Unknown (Always 0)

BYTES(?) - String Table

"ZOBJ" - Parent Object
======================
INT64 - Index Key
INT64 - Object Key (Matches keys in other objects)
INT64 - Type String Key
BYTES(8) - Zero'd Data
BYTES(?) - Raw Data

"ZOBJ" - Child Object
=====================
INT64 - Index Key
INT64 - Object Key (Matches keys in other objects)
INT64 - Type String Key
BYTES(8) - Zero'd Data
INT32 - Entry Identifier
0 - "timesignature"
1 - "tempo"
3 - "section"
4 - "measure"
6 - "chord"
7 - "audieffect"
8 - "vox"
10 - "voxpushphrase"
11 - "tab"
13 - "event"
INT32 - Entry Size
INT32 - Count of Entries
INT32 - Always 4
BYTES(Count of Entries * Entry Size) - Raw Data


EDITING WITH MORE DATA STRUCTURE INFORMATION LATER
_________________
Yep, I learned through Rocksmith!
Back to top
View user's profile Send private message
ComicBookGuru  





Joined: 16 Dec 2007
Posts: 1678

PostPosted: Thu Feb 26, 2015 12:31 am    Post subject: Reply with quote

PART THREE: catalog2.rif, index2.rif, and packagedef.rif

catalog2.rif

Quote:
CATALOG DLC INFORMATION

Catalog ZOBJ Information:

8 BYTES: String key for "catalog2"
8 BYTES: Zeroed information
8 BYTES: String key for "catalog2"
8 BYTES: Zeroed information

4 BYTES (decimal): Count of entries
4 BYTES: 0x00000004, constant

======================================
ENTRY: 280 BYTES
8 BYTES (long): Identifier for game
e.g. songs.Boston.ForeplayLongTime.MediaEntry2

4 BYTES: 0x00000005 for lick, 0x00000001 for song
4 BYTES: 0x00000000

8 BYTES (long): Song title
e.g. Foreplay/Long Time

8 BYTES (long): Artist
e.g. Boston

8 BYTES (long): Album
e.g. Ixnay On The Hombre

8 BYTES (long): Description
e.g.
Orange County's The Offspring hit the accelerator and blast their way through this short-fused tinderbox from 1997's
"Ixnay On The Hombre." For this firecracker of a tune, guitarist Kevin "Noodles" Wasserman plays to his strengths as a nitro-fueled
volume dealer whilst stitching layers of heavily distorted power chords over singer Dexter Holland's spirited anthemic wails.
Drummer Ron Welty churns up a tornado of skin-sanity while the kids in the mosh pit leave skins, brains, and guts on the floor.
At a minute and 51 seconds long, this is the sound of 90's Orange County punk defined!



Pro Tip: "All I Want" is a punk-rock projectile. With little time for extraneous licks and a timely anti-solo approach, channel
your inner punk and disregard technique in favor of raw emotion and let 'er rip! With punk, the message is the medium, so play
it hard and fast - who cares if you make a mistake or two? With The Offspring, it's all about having fun!



Song Credits:

Performed by The Offspring
Courtesy of Columbia Records
By arrangement with Sony Music Licensing
Written by Brian Holland
Published by Underachiever
Music Administered by Kobalt Music Publishing America, Inc (BMI)

8 BYTES (long): Legend tag
e.g. tags.Legends.NoLegend.Tag, tags.Legends.Slash.Tag

4 BYTES (float): Total Song Length (milliseconds)
4 BYTES (float): Guitar Difficulty
4 BYTES (float): Bass Difficulty
4 BYTES (float): Vocals Difficulty

8 BYTES (long): Era tag
e.g. tags.eras.2010s.tag

4 BYTES (decimal): Year of release
e.g. 1997

4 BYTES: 0x00000000

8 BYTES (long): Tuning (what instrument?)
e.g. Standard-E

24 BYTES (decimal): Exact tuning
E Standard:
0x00004040
0x00003b30
0x00003730
0x00003230
0x00002d20
0x00002820

8 BYTES: Zeroed

8 BYTES (long): Tuning (what instrument?)
e.g. Standard-E

24 BYTES (decimal): Exact tuning
8 BYTES: Zeroed

8 BYTES (long): Tuning (Bass?)
e.g. Standard-E

16 BYTES (decimal): Exact tuning
E Standard:
0x00002b20
0x00002620
0x00002110
0x00001c10

16 BYTES: Zeroed

4 BYTES (decimal): Number of labels to read starting at below offset

4 BYTES (decimal): Offset to string key for Label
SEEN:
Reprise
Universal
Experience Hendrix
EMI

8 BYTES (long): Guitar licks
e.g. licks.Boston.ForeplayLongTimeG.lick

8 BYTES (long): Song texture?
e.g. songs.Boston.ForeplayLongTime.texture

8 BYTES (long): Audio preview
e.g. songs.Boston.ForeplayLongTime.preview.audio

4 BYTES (decimal): Number of metadata keys to read
4 BYTES (decimal): Offset to string key start for metadata
SEEN (Back From Cali):
tags.Instruments.guitar.tag
Tags.Instruments.Guitar.Techniques.chukkas.Tag
tags.eras.2010s.tag
Tags.instruments.vocals.ChallengeLevels.Level4.Tag
tags.instruments.guitar.advanced.tag
Tags.Instruments.guitar.Techniques.Bends.Tag
Tags.instruments.bass.ChallengeLevels.Level2.Tag
tags.genres.rock.tag
Tags.Instruments.Guitar.Techniques.hammerOns.Tag
tags.genres.hardRock.tag
Tags.Instruments.guitar.Techniques.Slides.Tag
tags.Sources.BFRLDisc.tag
tags.instruments.bass.tag
tags.instruments.vocals.tag
tags.instruments.bass.novice.tag
tags.instruments.guitar.rhythm.tag
tags.Instruments.Bass.Techniques.Slides.Tag
tags.Instruments.bass.Tunings.EStandard.Tag
tags.instruments.guitar.jam.tag
Tags.instruments.guitar.ChallengeLevels.Level3.Tag
tags.Instruments.guitar.Tunings.EStandard.Tag
tags.instruments.guitar.beginner.tag
tags.instruments.guitar.novice.tag
tags.instruments.bass.advanced.tag
tags.Legends.Slash.tag
tags.instruments.bass.jam.tag
tags.instruments.guitar.intermediate.tag
tags.instruments.bass.beginner.tag
tags.mediaType.song.tag
tags.genres.southernRock.tag

4 BYTES (decimal): Number of genres to read starting at below offset
4 BYTES (decimal): Offset to string key for genre
SEEN:
tags.genres.rock

24 BYTES: Zeroed Data

NOTES:
- For the offsets in this section, there's just a dump of string
keys at the very end of the ZOBJ section. Take the offset from
the beginning of the four-byte offset and you'll arrive
at the first of your n string keys to read.


index2.rif

Quote:
32 BYTES: Standard ZOBJ informaion

4 BYTES (decimal): DLC Number, starting at 1100001 (All I Want)
4 BYTES (decimal): Number of entries to read
4 BYTES (decimal): 0x00000004

Each entry is 24 bytes.
======================================================
8 BYTES (long): String key
SEEN:
VideoBackgroundMovie.Common.MovieGroup

8 BYTES (long): String key
SEEN:
MovieGroup

4 BYTES (decimal): 0x00000001, except for last entry, which is 0x00000002
4 BYTES (decimal): Offset to string object
SEEN:
VideoBackgroundMovie/Common/fused.rif
======================================================

STRING OBJECTS

Each entry is 248 bytes.
======================================================
8 BYTES: String key
SEEN:
PackageDefs.core_1_10.PackageDef (on-disc?)
PackageDefs.DLC0021.PackageDef (DLC has specific identifiers)

(variable) BYTES: Filepath
(248 - variable - 8): Zeroed information
======================================================


packagedef.rif

Quote:
Package Def Info:

- String tables look like they only have two entries:
- PackageDef
- PackageDefs
- There's one string table that only contains PackageDef.

ZOBJ Info:

32 BYTES standard ZOBJ information
4 BYTES (decimal): DLC number, starting at 1100000
e.g. All I Want is 1100001
Crazy on You is 1100016
7 BYTES (string): DLC number
e.g. All I Want is DLC0001
Crazy on You is DLC0016
1 BYTE: 0x00
248 BYTES: Zeroed information
4 BYTES (decimal): Number of entries to read (each entry 256 bytes)
4 BYTES: 0x00000004 constant
ENTRIES, IN ORDER:
=======
4 BYTES (string): core
252 BYTES: Zeroed information
TODO: Add updated info here
=======
9 BYTES (string): core_1_01
247 BYTES: Zeroed information
=======
9 BYTES (string): core_1_05
247 BYTES: Zeroed information
=======
9 BYTES (string): core_1_10
247 BYTES: Zeroed information
=======
Now, we have (number of entries - 4) DLC entries.
For All I Want, there are no other DLC entries, so the ZOBJ table ends here.
However, for songs like Crazy on You, there are 15 DLC preceding it,
so we have 15 DLC entries.
DLC ENTRY
=======
7 BYTES (string): DLCXXXX (e.g. 0001 for All I Want, 0016 for Crazy on You)
249 BYTES: Zeroed information
=======


MORE DETAIL ON EACH FILE TO BE ADDED
_________________
Yep, I learned through Rocksmith!


Last edited by ComicBookGuru on Thu Feb 26, 2015 12:59 am; edited 1 time in total
Back to top
View user's profile Send private message
ComicBookGuru  





Joined: 16 Dec 2007
Posts: 1678

PostPosted: Thu Feb 26, 2015 12:42 am    Post subject: Reply with quote

PART FOUR: Notes and other structures in the notes file!

GUITAR, RHYTHM, BASS

Notes are being ugly to me so until I can get them in-post, here's a link to a pastebin.

http://pastebin.ca/2943196

VOCALS

Quote:
All bytes are in big endian order.

INT32 - Always 8
INT32 - Size of Each Entry
INT32 - Count of Entries
INT32 - Always 4

* Vox Entry (32 bytes)
* ====================
* 0 FLOAT - Tube Start
* 4 FLOAT - Tube End
* 8 BYTE(4) - Note Pitch
* BYTE 1: 0x00
* BYTE 2: 0x00
* BYTE 3: Note Pitch (INT8)
* BYTE 4: Not sure, usually 64 (INT8)
* Observed: 34 (Reptilia), 48 (Reptilia), 64 (Love Bites), 80 (Crazy On You), 82
* 12 INT32 - Always 0
* 16 INT64 - String Key
* 24 INT32 -
* 1 Regular Note
* 2 Non-Pitched
* 3 Extended (Used for slides)
* 28 INT32 - Always 0


MORE ON BPM, MEASURES, PRACTICE, ETC. TO COME
_________________
Yep, I learned through Rocksmith!
Back to top
View user's profile Send private message
ComicBookGuru  





Joined: 16 Dec 2007
Posts: 1678

PostPosted: Thu Feb 26, 2015 12:58 am    Post subject: Reply with quote

Back to work for now, will update this either later tonight or tomorrow with more information.
_________________
Yep, I learned through Rocksmith!
Back to top
View user's profile Send private message
Airtrooper719  





Joined: 29 May 2013
Posts: 235
Location: Newcastle, UK

PostPosted: Thu Feb 26, 2015 6:38 pm    Post subject: Reply with quote

Interesting, I'd try to help out, but the game never made it to the UK/PAL release, so no dice for me.
Back to top
View user's profile Send private message XBL Gamertag: Airtrooper719
ComicBookGuru  





Joined: 16 Dec 2007
Posts: 1678

PostPosted: Fri Feb 27, 2015 12:04 am    Post subject: Reply with quote

PART FOUR: Identifying Sections

I'll try to explain this the best I can; feel free to ask me any questions if I'm not explaining things properly. For this part, I'll be talking about how to find certain data structures within the fused.rif file.

What makes up fused.rif?

There are three types of data structures that compose fused.rif:

INDX Section: This indexes all of the other sections in fused.rif. It is composed of the following:

- string identifier (XDNI)
- size of the chunk
- number of sections
- Constant 0x00000004

Then, for each section:
- 8 byte key identifier for each section
- Offset to that section
- 0x00000000

Index section is pretty simple!

String table sections: These store anything from lyrics, to file locations, to identifiers, chord names, and more! Anything string is kept here.

Structure:

- string identifier (lbTS)
- size of chunk
- 8 byte index key (as seen above, in the index)
- 8 byte folder key (this is also a findable key in the string table)
- 8 byte language key:

Quote:
For Disc + DLC:
(ENG): 5412069155413958780 # This does not contain string for folder name.
(JAP): -4916594395764136780

For DLC:
(GER): 8434362063832740322
(ITA): 4181558474080832064
(ESP): -1868168087102288302
(FRE): 6388165613802289312


8 bytes: 0x00

- 4 bytes: number of entries
- 4 bytes: always 12
- 4 bytes: size of the string table (where the strings actually are)
- 4 bytes: size leading up to the string table, including these four bytes

Then, for each entry:

- 8 byte key
- 4 byte offset FROM THE START OF THE STRING TABLE
- 0x00000000

Then, after all the entries, the string table starts. The string table is just... well, the strings, each separated by 0x00. So, we might see songs.pixies.herecomesyourman.song(0x00)songs.halestorm.lovebites.song, for example.

Keys appear to be arbitrarily given, but no key can be reused anywhere, as string tables are global; also, strings that are identical are given the same key.

ZOBJ Sections:

ZOBJ Sections are where the raw data structures are kept. (Notes, measures, BPM, practice sections, etc. are all kept in ZOBJ sections).

There are two types of ZOBJ sections, parent and child.

Structure:

Quote:
"ZOBJ" - Parent Object
======================
INT64 - Index Key
INT64 - Object Key (Matches keys in other objects)
INT64 - Type String Key
BYTES(8) - Zero'd Data
BYTES(?) - Raw Data

"ZOBJ" - Child Object
=====================
INT64 - Index Key
INT64 - Object Key (Matches keys in other objects)
INT64 - Type String Key
BYTES(8) - Zero'd Data
INT32 - Entry Identifier
0 - "timesignature"
1 - "tempo"
3 - "section"
4 - "measure"
6 - "chord"
7 - "audieffect"
8 - "vox"
10 - "voxpushphrase"
11 - "tab"
13 - "event"
INT32 - Entry Size
INT32 - Count of Entries
INT32 - Always 4
BYTES(Count of Entries * Entry Size) - Raw Data


How the heck do I identify what section I'm looking at?

Easy! The index key for ZOBJ can be found inside the string tables. Then, you can cross-reference it with the entry identifier and index key in the ZOBJ, and you'll have found your section!

Everything has its own section- each tab difficulty (and therefore tab) has its own section, etc.
_________________
Yep, I learned through Rocksmith!
Back to top
View user's profile Send private message
ComicBookGuru  





Joined: 16 Dec 2007
Posts: 1678

PostPosted: Fri Feb 27, 2015 12:33 am    Post subject: Reply with quote

Okay. Here's the repository for my prototype project that injects customs.

LIMITATIONS:

- It only injects for difficulty level 5.
- It uses a very specific MIDI file structure. Subject to change. Hell, the end result might not even use MIDI.
- Vocals work! But phrases aren't included. Baw. Luckily, it won't break anything if you're not playing vocals.
- There will be errors when you try to compile. It will be from needing you to input hardcoded paths to the MIDIs I provide.
- I've also provided you with a precomposed music video.
- Unfortunately, my MIDI-to-time based code isn't all there. You'll notice chart desync as it progresses.
- THIS IS A PROTOTYPE WITH AWFUL CODE. thanks
- THIS IS A PROTOTYPE WITH AWFUL CODE. Please do not complain to me about why it doesn't do x, y, or z. I don't care. I'm working on it.

Repository

Also, for those curious, the MIDI Spec I created that I've been adhering to.
_________________
Yep, I learned through Rocksmith!
Back to top
View user's profile Send private message
ComicBookGuru  





Joined: 16 Dec 2007
Posts: 1678

PostPosted: Sun Mar 01, 2015 7:37 pm    Post subject: Reply with quote

BRIEF UPDATE! Tempo, Time Signature, BEAT Track

Quote:
"tempo" entry (12 bytes)
===============
FLOAT - Start (ms)
FLOAT - End (ms)
FLOAT - BPM


Quote:
"timesignature" entry (16 bytes)
===================
FLOAT - Offset 1
FLOAT - Offset 2 # Usually the same as offset 1
INT32 - Beat
INT32 - Measure


Quote:
"measure" entry (12 bytes)
=================
FLOAT - Offset 1 (ms)
FLOAT - Offset 2 (ms) # Always the same as offset 1
FLOAT - Up/Down Beat Marker # 4/4 TS would be 2, 1, 1, 1, 2, 1, 1, 1, etc.
* 1.0f - Up
* 2.0f - Down

_________________
Yep, I learned through Rocksmith!
Back to top
View user's profile Send private message
ComicBookGuru  





Joined: 16 Dec 2007
Posts: 1678

PostPosted: Wed Mar 04, 2015 11:47 pm    Post subject: Reply with quote

CHORDS

Chord sections follow this name convention:

"gtr_xxx.chord", where xxx is beg, int, nov, jam, adv, or rhy (bass will not have rhy).

Following the standard ZOBJ information, we have x entries, 24 bytes each:

Quote:
Each entry is 24 bytes:

4 BYTES: Float, start time
4 BYTES: Float, end time
8 BYTES: String key for chord name
8 BYTES: Zeroed information


TOAN

Here's info I gleaned from the tone files a while back.

Quote:
32 BYTES: Standard ZOBJ information

8 BYTES: String key for amplifier type
4 BYTES (float): Gain amount
4 BYTES (float): Bass amount
4 BYTES (float): Mid amount
4 BYTES (float): Treble amount
4 BYTES (float): Reverb amount
4 BYTES (float): Volume amount
(All values 0-11)

8 BYTES: Amp reverb type (string key) Don't know what this is.
SEEN REVERB TYPES:
zzaudio.ampreverbtype.town_hall

16 BYTES: Info pertaining to reverb type.
SEEN FOR BYTES 0-4: 0x00000003, 0x00000001, 0x00000000
SEEN FOR BYTES 5-8: 0x0000000c
SEEN FOR BYTES 9-12: 0x00000001
SEEN FOR BYTES 13-16: 0x0000001c, 0x0000004c, 0x00000004

8 BYTES: String key for Overdrive/Distortion/Fuzz pedal
4 BYTES (constant): 0x01000000
4 BYTES (float): Tone amount
4 BYTES (float): Gain amount
4 BYTES (float): Zeroed information (possible that more pedals with three knobs were planned?)

8 BYTES: String key for Delay/Tremolo pedals
4 BYTES (constant): 0x01000000
4 BYTES (float): Knob 1 Amount
4 BYTES (float): Knob 2 amount
4 BYTES (float): Knob 3 amount (PRESUMABLY ZEROED IF USING TREMOLO PEDAL)

8 BYTES: String key for Autowah/Chorus/Flanger pedals
4 BYTES (constant): 0x01000000
4 BYTES (float): Range
4 BYTES (float): Sensitivity
4 BYTES (float): ??? Not zeroed, but there's no third knob for any pedal...

8 BYTES: String key for... octave drop?
4 BYTES (constant): 0x00000000 (wonder what happens if you set it to be 0x01000000)
4 BYTES (float): ???
Seen values: 5.0f

Files tested:
Mountain Song
Solo
Main
Crazy On You
Acoustic
Clean
Main
Bass


IF A PEDAL IS NOT BEING USED:
It is not included in the .rif file. For example, in Mountain Song's solo, we have:
- Amp
- All pedals activated
- Reverb type
- Octave drop section
However, in Crazy On You Acoustic/Clean:
- Amp
- Reverb Type
- Octave drop section

Bass is consistent and held to the same standard as guitar.

_________________
Yep, I learned through Rocksmith!
Back to top
View user's profile Send private message
ComicBookGuru  





Joined: 16 Dec 2007
Posts: 1678

PostPosted: Thu Mar 12, 2015 11:49 pm    Post subject: Reply with quote

raynebc has done the awesome and added preliminary BandFuse import support to EOF! More support coming soon, as well as export to a format I'll be using for BF customs.
_________________
Yep, I learned through Rocksmith!
Back to top
View user's profile Send private message
trojannemo  





Joined: 11 May 2011
Posts: 223
Location: Miami, Fl

PostPosted: Mon Mar 16, 2015 6:22 pm    Post subject: Re: BandFuse: Rock Legends Customs Research Reply with quote

ComicBookGuru wrote:
I know that TrojanNemo took a look at it at least; I don't know if he ever got anywhere.


Unfortunately I didn't. I only took a brief look and moved on since I had and still have a lot of Rock Band specific projects underway. Maybe I'll return eventually but I'm sure there are better suited people to cracking this than me.

Good to see all this effort. It's commendable.

ComicBookGuru wrote:
raynebc has done the awesome and added preliminary BandFuse import support to EOF!


I think the internet agrees that raynebc is one great dude.
_________________
Back to top
View user's profile Send private message Visit poster's website XBL Gamertag: TrojanNemo
ComicBookGuru  





Joined: 16 Dec 2007
Posts: 1678

PostPosted: Tue Mar 17, 2015 3:27 pm    Post subject: Re: BandFuse: Rock Legends Customs Research Reply with quote

trojannemo wrote:
ComicBookGuru wrote:
raynebc has done the awesome and added preliminary BandFuse import support to EOF!


I think the internet agrees that raynebc is one great dude.


I'd hope so. There's no way the Rocksmith community would be where it is without him, nor FoF, Phase Shift, or Rock Band (but C3 has a pretty good lock on fostering an amazing community on that end )
_________________
Yep, I learned through Rocksmith!
Back to top
View user's profile Send private message
ComicBookGuru  





Joined: 16 Dec 2007
Posts: 1678

PostPosted: Thu Mar 26, 2015 10:11 pm    Post subject: Reply with quote

We have prototype XML export done in EOF, so I'll try and get a demo up in the next few days.

Other recent discoveries include the fact that you can't use .bik audio in multiplayer, which means unless someone helps with the project to figure out stems, we appear to be boned on that front.
_________________
Yep, I learned through Rocksmith!
Back to top
View user's profile Send private message
ComicBookGuru  





Joined: 16 Dec 2007
Posts: 1678

PostPosted: Fri Mar 27, 2015 8:03 pm    Post subject: Reply with quote

Quote:
Alex360, on 27 Mar 2015 - 08:50 AM, said:

Here I am again, I did my best guess on .clt format (it looks like ver limited container, aes encrypted I suppose, I have no key and have no clue how to get one from PS3 game)
here is .bt file:

Code:
//--------------------------------------
//--- 010 Editor Binary Template
//
// File: BandFuse_CLT.bt
// Author: L0FKA
// Revision: 1
// Purpose: BandFuse .CLT format
//--------------------------------------
LittleEndian();

typedef char ID[4];

typedef struct{
    ID Magic;
    ushort unk_version_maj;
    ushort unk_version_min;
} hdr;

struct {
    hdr Header;

    uint   unk_flags_or_id;//preview has [40 00 0B 00]
    uint   unk_clock_frequency;//max?
    ubyte  unk_kbps;//quality?
    byte   unk_channel_mask;
    ushort unk_block_align;
    ushort samples_per_second;
    short  unk_flag;
    int unk_40;
    int unk_2; //[5, 48], [15, 56] pairs, this and next one
    int unk_flag0;

    uint unpaked_data_size; //just to cut off trash after decryption?
    byte IV[16];
    byte data[FileSize() - FTell()];

} file<open>;

Bytes in LE, I saw .wav files with wrong bytes conversion, effect like swap bytes, I can write small app to fix .wav files.(but who need fx sound except you'd like to replace RS metronome sound with BandFuse one ;) )

Also I've googled out gtf<>dds converter it's basically has different headers and DXT compression.


Don't know if this would help anyone get on board, but if it does, Alex from CustomsForge just provided some good info.
_________________
Yep, I learned through Rocksmith!
Back to top
View user's profile Send private message
Display posts from previous:   
Post new topic   Reply to topic    ScoreHero Forum Index -> Software All times are GMT
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum





Copyright © 2006-2024 ScoreHero, LLC
Terms of Use | Privacy Policy


Powered by phpBB