Quantcast
Jump to content
Search In
  • More options...
Find results that contain...
Find results in...
    1. Welcome to GTAForums!   (86,254 visits to this link)

    2. News

    1. GTA Online

      1. Find Lobbies & Players
      2. Guides & Strategies
      3. Vehicles
      4. Content Creator
      5. Help & Support
    2. Crews

      1. Events
      2. Recruitment
    1. Grand Theft Auto Series

    2. GTA Next

    3. GTA V

      1. PC
      2. Guides & Strategies
      3. Help & Support
    4. GTA IV

      1. Episodes from Liberty City
      2. Multiplayer
      3. Guides & Strategies
      4. Help & Support
      5. GTA Mods
    5. GTA Chinatown Wars

    6. GTA Vice City Stories

    7. GTA Liberty City Stories

    8. GTA San Andreas

      1. Guides & Strategies
      2. Help & Support
      3. GTA Mods
    9. GTA Vice City

      1. Guides & Strategies
      2. Help & Support
      3. GTA Mods
    10. GTA III

      1. Guides & Strategies
      2. Help & Support
      3. GTA Mods
    11. Top Down Games

      1. GTA Advance
      2. GTA 2
      3. GTA
    12. Wiki

      1. Merchandising
    1. GTA Modding

      1. GTA V
      2. GTA IV
      3. GTA III, VC & SA
      4. Tutorials
    2. Mod Showroom

      1. Scripts & Plugins
      2. Maps
      3. Total Conversions
      4. Vehicles
      5. Textures
      6. Characters
      7. Tools
      8. Other
      9. Workshop
    3. Featured Mods

      1. DYOM
      2. OpenIV
      3. GTA: Underground
      4. GTA: Liberty City
      5. GTA: State of Liberty
    1. Red Dead Redemption 2

    2. Red Dead Redemption

    3. Rockstar Games

    1. Off-Topic

      1. General Chat
      2. Gaming
      3. Technology
      4. Programming
      5. Movies & TV
      6. Music
      7. Sports
      8. Vehicles
    2. Expression

      1. Graphics / Visual Arts
      2. GFX Requests & Tutorials
      3. Writers' Discussion
      4. Debates & Discussion
    1. Forum Support

    2. Site Suggestions

Sign in to follow this  
xyx0826

[C#] Audio Wave Container Filename Hasher

Recommended Posts

xyx0826

I recently took a look into GTAV's AWC containers as I wanted to extract some of the music and make remixes. However nearly all audio files (for example, Doomsday Heist soundtracks) are split into L&R channels and hashed.

 

I found a stringtable outside of the audio folder, and I decided to write a tool that converts strings to their audio hash for identifying them in OpenIV. It turned out that the audio hashes are the result of AND-operating the normal Jenkins hash with 0x1FFFFFFF. So here's the tool:

 

This project makes use of Fireboyd78's C# String Hasher (http://gtaforums.com/topic/879408-c-string-hasher/).

 

https://github.com/xyx0826/GTAVAudioHasher

using System;using System.Collections.Generic;using System.IO;namespace GTAVAudioHasher{    /// <summary>    /// GTAVAudioHasher: hashes all lines in an input file to their     ///                  hashed from used in .awc containers.    /// These hashes are yielded by performing (hash & 0x1FFFFFFF).    /// Credits: Fireboyd78's C# String Hasher, http://gtaforums.com/topic/879408-c-string-hasher/    /// </summary>    class Program    {        static void Main(string[] args)        {            Console.WriteLine("GTAV Audio Hasher");            Console.WriteLine("Usage: GTAVAudioHasher.exe listFile\n");            if (args.Length == 0)            {                Console.WriteLine("No parameter given.");                Console.Read();                return;            }            if (!File.Exists(args[0]))            {                Console.WriteLine("Input file does not exist.");                Console.Read();                return;            }            string[] strings = File.ReadAllLines(args[0]);            List<string> hashes = new List<string>();            foreach (string str in strings)            {                Console.Write(str + ",0x");                string hash = (GetHashKey(str, 0) & 536870911).ToString("X");                while (hash.Length < 8) hash = "0" + hash;                hashes.Add("0x" + hash);                Console.WriteLine(hash);            }            Console.WriteLine("\nHashing complete. Writing to files.");            using (StreamWriter writer = new StreamWriter(@".\hashes_only.txt"))            {                foreach (string hash in hashes) writer.WriteLine(hash);            }            using (StreamWriter writer = new StreamWriter(@".\output.csv"))            {                for (int i = 0; i < strings.Length; i++)                    writer.WriteLine(strings[i] + "," + hashes[i]);            }            Console.WriteLine("Done.");            Console.Read();            return;        }                // Fireboyd78's original code below        private static readonly byte[] m_LookupTable = {        0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F,        0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F,        0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2A, 0x2B, 0x2C, 0x2D, 0x2E, 0x2F,        0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3A, 0x3B, 0x3C, 0x3D, 0x3E, 0x3F,        0x40, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6A, 0x6B, 0x6C, 0x6D, 0x6E, 0x6F,        0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7A, 0x5B, 0x2F, 0x5D, 0x5E, 0x5F,        0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6A, 0x6B, 0x6C, 0x6D, 0x6E, 0x6F,        0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7A, 0x7B, 0x7C, 0x7D, 0x7E, 0x7F,        0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8A, 0x8B, 0x8C, 0x8D, 0x8E, 0x8F,        0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99, 0x9A, 0x9B, 0x9C, 0x9D, 0x9E, 0x9F,        0xA0, 0xA1, 0xA2, 0xA3, 0xA4, 0xA5, 0xA6, 0xA7, 0xA8, 0xA9, 0xAA, 0xAB, 0xAC, 0xAD, 0xAE, 0xAF,        0xB0, 0xB1, 0xB2, 0xB3, 0xB4, 0xB5, 0xB6, 0xB7, 0xB8, 0xB9, 0xBA, 0xBB, 0xBC, 0xBD, 0xBE, 0xBF,        0xC0, 0xC1, 0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0xC7, 0xC8, 0xC9, 0xCA, 0xCB, 0xCC, 0xCD, 0xCE, 0xCF,        0xD0, 0xD1, 0xD2, 0xD3, 0xD4, 0xD5, 0xD6, 0xD7, 0xD8, 0xD9, 0xDA, 0xDB, 0xDC, 0xDD, 0xDE, 0xDF,        0xE0, 0xE1, 0xE2, 0xE3, 0xE4, 0xE5, 0xE6, 0xE7, 0xE8, 0xE9, 0xEA, 0xEB, 0xEC, 0xED, 0xEE, 0xEF,        0xF0, 0xF1, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0xF7, 0xF8, 0xF9, 0xFA, 0xFB, 0xFC, 0xFD, 0xFE, 0xFF,    };        private static uint GetHashKeySubString(string str, uint initialHash)        {            var hash = initialHash;            for (int i = 0; i < str.Length; i++)            {                hash += m_LookupTable[str[i]];                hash += (hash << 10);                hash ^= (hash >> 6);            }            return hash;        }        private static uint GetHashKeyFinalize(string str, uint initialHash)        {            var hash = GetHashKeySubString(str, initialHash);            hash += (hash << 3);            hash ^= (hash >> 11);            hash += (hash << 15);            return hash;        }                public static uint GetHashKey(string str, uint initialHash)        {            return GetHashKeyFinalize(str, initialHash);        }    }}

Share this post


Link to post
Share on other sites
TomilovSenya
Posted (edited)

Download this AudioTracks.txt and paste it into Documents\OpenIV\GTA V\Strings. Most of the DLC tracks will be unhashed. And yeah, OpenIV already has a built-in hash generator.

Edited by TomilovSenya

Share this post


Link to post
Share on other sites
TheHC09

Download this AudioTracks.txt and paste it into Documents\OpenIV\GTA V\Strings. Most of the DLC tracks will be unhashed. And yeah, OpenIV already has a built-in hash generator.

How did you find those strings? I want to find the VEHICLES_HORNS and SIRENS_ strings and don't know how to.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

×

Important Information

By using GTAForums.com, you agree to our Terms of Use and Privacy Policy.