public static void Run(MusicBoxConfiguration configuration) { var configFile = configuration.ConfigFile; var outputBlueprintFile = configuration.OutputBlueprint; var outputJsonFile = configuration.OutputJson; var outputConstantsFile = configuration.OutputConstants; var outputMidiEventsFile = configuration.OutputMidiEvents; var baseMetadataAddress = configuration.BaseMetadataAddress ?? 1; var constantsNamespace = configuration.ConstantsNamespace ?? "Music"; var config = LoadConfig(configFile); var playlists = config.Playlists .AsParallel() .Where(playlistConfig => !playlistConfig.Disabled) .Select(playlistConfig => new Playlist { Name = playlistConfig.Name, Songs = playlistConfig.Songs .SelectMany(songConfig => Path.GetExtension(songConfig.Source).ToLower() switch { ".yaml" => LoadConfig(songConfig.Source).Playlists.Find(playlist => playlist.Name == songConfig.SourcePlaylist)?.Songs ?? Enumerable.Empty <SongConfig>(), _ => Enumerable.Repeat(songConfig, 1) })
public static void Run(MusicBoxConfiguration configuration) { var configFile = configuration.ConfigFile; var outputBlueprintFile = configuration.OutputBlueprint; var outputJsonFile = configuration.OutputJson; var outputConstantsFile = configuration.OutputConstants; var outputMidiEventsFile = configuration.OutputMidiEvents; var baseAddress = configuration.BaseAddress ?? 1; var baseNoteAddress = configuration.BaseNoteAddress ?? 1 << NoteGroupAddressBits; var baseMetadataAddress = configuration.BaseMetadataAddress ?? 1; var snapToGrid = configuration.SnapToGrid; var x = configuration.X; var y = configuration.Y; var width = configuration.Width ?? 16; var height = configuration.Height ?? 16; var cellSize = configuration.CellSize ?? 1; var volumeLevels = configuration.VolumeLevels ?? 10; var minVolume = configuration.MinVolume ?? 0.1; var maxVolume = configuration.MaxVolume ?? 1; var constantsNamespace = configuration.ConstantsNamespace ?? "Music"; var config = LoadConfig(configFile); var playlists = config.Playlists .AsParallel() .Where(playlistConfig => !playlistConfig.Disabled) .Select(playlistConfig => new Playlist { Name = playlistConfig.Name, Songs = playlistConfig.Songs .SelectMany(song => { if (song.Source.Contains("*")) { var directoryName = Path.GetDirectoryName(song.Source); var fileName = Path.GetFileName(song.Source); var files = Directory.GetFiles(directoryName, fileName); if (files.Length > 1) { return(files.OrderBy(file => file) .Select((source, index) => song with { Name = $"{song.Name}Part{index + 1}", DisplayName = song.DisplayName != null ? $"{song.DisplayName} (Part {index + 1})" : null, Source = source, Gapless = index < files.Length - 1 || song.Gapless })); } }