Exemplo n.º 1
0
        public static AudioClip CreateAudioClipFromSfx(string clipName, GTAAudioStream audio_stream, int offsetInBytes, int sizeInBytes, int frequency)
        {
            AudioClip ret = null;

            audio_stream.Position = offsetInBytes;

            byte[] int_pcm = new byte[sizeInBytes];

            if (audio_stream.Read(int_pcm, 0, int_pcm.Length) == int_pcm.Length)
            {
                float[] float_pcm = new float[int_pcm.Length / sizeof(short)];
                for (int i = 0; i < float_pcm.Length; i++)
                {
                    float_pcm[i] = Mathf.Clamp(((short)(int_pcm[i * sizeof(short)] | (int_pcm[(i * sizeof(short)) + 1] << 8)) / 32767.5f), -1.0f, 1.0f);
                }
                ret = AudioClip.Create(clipName, float_pcm.Length, 1, frequency, false);
                ret.SetData(float_pcm, 0);

                // Debug.LogFormat("loaded sfx: name {0}, offset {1}, size {2}, length {3}, bitrate Kb/s {4}, stream size {5}, freq {6}",
                //  clipName, offsetInBytes, sizeInBytes, ret.length,
                //  FreqToKbs (frequency), audio_stream.Length, frequency);
            }

            return(ret);
        }
Exemplo n.º 2
0
        public static AudioClip CreateAudioClipFromSfx(string sfxFileName, int bankIndex, int audioIndex, SfxBankAudioData?sfxBankAudioData)
        {
            if (null == s_gtaAudioFiles || bankIndex < 0 || audioIndex < 0)
            {
                return(null);
            }

            AudioClip ret      = null;
            string    clipName = sfxFileName + "." + bankIndex + "." + audioIndex;

            try
            {
                using (GTAAudioStream audio_stream = s_gtaAudioFiles.OpenSFXAudioStreamByName(sfxFileName, (uint)bankIndex, (uint)audioIndex))
                {
                    if (audio_stream != null)
                    {
                        // this audio stream holds all sounds from this bank

                        int freq          = sfxBankAudioData.HasValue ? Mathf.RoundToInt(KbsToFreq(sfxBankAudioData.Value.bitrateKbs)) : audio_stream.SampleRate;
                        int offsetInBytes = sfxBankAudioData.HasValue ? sfxBankAudioData.Value.offsetInBytes : 0;
                        int sizeInBytes   = sfxBankAudioData.HasValue ? sfxBankAudioData.Value.sizeInBytes : (int)audio_stream.Length;

                        ret = CreateAudioClipFromSfx(clipName, audio_stream, offsetInBytes, sizeInBytes, freq);
                    }
                }
            }
            catch (System.Exception e)
            {
                Debug.LogError(e);
            }

            return(ret);
        }
Exemplo n.º 3
0
        public static AudioClip CreateAudioClipFromSfx(string sfxFileName, int bankIndex, int audioIndex)
        {
            if (null == s_gtaAudioFiles || bankIndex < 0 || audioIndex < 0)
            {
                return(null);
            }

            AudioClip ret      = null;
            string    clipName = sfxFileName + "." + bankIndex + "." + audioIndex;

            try
            {
                using (GTAAudioStream audio_stream = s_gtaAudioFiles.OpenSFXAudioStreamByName(sfxFileName, (uint)bankIndex, (uint)audioIndex))
                {
                    if (audio_stream != null)
                    {
                        ret = CreateAudioClipFromSfx(clipName, audio_stream);
                    }
                }
            }
            catch (System.Exception e)
            {
                Debug.LogError(e);
            }

            return(ret);
        }
Exemplo n.º 4
0
 /// <summary>
 /// Main entry point
 /// </summary>
 /// <param name="args">Command line arguments</param>
 static void Main(string[] args)
 {
     try
     {
         string path = null;
         if (args.Length > 0)
         {
             path = args[0];
         }
         else
         {
             Console.Write("Please specify a path to dump the audio files from (press return to exit): ");
             path = Console.ReadLine();
         }
         if (path != null)
         {
             if (path.Trim().Length > 0)
             {
                 string sfx_directory = Path.Combine(Environment.CurrentDirectory, "sfx");
                 byte[] buffer        = new byte[4096];
                 if (!(Directory.Exists(sfx_directory)))
                 {
                     Directory.CreateDirectory(sfx_directory);
                 }
                 using (GTAAudioFiles gta_audio_files = GTAAudio.OpenRead(path))
                 {
                     if (gta_audio_files != null)
                     {
                         GTAAudioSFXFile[] sfx_audio_files = gta_audio_files.SFXAudioFiles;
                         foreach (GTAAudioSFXFile sfx_audio_file in sfx_audio_files)
                         {
                             if (sfx_audio_file != null)
                             {
                                 string sfx_sfx_directory = Path.Combine(sfx_directory, sfx_audio_file.Name);
                                 try
                                 {
                                     if (!(Directory.Exists(sfx_sfx_directory)))
                                     {
                                         Directory.CreateDirectory(sfx_sfx_directory);
                                     }
                                     for (int i = 0, j; i < sfx_audio_file.NumBanks; i++)
                                     {
                                         try
                                         {
                                             GTAAudioBankData bank_data          = sfx_audio_file.GetBankData((uint)i);
                                             string           sfx_bank_directory = Path.Combine(sfx_sfx_directory, i.ToString());
                                             if (!(Directory.Exists(sfx_bank_directory)))
                                             {
                                                 Directory.CreateDirectory(sfx_bank_directory);
                                             }
                                             for (j = 0; j < bank_data.NumAudioClips; j++)
                                             {
                                                 using (Stream audio_stream = sfx_audio_file.Open((uint)i, (uint)j))
                                                 {
                                                     if (audio_stream is GTAAudioStream)
                                                     {
                                                         GTAAudioStream gta_audio_stream = (GTAAudioStream)audio_stream;
                                                         string         audio_file_path  = Path.Combine(sfx_bank_directory, sfx_audio_file.Name + "." + i + "." + j + ".wav");
                                                         if (File.Exists(audio_file_path))
                                                         {
                                                             File.Delete(audio_file_path);
                                                         }
                                                         using (FileStream file_stream = File.Open(audio_file_path, FileMode.Create))
                                                         {
                                                             using (BinaryWriter writer = new BinaryWriter(file_stream))
                                                             {
                                                                 int  len;
                                                                 long audio_stream_length = audio_stream.Length;
                                                                 writer.Write(Encoding.ASCII.GetBytes("RIFF"));
                                                                 writer.Write(0);
                                                                 writer.Write(Encoding.ASCII.GetBytes("WAVEfmt "));
                                                                 writer.Write(16);
                                                                 writer.Write((short)1);
                                                                 writer.Write((short)1);
                                                                 writer.Write((int)(gta_audio_stream.SampleRate));
                                                                 writer.Write(gta_audio_stream.SampleRate * 2);
                                                                 writer.Write((short)2);
                                                                 writer.Write((short)16);
                                                                 writer.Write(Encoding.ASCII.GetBytes("data"));
                                                                 writer.Write((int)audio_stream_length);
                                                                 while ((len = Math.Min((int)(audio_stream_length - audio_stream.Position), buffer.Length)) > 0)
                                                                 {
                                                                     if (audio_stream.Read(buffer, 0, len) == len)
                                                                     {
                                                                         file_stream.Write(buffer, 0, len);
                                                                     }
                                                                     else
                                                                     {
                                                                         break;
                                                                     }
                                                                 }
                                                                 file_stream.Seek(4L, SeekOrigin.Begin);
                                                                 writer.Write((int)(file_stream.Length - 8));
                                                             }
                                                         }
                                                     }
                                                 }
                                             }
                                         }
                                         catch (Exception e)
                                         {
                                             Console.Error.WriteLine(e);
                                         }
                                     }
                                 }
                                 catch (Exception e)
                                 {
                                     Console.Error.WriteLine(e);
                                 }
                             }
                         }
                     }
                     else
                     {
                         Console.Error.WriteLine("Can't open audio directory \"" + path + "\".");
                         Environment.ExitCode = 3;
                     }
                 }
             }
             else
             {
                 Environment.ExitCode = 2;
             }
         }
         else
         {
             Environment.ExitCode = 1;
         }
     }
     catch (Exception e)
     {
         Console.Error.WriteLine(e);
         Environment.ExitCode = -1;
     }
 }