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); }
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); }
// 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) * { * } * } * * } */ }