# Files
# .audica
The .audica file is a renamed .zip file packed with the store option. Audica will not read an .audica file that has any kind of compression.
.audica files are read from:
<Audica folder>/Audica_Data/StreamingAssets/HmxAudioAssets/songs/
# .cues
beginner.cues
moderate.cues
advanced.cues
expert.cues
This is an optional json file containing the information for targets, repeaters, tempo and target speed.
The name of the cues file corresponds to the difficulty: beginner.cues
for Beginner, moderate.cues
for Standard, advanced.cues
for Advanced and expert.cues
for Expert.
To use cues files you need to specify false
for useMidiForCues
in the .desc file
{
"cues": [
{
"tick": 3840,
"tickLength": 60,
"pitch": 40,
"velocity": 20,
"gridOffset": {
"x": 0.0,
"y": 0.0
},
"zOffset": 0.0,
"handType": 2,
"behavior": 0
},
...
],
"repeaters": [
{
"handType": 2,
"tick": 3840,
"tickLength": 7680,
"pitch": 127,
"velocity": 96
},
...
],
"tempos": [
{
"tempo": 128.0,
"tick": 0
},
...
],
"targetSpeed": 1.0
}
# cues
The cues are the targets
# tick
The amount of MIDI ticks from the start of the song
# tickLength
The length of the note. This should be set to 120 unless the target is a sustain
# pitch
This is the [grid] location of the target. Valid values are from 0 to 83
# velocity
The velocity value controls which sound the target will play when hit.
If you are using a custom drum kit this could be set to any value from 0-127, assuming the drum kit has a sound for that value.
Default drum kits that comes with the game (as well as the OST) uses only 6 velocity values:
Velocity Value | Description |
---|---|
1 | Chain start |
2 | Chain node |
3 | Melee percussion |
20 | Kick drum |
60 | Percussion |
127 | Snare drum |
# gridOffset
x: The offset from the center point of the grid location of the target on the X axis
y: The offset from the center point of the grid location of the target on the Y axis
# zOffset
The Z offset controls the depth of the target
# handType
The hand used for the target.
handType Value | Description |
---|---|
0 | Either hand |
1 | Right hand |
2 | Left hand |
# behavior
The type of target.
Behavior Value | Description |
---|---|
0 | Normal |
1 | Vertical |
2 | Horizontal |
3 | Sustain |
4 | Chain start |
5 | Chain node |
6 | Melee |
7 | Dodge |
# repeaters
The repeaters are a copy/paste function. It does not serve any purpose in the game.
# handType
The hand the repeater is saved on. The only valid values are 0, 1 and 2
# tick
The amount of MIDI ticks from the start of the song
# tickLength
The length of the repeater.
# pitch
The pitch used to save this repeater. This should be a value between 102 and 127
# velocity
This does not serve any purpose for repeaters
# tempos
These are markers for bpm change. In the cues files they do not serve any other purpose than being useful for MIDI conversion. The BPM of the song is always read from the MIDI file regardless if using MIDI for cues or not.
# tempo
The tempo of the marker
# tick
The amount of MIDI ticks from the start of the song
# targetSpeed
This controls the speed of the targets for the whole song. This value is multiplied by the in-game setting.
# .mid
This file is a MIDI file.
The BPM information is required to be in the MIDI file, but the cues (targets) can be encoded either in the MIDI file or the cues file. You can specify if you're using MIDI or not in the song.desc file of the audica file.
# Ticks Per Quarter Note
This is a midi setting that controls the length of the ticks.
Audica was programmed to use 480 ticks per quarter note, in other word, 1 beat in x/4 = 480 ticks. This setting is a must.
# Tracks
The track name must be a "Track name" event at the very start of the song (1.1.0).
The bare minimum is 3 tracks of one difficulty.
MIDI Track | Description |
---|---|
Expert Melee | Contains "either hand" targets for expert |
Expert LH | Contains left hand targets for expert |
Expert RH | Contains right hand targets for expert |
Hard Melee | Contains "either hand" targets for advanced |
Hard LH | Contains left hand targets for advanced |
Hard RH | Contains right hand targets for advanced |
Normal Melee | Contains "either hand" targets for standard |
Normal LH | Contains left hand targets for standard |
Normal RH | Contains right hand targets for standard |
Easy Melee | Contains "either hand" targets for beginner |
Easy LH | Contains left hand targets for beginner |
Easy RH | Contains right hand targets for beginner |
Community Melee | Contains "either hand" targets for a community map |
Community LH | Contains left hand targets for a community map |
Community RH | Contains right hand targets for a community map |
sustain_intro | Something related to sustain sounds that was used in development, the game currently does not use this track |
sustain_hard | Something related to sustain sounds that was used in development, the game currently does not use this track |
The community tracks are used on their own only, for the community maps function of the game.
# Pitch
The pitch (note) controls the position of the targets on the grid sphere.
0-83 are spots on the grid while 98-101 are melee target spots.
There is also pitches 102-127 that are used for storing repeaters, a copy/paste function enabled by a REAPER Lua script provided by the game files. These pitches are not read by the game.
# Channel
The channel controls the behavior of the target. This only affect the pitch, not the CC values.
This is assuming the channel system starts at 1. If you're not using REAPER the first channel could be 0, if that's the case then substract 1 of each of these channel values.
Channel Value | Description |
---|---|
1 | Regular target |
2 | Horizontal target |
3 | Vertical target |
4 | Chain start target |
5 | Chain node |
The sustain behavior is controlled with then length of the note. Any note with a length higher than 480 ticks (1 beat in x/4) will automatically be considered as a sustain.
The melee behavior is controlled with pitch, there are 4 pitch assigned to be melee targets, depending on the position.
# Velocity
The velocity value controls which sound the target will play when hit.
If you are using a custom drum kit this could be set to any value from 0-127, assuming the drum kit has a sound for that value.
Default drum kits that comes with the game (as well as the OST) uses only 6 velocity values:
Value | Description |
---|---|
1 | Chain start |
2 | Chain node |
3 | Melee percussion |
20 | Kick drum |
60 | Percussion |
127 | Snare drum |
# MIDI CC Data
Audica uses CC data to store grid offsets. These CC variables takes 0-127 as data.
GP slider | Description |
---|---|
16 | X axis offset |
17 | Y axis offset |
18 | Z axis affset |
19 | X axis big offset |
20 | Y axis big offset |
21 | Z axis big offset |
For the 3 first values (16, 17, 18) you have to set the value to the middle (63-64) to center the target in the grid point, so 64 is a tiny bit offset to the right while 63 is a tiny bit offset to the left on the X axis.
- X axis (16)
- 0-63 will nudge the target to the left, 0 being the highest left value, and 63 being the closest to the center
- 64-127 will nudge the target to the right, 127 being the highest right value, and 64 being the closest to the center
- Y axis (17)
- 0-63 will nudge the target to the bottom, 0 being the highest bottom value, and 63 being the closest to the center
- 64-127 will nudge the target to the top, 127 being the highest top value, and 64 being the closest to the center
- Z axis (18)
- 0-63 will nudge the depth of the target closer to you, 0 being the closest to you, and 63 being the closest to the default depth
- 64-127 will nudge the depth of the target further away, 127 being as far away as possible, and 64 being the closest to the default depth
The other 3 values (19, 20, 21) will add offset to the main offset values to cover pretty much the entire sphere, this makes it possible to author a 360 degree map/chart. These add the value to their respective axis minus 64, though instead of beind small nudges from the center of the pitch it will add or substract a full grid square.
# Target Speed
It is possible to set the target speed in the MIDI file by adding a text event in the Right Hand track with targetSpeed 1.0
. This value (1.0) will be multiplied with the in-game target speed setting.
# .moggsong
This file is written in the Harmonix home language often called DTA because of the rock band dta files.
This file controls a mogg file.
The game uses 5 .moggsong files:
# song.moggsong
This controls the main audio file This is a stereo track
# song_extras.moggsong
This controls the extras audio file which mostly contrains the count-in played before targets appear
This is a stereo track
This track is optional
# song_sustain_l.moggsong
This controls the left sustain audio file
This is a mono track
This track is optional
# song_sustain_r.moggsong
This controls the right sustain audio file
This is a mono track
This track is optional
# song_finale.moggsong
This is the audio for the campaign finale
This is a stereo track
This track is only used for the song "addictedtoamemory"
(mogg_path "addictedtoamemory.mogg")
(midi_path "addictedtoamemory.mid")
(tracks
(
(mix (0 1) event:/gameplay/song_audio)
)
)
;
(pans (-1 1))
(vols (0 0))
# mogg_path
The name of the mogg file
# midi_path
The name of the MIDI file
# tracks
mix: This line controls the mix. (0 1) is used for stereo files and (0) for mono files. Sustain audio files are mono, the rest are stereo.
# pans
Controls the pan values. One value per channel.
# vols
Controls the volume values. One value per channel.
# .mogg
This is a multi-track ogg file, used in Harmonix games. The official .mogg files that are released by Harmonix are encrypted.
The only difference with an ogg file is the header.
These files are created using ogg2mogg (opens new window).
ogg2mogg input_file.ogg output_file.mogg
The game uses 5 .mogg files:
# song.mogg
Contains the main audio (the song)
This is a stereo track
# song_extras.mogg
Contains the count-in (countdown before targets appear) and can contain other sound effects during the song
This is a stereo track
This track is optionnal
# song_sustain_l.mogg
Contains the distorted sound effect for the left gun
This is a mono track
This track is optionnal
# song_sustain_r.mogg
Contains the distorted sound effect for the right gun
This is a mono track
This track is optionnal
# song_finale.mogg
`Contains the music/sound effect for the campaign final
This is a stereo track
This track is only used for the song "addictedtoamemory" which is the campaign finale.
# Converting to .ogg
It is possible to convert an .mogg file to .ogg by removing the header. Note that this will not work with official Harmonix .mogg files
Byte 4 is a 4byte little endian number, this number is the address of where the ogg file actually starts. You can then delete everything before that address and you end up with an .ogg file.
In this example the .ogg file starts at 0xED4.
Thanks to Onyxite (opens new window) for this information and the ogg2mogg (opens new window) software.
# .desc
This is a json file that contains all the metadata. This file must be named song.desc
.
{
"songID": "addictedtoamemory",
"moggSong": "addictedtoamemory.moggsong",
"title": "Addicted To A Memory",
"artist": "Zedd ft. Bahari",
"author": "",
"midiFile": "addictedtoamemory.mid",
"targetDrums": "fusion/target_drums/destruct.json",
"sustainSongRight": "addictedtoamemory_sustain_r.moggsong",
"sustainSongLeft": "addictedtoamemory_sustain_l.moggsong",
"fxSong": "addictedtoamemory_extras.moggsong",
"songEndEvent": "event:/song_end/song_end_C#",
"highScoreEvent": "event:/results/results_high_score_C#",
"songEndPitchAdjust": 0.0,
"prerollSeconds": 0.5,
"previewStartSeconds": 61.2239990234375,
"useMidiForCues": false,
"hidden": false
}
# songID
Unique ID of the song
# moggSong
The name of the moggsong file that controls the main mogg file
# title
Name of the song
# artist
The artist that created this song
# author
The name of the person who created the map/chart If this field is empty, the "Mapper" field on the song's button will not show up.
# midiFile
The name of the MIDI file
# targetDrums
The location of the drum kit metadata file
# sustainSongRight
The name of the moggsong file that controls the right sustain mogg file
This file is optionnal, you can remove the value and have "" as the string value if you do not wish to use this file
# sustainSongLeft
The name of the moggsong file that controls the left sustain mogg file
This file is optionnal, you can remove the value and have "" as the string value if you do not wish to use this file
# fxSong
The name of the moggsong file that controls the extras mogg file
This file is optionnal, you can remove the value and have "" as the string value if you do not wish to use this file
# songEndEvent
The event played at the end of the song
# highScoreEvent
The event played at the high score popup
# songEndPitchAdjust
Adjustment value for the pitch used for the end event
# prerollSeconds
Amount of time to wait before starting the song; this does not affect audio
# previewStartSeconds
The time in seconds when the song preview starts
# useMidiForCues
If set to True
, the game will load cues from the MIDI file instead
of the cues files
# hidden
If set to True
, song will be hidden. This is only used for the tutorial song
# Old values
These values are no longer used by the game. If you find those, you are looking at an old song.desc file. All the OST songs were updated with the new targetDrums
.
# fusionSpatialized
Location of the spatial fusion file
# fusionUnspatialized
Location of the sub fusion file
# extrafriends.json
This file is for storing cross-platform friends. Not available for PSVR.
{
"friends": [
{
"leaderboard_friend_id": "44fcf4a6-6566-4a61-92e7-2d645db60e5f",
"name": "CoachTony"
},
...
]
}
On PC this file is stored in AppData\LocalLow\Harmonix Music Systems, Inc_\Audica
. You can find your own friend code in the game just by using the Copy function in Settings > Friends.
On Quest this file is stored in PC\Quest\Internal shared storage\Android\data\com.harmonixmusic.kata\files
. Currently the only ways to get your friend code is either the PC method using the Rift version of the game, or join the Modding Discord Server, go in the #leaderboards channel and use the .findfriendcode "your_username" command (quotes are only necessary if the username contains spaces). The requested friend code will only show up if the player has played at least one song.