Exemplo n.º 1
0
        public void export_playlist(uint playlist_id)
        {
            if (playlist_id < 1 || playlist_id > 0xFFFFFFFF)
            {
                Console.WriteLine("Soundbank : Invalid playlist ID in export");
                return;
            }

            SBObject playlist = null;

            foreach (var obj in _objects._objects)
            {
                if (obj._type == SBObject.TYPE_MUSIC_PLAYLIST)
                {
                    if (obj._id == playlist_id)
                    {
                        playlist = obj;
                        break;
                    }
                }
            }

            if (playlist == null)
            {
                Console.WriteLine("Playlist " + playlist_id + " not found within soundbank");
                return;
            }

            var playlist_file = playlist_id + "_playlist.ini";

            playlist._obj_mpo.export(playlist_file);
        }
Exemplo n.º 2
0
        public uint add_music(string file)
        {
            string s   = Path.GetFileNameWithoutExtension(file);
            uint   mid = 0;

            if (!uint.TryParse(s, out mid))
            {
                Console.WriteLine("Soundbank : add_music -- Invalid WEM ID");
                Environment.Exit(0);
            }
            if (mid < 1 || mid > 0xFFFFFFFF)
            {
                Console.WriteLine("Soundbank : add_music -- Invalid WEM ID");
                Environment.Exit(0);
            }

            WemFile wem = new WemFile();

            wem.LoadFromFile(file, WwAudioFileType.Wem);

            double   new_time = (wem.sample_count / wem.sample_rate) * 1000;
            SBObject segment  = null;

            foreach (var obj in _objects._objects)
            {
                if (obj._type == SBObject.TYPE_MUSIC_TRACK)
                {
                    if (obj._obj_mto._id1 == mid)
                    {
                        Console.WriteLine("Add new music : ID " + mid + " is already used");
                        Environment.Exit(0);
                    }
                }
                else if (obj._type == SBObject.TYPE_MUSIC_SEGMENT)
                {
                    if (segment == null)
                    {
                        segment = obj;
                    }
                }
            }
            if (segment != null)
            {
                Console.WriteLine("No music segments within the soundbank");
                Environment.Exit(0);
            }

            uint     musicTrackId     = _objects.get_new_id();
            SBObject musicTrackObject = new SBObject();

            musicTrackObject._type           = SBObject.TYPE_MUSIC_TRACK;
            musicTrackObject._id             = musicTrackId;
            musicTrackObject._obj_mto_custom = new SBMusicTrackCustomObject(mid, new_time, 0);
            musicTrackObject._current_obj    = "MusicTrackCustom";
            musicTrackObject.calculateLength();

            _objects._objects.Add(musicTrackObject);

            uint musicSegmentId = _objects.get_new_id();

            musicTrackObject._obj_mto_custom._parent = musicSegmentId;

            SBObject musicSegmentObject = segment;

            musicSegmentObject._id = musicSegmentId;
            musicSegmentObject._obj_mso._children  = 1;
            musicSegmentObject._obj_mso._child_ids = new List <uint>();
            musicSegmentObject._obj_mso._child_ids.Add(musicTrackId);
            musicSegmentObject._obj_mso._unk_double_1               = 1000;
            musicSegmentObject._obj_mso._unk_field64_1              = 0;
            musicSegmentObject._obj_mso._unk_field64_2              = 0;
            musicSegmentObject._obj_mso._time_length                = new_time;
            musicSegmentObject._obj_mso._time_length_next           = new_time;
            musicSegmentObject._obj_mso._sound_structure._parent_id = 0;
            musicSegmentObject.calculateLength();

            _objects._objects.Add(musicSegmentObject);
            _objects.calculate_length();

            return(musicSegmentId);
        }
Exemplo n.º 3
0
        // need to check for moveSegment
        public void reimport_playlist(uint playlist_id)
        {
            if (playlist_id < 1 || playlist_id > 0xFFFFFFFF)
            {
                Console.WriteLine("Soundbank : Invalid playlist ID in reimport");
                return;
            }

            SBObject    playlist       = null;
            int         playlistIdx    = -1;
            int         i              = 0;
            List <uint> playlistSegids = new List <uint>();

            foreach (var obj in _objects._objects)
            {
                if (obj._type == SBObject.TYPE_MUSIC_PLAYLIST)
                {
                    if (obj._id == playlist_id)
                    {
                        playlist       = obj;
                        playlistIdx    = i;
                        playlistSegids = obj._obj_mpo._segment_ids;
                        break;
                    }
                }
                i++;
            }
            if (playlist == null)
            {
                Console.WriteLine("Playlist " + playlist_id + " not found within soundbank");
                return;
            }

            var         playlist_file = playlist_id + "_playlist.ini";
            List <uint> moveSegs      = playlist._obj_mpo.reimport(playlist_file);

            playlist.calculateLength();

            /*
             * if(moveSegs != null && moveSegs.Count > 0)
             * {
             *  SBObject baseSeg = null;
             *  foreach(var obj in _objects._objects)
             *  {
             *      if(obj._type == SBObject.TYPE_MUSIC_SEGMENT)
             *      {
             *          if(playlistSegids.Contains(obj._id) && !moveSegs.Contains(obj._id))
             *          {
             *              baseSeg = obj;
             *              break;
             *          }
             *      }
             *  }
             *
             *  if(baseSeg == null)
             *  {
             *      Console.WriteLine("Soundbank : No base segment within playlist");
             *      return;
             *  }
             *  foreach(var segid in moveSegs)
             *  {
             *      i = 0;
             *      SBObject segment = null;
             *      int segmentIdx = -1;
             *      foreach(var obj in _objects._objects)
             *      {
             *          if(obj._type == SBObject.TYPE_MUSIC_SEGMENT && obj._id == segid)
             *          {
             *              segment = obj;
             *              segmentIdx = i;
             *              break;
             *          }
             *      }
             *      if(segment == null)
             *      {
             *          Console.WriteLine("Soundbank : Failed to find playlist's music segment within soundbank");
             *          return;
             *      }
             *      if (segmentIdx < playlistIdx)
             *          continue;
             *
             *      SBObject seg = baseSeg;
             *      seg._id = segment._id;
             *      seg._obj_mso._children = segment._obj_mso._children;
             *      seg._obj_mso._child_ids = segment._obj_mso._child_ids;
             *      seg._obj_mso._unk_double_1 = segment._obj_mso._unk_double_1;
             *      seg._obj_mso._unk_field64_1 = segment._obj_mso._unk_field64_1;
             *      seg._obj_mso._unk_field64_2 = segment._obj_mso._unk_field64_2;
             *      seg._obj_mso._time_length = segment._obj_mso._time_length;
             *      seg._obj_mso._time_length_next = segment._obj_mso._time_length_next;
             *      seg.calculateLength();
             *      segment = seg;
             *
             *      List<int> tracks = new List<int>();
             *      i = 0;
             *      foreach(var obj in _objects._objects)
             *      {
             *      }
             *  }
             *
             * }
             */
        }