Exemplo n.º 1
0
        public RenderAudioScene(Game game, string inputPath, string outputPath)
            : base(game, false)
        {
            if (string.IsNullOrEmpty(outputPath))
            {
                Log.Error("Output is missing");
                return;
            }

            Chart chart = Chart.Load(inputPath);

            chart.GenerateEvents();

            if (string.IsNullOrWhiteSpace(Path.GetExtension(outputPath)))
            {
                outputPath += ".wav";
            }

            // preload all audio
            Loader loader = new Loader(chart, audio);

            loader.PreloadAll(true, false);

            songPlayer = new BGM(chart, audio);
            autoplay   = new Player(chart, audio, null, null);

            songPlayer.realtime = false;
            autoplay.realtime   = false;

            autoplay.autoplay = true;

            songPlayer.StartPlayer();
            autoplay.StartPlayer();

            songPlayer.Update(1.0f);
            autoplay.Update(1.0f);

            if (songPlayer.playing || autoplay.playing)
            {
                throw new ApplicationException("Players did not finish as expected");
            }

            Log.Info("Rendering audio...");
            byte[] audioData = audio.RenderAudio();

            if (audioData.Length > 0)
            {
                Log.Info("Saving audio...");
                FFmpegHelper.SaveSound(outputPath,
                                       audioData, audioData.Length / 4, audio.audioSpec.freq);
            }
            else
            {
                Log.Warning("No audio was rendered");
            }
        }