예제 #1
0
        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);
        }
예제 #2
0
        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);
        }
예제 #3
0
        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());
        }