Example #1
0
        private void listBox1_SelectedIndexChanged(object sender, EventArgs e)
        {
            int n = listBox1.SelectedIndex;

            if (n == -1)
            {
                return;
            }
            rtb1.Text    = "";
            rtb1.Visible = true;
            hb1.Visible  = false;
            int index = ObjectIndexes[n];

            PCCObject.ExportEntry ex = pcc.Exports[index];
            if (ex.ClassName == "WwiseStream")
            {
                w = new WwiseStream(pcc, index);
                string s = "#" + index + " WwiseStream : " + ex.ObjectName + "\n\n";
                s        += "Filename : \"" + w.FileName + "\"\n";
                s        += "Data size: " + w.DataSize + " bytes\n";
                s        += "Data offset: 0x" + w.DataOffset.ToString("X8") + "\n";
                s        += "ID: 0x" + w.Id.ToString("X8") + " = " + w.Id + "\n";
                rtb1.Text = s;
            }
            if (ex.ClassName == "WwiseBank")
            {
                rtb1.Visible     = false;
                hb1.Visible      = true;
                wb               = new WwiseBank(pcc, index);
                hb1.ByteProvider = new DynamicByteProvider(wb.getBinary());
            }
        }
Example #2
0
        public override void handleUpdate(List <PackageUpdate> updates)
        {
            IEnumerable <PackageUpdate> relevantUpdates = updates.Where(x => x.change != PackageChange.Import &&
                                                                        x.change != PackageChange.ImportAdd &&
                                                                        x.change != PackageChange.Names);
            List <int> updatedExports = relevantUpdates.Select(x => x.index).ToList();

            if (updatedExports.Contains(bank.MyIndex))
            {
                int index = bank.MyIndex;
                //loaded sequence is no longer a sequence
                if (pcc.getExport(index).ClassName != "WwiseBank")
                {
                    bank = null;
                    listBox2.Items.Clear();
                    rtb1.Text        = "";
                    hb1.ByteProvider = new DynamicByteProvider(new List <byte>());
                    hb2.ByteProvider = new DynamicByteProvider(new List <byte>());
                }
                RefreshSelected();
                updatedExports.Remove(index);
            }
            if (updatedExports.Intersect(objects).Count() > 0)
            {
                ListRefresh();
            }
            foreach (var i in updatedExports)
            {
                if (pcc.getExport(i).ClassName.Contains("WwiseBank"))
                {
                    ListRefresh();
                    break;
                }
            }
        }
Example #3
0
        private void ExtractBankToWav(SoundplorerExport spExport, string location = null)
        {
            if (spExport != null && spExport.Export.ClassName == "WwiseBank")
            {
                WwiseBank wb = new WwiseBank(spExport.Export);
                var       embeddedWEMFiles = wb.GetWEMFilesMetadata();
                if (embeddedWEMFiles.Count > 0)
                {
                    if (location == null)
                    {
                        var dlg = new CommonOpenFileDialog("Select output folder")
                        {
                            IsFolderPicker = true
                        };

                        if (dlg.ShowDialog() != CommonFileDialogResult.Ok)
                        {
                            return;
                        }
                        location = dlg.FileName;
                    }

                    var data = wb.GetChunk("DATA");
                    if (embeddedWEMFiles.Count > 0)
                    {
                        foreach (var singleWemMetadata in embeddedWEMFiles)
                        {
                            byte[] wemData = new byte[singleWemMetadata.Item3];
                            //copy WEM data to buffer. Add 0x8 to skip DATA and DATASIZE header for this block.
                            Buffer.BlockCopy(data, singleWemMetadata.Item2 + 0x8, wemData, 0, singleWemMetadata.Item3);
                            //check for RIFF header as some don't seem to have it and are not playable.
                            string wemHeader = "" + (char)wemData[0] + (char)wemData[1] + (char)wemData[2] + (char)wemData[3];
                            string wemName   = spExport.Export.ObjectName + "_0x" + singleWemMetadata.Item1.ToString("X8");

                            if (wemHeader == "RIFF")
                            {
                                EmbeddedWEMFile wem        = new EmbeddedWEMFile(wemData, wemName, spExport.Export.FileRef.Game); //will correct truncated stuff
                                Stream          waveStream = soundPanel.getPCMStream(forcedWemFile: wem);
                                if (waveStream != null && waveStream.Length > 0)
                                {
                                    string outputname = wemName + ".wav";
                                    string outpath    = System.IO.Path.Combine(location, outputname);
                                    using (var fileStream = File.Create(outpath))
                                    {
                                        waveStream.Seek(0, SeekOrigin.Begin);
                                        waveStream.CopyTo(fileStream);
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
 public Wwise_File_Extract_V2(string Bank_File)
 {
     if (!File.Exists(Bank_File))
     {
         IsClear = true;
         return;
     }
     Selected_BNK_File = Bank_File;
     WB = new WwiseBank(Bank_File);
     LL.Add((LoLSoundBank)WB);
     LOL  = new LoLSoundBankManager(LL);
     WEML = LOL.GetAudioFiles();
 }
Example #5
0
        public void RefreshSelected()
        {
            int n = listBox1.SelectedIndex;

            if (n == -1)
            {
                return;
            }
            int index = objects[n];

            bank             = new WwiseBank(pcc, index);
            hb1.ByteProvider = new DynamicByteProvider(bank.getBinary());
            rtb1.Text        = bank.GetQuickScan();
            ListRefresh2();
        }
Example #6
0
        /// <summary>
        /// Rewrites the soundbank export with new data from the ogg.
        /// </summary>
        /// <param name="oggPath"></param>
        private void ReplaceWEMAudioFromWwiseOgg(string oggPath, EmbeddedWEMFile wem)
        {
            WwiseBank w = new WwiseBank(CurrentLoadedExport);

            if (oggPath == null)
            {
                OpenFileDialog d = new OpenFileDialog();
                d.Filter = "Wwise Encoded Ogg|*.ogg";
                bool?res = d.ShowDialog();
                if (res.HasValue && res.Value)
                {
                    oggPath = d.FileName;
                }
                else
                {
                    return;
                }
            }

            MemoryStream convertedStream = null;

            using (var fileStream = new FileStream(oggPath, FileMode.Open))
            {
                convertedStream = WwiseStream.ConvertWwiseOggToME3Ogg(fileStream);
            }

            //Update the EmbeddedWEMFile. As this is an object it will be updated in the references.
            if (wem.HasBeenFixed)
            {
                wem.OriginalWemData = convertedStream.ToArray();
            }
            else
            {
                wem.WemData = convertedStream.ToArray();
            }

            w.UpdateDataChunk(AllWems); //updates this export's data.
            File.Delete(oggPath);
            MessageBox.Show("Done");
        }
Example #7
0
 public void LoadData()
 {
     if (Export.ClassName == "WwiseStream")
     {
         WwiseStream w       = new WwiseStream(Export);
         string      afcPath = w.getPathToAFC();
         if (afcPath == "")
         {
             SubText = "Could not find AFC";
         }
         else
         {
             TimeSpan?time = w.GetSoundLength();
             if (time != null)
             {
                 //here backslash must be present to tell that parser colon is
                 //not the part of format, it just a character that we want in output
                 SubText = time.Value.ToString(@"mm\:ss\:fff");
             }
             else
             {
                 SubText = "Error getting length, may be unsupported";
             }
         }
         NeedsLoading = false;
         Icon         = FontAwesomeIcon.VolumeUp;
     }
     if (Export.ClassName == "WwiseBank")
     {
         WwiseBank wb = new WwiseBank(Export);
         var       embeddedWEMFiles = wb.GetWEMFilesMetadata();
         SubText      = embeddedWEMFiles.Count() + " embedded WEM" + (embeddedWEMFiles.Count() != 1 ? "s" : "");
         NeedsLoading = false;
         Icon         = FontAwesomeIcon.University;
     }
 }
Example #8
0
 // parameter is allowed class type for visibility
 public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
 {
     return(WwiseBank.GetHircObjType((byte)value));
 }
Example #9
0
        public override void LoadExport(IExportEntry exportEntry)
        {
            ExportInformationList.Clear();
            AllWems.Clear();
            //Check if we need to first gather wwiseevents for wem IDing
            //Uncomment when HIRC stuff is implemented, if ever...

            /*if (exportEntry.FileRef != CurrentPackage)
             * {
             *  //update
             *  WemIdsToWwwiseEventIdMapping.Clear();
             *  List<IExportEntry> wwiseEventExports = exportEntry.FileRef.Exports.Where(x => x.ClassName == "WwiseEvent").ToList();
             *  foreach (IExportEntry wwiseEvent in wwiseEventExports)
             *  {
             *      StructProperty relationships = wwiseEvent.GetProperty<StructProperty>("Relationships");
             *      IntProperty id = wwiseEvent.GetProperty<IntProperty>("Id");
             *      FloatProperty DurationMilliseconds = wwiseEvent.GetProperty<FloatProperty>("DurationMilliseconds");
             *
             *      if (relationships != null)
             *      {
             *          ObjectProperty bank = relationships.GetProp<ObjectProperty>("Bank");
             *          if (bank != null && bank.Value > 0)
             *          {
             *              //export in this file
             *              List<Tuple<string, int, double>> bankWemInfosList;
             *              Tuple<string, int, double> newData = new Tuple<string, int, double>(wwiseEvent.ObjectName, id.Value, DurationMilliseconds.Value);
             *              if (WemIdsToWwwiseEventIdMapping.TryGetValue(exportEntry.FileRef.Exports[bank.Value - 1], out bankWemInfosList))
             *              {
             *                  bankWemInfosList.Add(newData);
             *              }
             *              else
             *              {
             *                  WemIdsToWwwiseEventIdMapping[exportEntry.FileRef.Exports[bank.Value - 1]] = new List<Tuple<string, int, double>>();
             *                  WemIdsToWwwiseEventIdMapping[exportEntry.FileRef.Exports[bank.Value - 1]].Add(newData);
             *              }
             *          }
             *      }
             *  }
             *
             * }
             * CurrentPackage = exportEntry.FileRef;*/
            ExportInformationList.Add("#" + exportEntry.Index + " " + exportEntry.ClassName + " : " + exportEntry.ObjectName);
            if (exportEntry.ClassName == "WwiseStream")
            {
                WwiseStream w = new WwiseStream(exportEntry);
                ExportInformationList.Add("Filename : " + (w.FileName ?? "Stored in this PCC"));
                ExportInformationList.Add("Data size: " + w.DataSize + " bytes");
                ExportInformationList.Add("Data offset: 0x" + w.DataOffset.ToString("X8"));
                string wemId = "ID: 0x" + w.Id.ToString("X8");
                if (Properties.Settings.Default.SoundplorerReverseIDDisplayEndianness)
                {
                    wemId += $" | 0x{ReverseBytes((uint)w.Id).ToString("X8")} (Reversed)";
                }
                ExportInformationList.Add(wemId);
                CurrentLoadedExport = exportEntry;
            }
            if (exportEntry.ClassName == "WwiseBank")
            {
                WwiseBank wb = new WwiseBank(exportEntry);
                var       embeddedWEMFiles = wb.GetWEMFilesMetadata();
                var       data             = wb.GetChunk("DATA");
                int       i = 0;
                if (embeddedWEMFiles.Count > 0)
                {
                    foreach (var singleWemMetadata in embeddedWEMFiles)
                    {
                        byte[] wemData = new byte[singleWemMetadata.Item3];
                        //copy WEM data to buffer. Add 0x8 to skip DATA and DATASIZE header for this block.
                        Buffer.BlockCopy(data, singleWemMetadata.Item2 + 0x8, wemData, 0, singleWemMetadata.Item3);
                        //check for RIFF header as some don't seem to have it and are not playable.
                        string wemHeader = "" + (char)wemData[0] + (char)wemData[1] + (char)wemData[2] + (char)wemData[3];

                        string wemId = singleWemMetadata.Item1.ToString("X8");
                        if (Properties.Settings.Default.SoundplorerReverseIDDisplayEndianness)
                        {
                            wemId = ReverseBytes(singleWemMetadata.Item1).ToString("X8") + " (Reversed)";
                        }
                        string wemName = "Embedded WEM 0x" + wemId;// + "(" + singleWemMetadata.Item1 + ")";

                        /* //HIRC lookup, if I ever get around to supporting HIRC
                         * List<Tuple<string, int, double>> wemInfo;
                         * if (WemIdsToWwwiseEventIdMapping.TryGetValue(exportEntry, out wemInfo))
                         * {
                         *  var info = wemInfo.FirstOrDefault(x => x.Item2 == singleWemMetadata.Item1); //item2 in x = ID, singleWemMetadata.Item1 = ID
                         *  if (info != null)
                         *  {
                         *      //have info
                         *      wemName = info.Item1;
                         *  }
                         * }*/
                        EmbeddedWEMFile wem = new EmbeddedWEMFile(wemData, i + ": " + wemName, exportEntry.FileRef.Game, singleWemMetadata.Item1);
                        if (wemHeader == "RIFF")
                        {
                            ExportInformationList.Add(wem);
                        }
                        else
                        {
                            ExportInformationList.Add(i + ": " + wemName + " - No RIFF header");
                        }
                        AllWems.Add(wem);
                        i++;
                    }
                }
                else
                {
                    ExportInformationList.Add("This soundbank has no embedded WEM files");
                }
                CurrentLoadedExport = exportEntry;
            }
        }