public static AudioFormat GetAudioFormat(SongData song) { AudioFormat format = new AudioFormat(); SongsDTA dta = GetSongsDTA(song); if (dta == null) { return(null); } bool notracks = dta.Song.Tracks.Sum(t => t.Tracks.Count) == 0; for (int i = 0; i < dta.Song.Vols.Count; i++) { AudioFormat.Mapping map = new AudioFormat.Mapping(); map.Balance = dta.Song.Pans[i]; map.Volume = dta.Song.Vols[i]; SongsDTA.SongTracks track = dta.Song.Tracks.SingleOrDefault(s => s.Tracks.Contains(i)); if (track != null) { map.Instrument = Platform.InstrumentFromString(track.Name); } else if (notracks && dta.Song.Cores[i] == 1) { map.Instrument = Instrument.Guitar; } format.Mappings.Add(map); } return(format); }
public static SongsDTA GetSongsDTA(SongData song, AudioFormat audioformat, bool idioticdrums = true) { SongsDTA dta = HarmonixMetadata.GetSongData(song); dta.Downloaded = true; if ((dta.Decade == null || dta.Decade.Length == 0) && dta.Year.ToString().Length > 2) { dta.Decade = "the" + dta.Year.ToString()[2] + "0s"; } dta.BaseName = "rwk" + dta.Version.ToString() + dta.BaseName; dta.Genre = ImportMap.GetShortGenre(dta.Genre); dta.Song.Cores.Clear(); dta.Song.Pans.Clear(); dta.Song.Vols.Clear(); foreach (SongsDTA.SongTracks track in dta.Song.Tracks) { track.Tracks.Clear(); } dta.Song.TracksCount.Clear(); var maps = audioformat.Mappings.Where(m => m.Instrument != Instrument.Preview).ToList(); foreach (AudioFormat.Mapping map in maps) { dta.Song.Cores.Add(map.Instrument == Instrument.Guitar ? 1 : -1); dta.Song.Pans.Add(map.Balance); dta.Song.Vols.Add(map.Volume); SongsDTA.SongTracks track = dta.Song.Tracks.FirstOrDefault(t => t.Name == HarmonixMetadata.InstrumentToString(map.Instrument)); if (track != null) { track.Tracks.Add(maps.IndexOf(map)); } } if (idioticdrums) { // For safety with customs messing with mix and not knowing what they're doing SongsDTA.SongTracks drumtrack = dta.Song.Tracks.FirstOrDefault(t => t.Name == "drum"); while (drumtrack != null && drumtrack.Tracks.Count > 0 && drumtrack.Tracks.Count < 6) { drumtrack.Tracks.Add(drumtrack.Tracks[drumtrack.Tracks.Count - 1]); } } return(dta); }
public static void SaveAudioFormat(AudioFormat data, FormatData destination, int id) { SongsDTA dta = new SongsDTA(); for (int i = 0; i < data.Channels; i++) { AudioFormat.Mapping map = data.Mappings[i]; dta.Song.Vols.Add(map.Volume); dta.Song.Pans.Add(map.Balance); dta.Song.Cores.Add(map.Instrument == Instrument.Guitar ? 1 : -1); string trackname = InstrumentToString(map.Instrument); SongsDTA.SongTracks track = dta.Song.Tracks.SingleOrDefault(t => t.Name == trackname); if (track != null) { track.Tracks.Add(i); } } destination.Song.Data.SetSubtree("HmxSongsDtb", dta.ToDTB()); }