Пример #1
0
        public void BcstmBuildAndParseEqualPcm8(int numChannels)
        {
            Pcm8SignedFormat audio = GenerateAudio.GeneratePcm8SignedSineWave(BuildParseTestOptions.Samples, numChannels, BuildParseTestOptions.SampleRate);
            var writer             = new BCFstmWriter(NwTarget.Ctr)
            {
                Configuration = { Codec = NwCodec.Pcm8Bit }
            };

            BuildParseTests.BuildParseCompareAudio(audio, writer, new BCFstmReader());
        }
Пример #2
0
        public byte[] Save()
        {
            var writer = new BCFstmWriter(NwTarget.Ctr);

            writer.Configuration = new BxstmConfiguration()
            {
                Endianness = VGAudio.Utilities.Endianness.LittleEndian,
            };

            return(writer.GetFile(audioData, writer.Configuration));
        }
Пример #3
0
        public void Save(System.IO.Stream stream)
        {
            var audioWriter = new BCFstmWriter(NwTarget.Ctr);

            audioWriter.Configuration = new BxstmConfiguration()
            {
                Endianness = VGAudio.Utilities.Endianness.LittleEndian,
            };

            using (var writer = new Toolbox.Library.IO.FileWriter(stream, true))
            {
                writer.Write(audioWriter.GetFile(audioData, audioWriter.Configuration));
            }
        }
Пример #4
0
        public void BcstmLoopAlignmentIsSet()
        {
            GcAdpcmFormat audio = GenerateAudio.GenerateAdpcmSineWave(BuildParseTestOptions.Samples, 1, BuildParseTestOptions.SampleRate);

            audio = audio.WithLoop(true, 1288, 16288);
            var writer = new BCFstmWriter(NwTarget.Ctr)
            {
                Configuration = { LoopPointAlignment = 700 }
            };

            byte[]       builtFile   = writer.GetFile(audio);
            IAudioFormat parsedAudio = new BCFstmReader().ReadFormat(builtFile);

            Assert.Equal(1400, parsedAudio.LoopStart);
            Assert.Equal(16400, parsedAudio.LoopEnd);
        }
Пример #5
0
        public static void ConvertWAVtoBFWAV(string input, string output)
        {
            byte[] fileAudioData  = File.ReadAllBytes(input);
            string fileAudioIdntr = ".wav";
            STRG   fileStrg       = new STRG();

            fileStrg.name = Path.GetFileNameWithoutExtension(input);

            if (fileAudioIdntr == ".wav")
            {
                FileStream   f      = File.Create(output);
                WaveReader   reader = new WaveReader();
                BCFstmWriter writer = new BCFstmWriter(NwTarget.Cafe);
                VGAudio.Formats.AudioData convertedWav = reader.Read(fileAudioData);
                writer.WriteToStream(convertedWav, f);
                f.Close();
            }
        }
Пример #6
0
        private static void ConvertSound(Sound sound)
        {
            if (!sound.HasStartFile && !sound.HasStartFile)
            {
                return;
            }

            FileInfo outFile = CurrentDirectory.GetDirectory("out").GetFile($"{sound.Name}.{Arguments.Format.ToString().ToLower()}");

            if (!Arguments.Overwrite && outFile.Exists)
            {
                return;
            }

            FileInfo tempWave = new FileInfo(Path.GetTempFileName());

            WaveReader reader = new WaveReader();
            AudioData  audio  = null;

            Console.WriteLine($"Processing {sound.Name}...");
            if (sound.HasStartFile && !sound.HasLoopFile)
            {
                using (VorbisWaveReader vorbisStart = new VorbisWaveReader(GameSounds.GetFile(sound.StartFileName).FullName))
                {
                    WaveFileWriter.CreateWaveFile(tempWave.FullName, vorbisStart.ToWaveProvider16());
                }
                using (FileStream stream = tempWave.OpenRead())
                {
                    audio = reader.Read(stream);
                }
            }
            else if (sound.HasStartFile && sound.HasLoopFile)
            {
                VorbisWaveReader vorbisStart = new VorbisWaveReader(GameSounds.GetFile(sound.StartFileName).FullName);
                VorbisWaveReader vorbisLoop  = new VorbisWaveReader(GameSounds.GetFile(sound.LoopFileName).FullName);
                if (vorbisStart.WaveFormat.SampleRate < vorbisLoop.WaveFormat.SampleRate)
                {
                    MediaFoundationResampler sampeler = new MediaFoundationResampler(vorbisStart, vorbisLoop.WaveFormat.SampleRate);
                    WaveFileWriter.CreateWaveFile(tempWave.FullName, sampeler.ToSampleProvider().FollowedBy(vorbisLoop).ToWaveProvider16());
                }
                else if (vorbisStart.WaveFormat.SampleRate > vorbisLoop.WaveFormat.SampleRate)
                {
                    MediaFoundationResampler sampeler = new MediaFoundationResampler(vorbisLoop, vorbisStart.WaveFormat.SampleRate);
                    WaveFileWriter.CreateWaveFile(tempWave.FullName, vorbisStart.FollowedBy(sampeler.ToSampleProvider()).ToWaveProvider16());
                }
                else
                {
                    WaveFileWriter.CreateWaveFile(tempWave.FullName, vorbisStart.FollowedBy(vorbisLoop).ToWaveProvider16());
                }
                VorbisReader dataStart = new VorbisReader(GameSounds.GetFile(sound.StartFileName).FullName);
                VorbisReader dataLoop  = new VorbisReader(GameSounds.GetFile(sound.LoopFileName).FullName);
                int          startLoop = (int)dataStart.TotalSamples;
                int          endLoop   = (int)dataStart.TotalSamples + (int)dataLoop.TotalSamples;
                vorbisStart.Dispose();
                vorbisLoop.Dispose();
                dataStart.Dispose();
                dataLoop.Dispose();
                using (FileStream stream = tempWave.OpenRead())
                {
                    audio = reader.Read(stream);
                }

                audio.SetLoop(true, startLoop, endLoop);
            }
            else if (!sound.HasStartFile && sound.HasLoopFile)
            {
                VorbisWaveReader vorbisLoop = new VorbisWaveReader(GameSounds.GetFile(sound.LoopFileName).FullName);
                WaveFileWriter.CreateWaveFile(tempWave.FullName, vorbisLoop.ToWaveProvider16());
                VorbisReader dataLoop     = new VorbisReader(GameSounds.GetFile(sound.LoopFileName).FullName);
                int          totalSamples = (int)dataLoop.TotalSamples;
                vorbisLoop.Dispose();
                dataLoop.Dispose();
                audio = reader.Read(tempWave.OpenRead());

                audio.SetLoop(true, 0, totalSamples);
            }

            if (audio != null)
            {
                BCFstmWriter writer = new BCFstmWriter(Arguments.Target);
                writer.Configuration.Codec      = Arguments.Codec;
                writer.Configuration.Endianness = Arguments.Endianness;
                using (FileStream stream = outFile.OpenWrite())
                {
                    writer.WriteToStream(audio, stream);
                }
            }
        }