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)
                })
Пример #2
0
        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
                            }));
                        }
                    }