コード例 #1
0
        public void TestNoiseVocodedSpeech()
        {
            Calibration.Initialize();

            string speechFile = DataManagement.PathForDataFile("Test", "000000.wav");

            if (!File.Exists(speechFile))
            {
                throw new Exception($"Test utilizes CRM missing sentence: {speechFile}");
            }

            WaveEncoding.LoadBGCStream(
                filepath: speechFile,
                stream: out IBGCStream speechStream);

            bool success = WaveEncoding.SaveStream(
                filepath: DataManagement.PathForDataFile("Test", "06BandVocoding.wav"),
                stream: speechStream.NoiseVocode(bandCount: 6).Cache().SlowRangeFitter(),
                overwrite: true);

            success |= WaveEncoding.SaveStream(
                filepath: DataManagement.PathForDataFile("Test", "11BandVocoding.wav"),
                stream: speechStream.NoiseVocode(bandCount: 11).Cache().SlowRangeFitter(),
                overwrite: true);


            success |= WaveEncoding.SaveStream(
                filepath: DataManagement.PathForDataFile("Test", "22BandVocoding.wav"),
                stream: speechStream.NoiseVocode(bandCount: 22).Cache().SlowRangeFitter(),
                overwrite: true);

            Assert.IsTrue(success);
        }
コード例 #2
0
        public void TestHiHat()
        {
            string closedFile = DataManagement.PathForDataFile("Test", "ClosedHiHat.wav");

            Assert.IsTrue(WaveEncoding.SaveStream(
                              filepath: closedFile,
                              stream: InstrumentLookup.GetPercussion(PercussionMap.ClosedHiHat, 0xF7)
                              .SafeCache()
                              .SlowRangeFitter(),
                              overwrite: true));

            string pedalFile = DataManagement.PathForDataFile("Test", "PedalHiHat.wav");

            Assert.IsTrue(WaveEncoding.SaveStream(
                              filepath: pedalFile,
                              stream: InstrumentLookup.GetPercussion(PercussionMap.PedalHiHat, 0xF7)
                              .SafeCache()
                              .SlowRangeFitter(),
                              overwrite: true));

            string openFile = DataManagement.PathForDataFile("Test", "OpenHiHat.wav");

            Assert.IsTrue(WaveEncoding.SaveStream(
                              filepath: openFile,
                              stream: InstrumentLookup.GetPercussion(PercussionMap.OpenHiHat, 0xF7)
                              .SafeCache()
                              .SlowRangeFitter(),
                              overwrite: true));
        }
コード例 #3
0
        public void TestSnare()
        {
            string saveFile = DataManagement.PathForDataFile("Test", "SnareTest.wav");

            Assert.IsTrue(WaveEncoding.SaveStream(
                              filepath: saveFile,
                              stream: InstrumentLookup.GetPercussion(PercussionMap.AcousticSnare, 0xF7)
                              .Normalize(80f)
                              .Window(1f)
                              .Center(1.5f),
                              overwrite: true));
        }
コード例 #4
0
        public void TestNewSpatialization()
        {
            string baseFile = "000000";

            WaveEncoding.LoadBGCStream(
                filepath: DataManagement.PathForDataFile("Test", $"{baseFile}.wav"),
                stream: out IBGCStream stream);

            Debug.Log($"Pre  RMS: {string.Join(", ", stream.CalculateRMS().Select(x => x.ToString()).ToArray())}");

            {
                IBGCStream spatialized = stream.Spatialize(0f);

                string rms = string.Join(", ", spatialized.CalculateRMS().Select(x => x.ToString()).ToArray());

                Debug.Log($"Post RMS: {rms}");

                //Write to File
                WaveEncoding.SaveStream(
                    filepath: DataManagement.PathForDataFile("Test", $"{baseFile}_Spatialized_0.wav"),
                    stream: spatialized,
                    overwrite: true);
            }

            {
                IBGCStream spatialized = stream.Spatialize(25f);

                string rms = string.Join(", ", spatialized.CalculateRMS().Select(x => x.ToString()).ToArray());

                Debug.Log($"Post RMS: {rms}");

                //Write to File
                WaveEncoding.SaveStream(
                    filepath: DataManagement.PathForDataFile("Test", $"{baseFile}_Spatialized_25.wav"),
                    stream: spatialized,
                    overwrite: true);
            }

            {
                IBGCStream spatialized = stream.Spatialize(-25f);

                string rms = string.Join(", ", spatialized.CalculateRMS().Select(x => x.ToString()).ToArray());

                Debug.Log($"Post RMS: {rms}");

                //Write to File
                WaveEncoding.SaveStream(
                    filepath: DataManagement.PathForDataFile("Test", $"{baseFile}_Spatialized_n25.wav"),
                    stream: spatialized,
                    overwrite: true);
            }
        }
コード例 #5
0
        public void TestCarrierModifiedFakeVoices()
        {
            Calibration.Initialize();

            // F2: 500
            // F3: 1000
            // F4: 2000

            double qFactor = 200;

            Func <IBGCStream> makeCarrierA = () =>
                                             new AnalyticNoiseStream(
                rms: 1.0,
                freqLB: 20,
                freqUB: 10000,
                frequencyCount: 10000,
                distribution: AnalyticNoiseStream.AmplitudeDistribution.Brown)
                                             .ToBGCStream();

            Func <IBGCStream> makeCarrierB = () =>
                                             new SawtoothWave(
                amplitude: 1.0,
                frequency: 120);

            Func <IBGCStream>[] carrierFuncs = new Func <IBGCStream>[]
            {
                makeCarrierA,
                makeCarrierB
            };

            for (int i = 0; i < 2; i++)
            {
                for (int j = 0; j < 2; j++)
                {
                    WaveEncoding.SaveStream(
                        filepath: DataManagement.PathForDataFile("Test", $"testVoice{i}{j}.wav"),
                        stream: new StreamAdder(
                            carrierFuncs[i]()
                            .BiQuadBandpassFilter(
                                centralFrequency: 500,
                                qFactor: qFactor),
                            carrierFuncs[j]()
                            .BiQuadBandpassFilter(
                                centralFrequency: 1500,
                                qFactor: qFactor))
                        .Window(0.5)
                        .SlowRangeFitter(),
                        overwrite: true);
                }
            }
        }
コード例 #6
0
        public void TestTriangleWave()
        {
            Calibration.Initialize();

            IBGCStream stream =
                new TriangleWave(1f, 440f)
                .Window(DURATION)
                .Normalize(LEVEL);

            bool success = WaveEncoding.SaveStream(
                filepath: DataManagement.PathForDataFile("Test", "triangleWave.wav"),
                stream: stream,
                overwrite: true);

            Assert.IsTrue(success);
        }
コード例 #7
0
        public void UpScalingTest()
        {
            float[] singleChannelSamples = CreateSineWave(1, 22050f);
            string  upscaledFile         = DataManagement.PathForDataFile("Test", "upscaled.wav");

            IBGCStream stream = new SimpleAudioClip(
                samples: LinearInterpolation.FactorUpscaler(
                    samples: singleChannelSamples,
                    factor: 2,
                    channels: 1),
                channels: 1);

            Assert.IsTrue(WaveEncoding.SaveStream(
                              filepath: upscaledFile,
                              stream: stream,
                              overwrite: true));
        }
コード例 #8
0
        public void TestPulses()
        {
            Calibration.Initialize();

            double[] dutyCycles = new double[] { 0.1, 0.25, 0.5, 0.75, 0.9 };

            foreach (double dutyCycle in dutyCycles)
            {
                string saveFile = DataManagement.PathForDataFile("Test", $"squareWave({dutyCycle}).wav");

                Assert.IsTrue(WaveEncoding.SaveStream(
                                  filepath: saveFile,
                                  stream: new SquareWave(1.0, 400, dutyCycle)
                                  .Window(3.0),
                                  overwrite: true));
            }
        }
コード例 #9
0
        public void TestGuitar()
        {
            Calibration.Initialize();

            for (int octave = 2; octave <= 4; octave++)
            {
                string guitarFile = DataManagement.PathForDataFile("Test", $"guitarE{octave}.wav");

                Assert.IsTrue(WaveEncoding.SaveStream(
                                  filepath: guitarFile,
                                  stream: InstrumentLookup.GetNote(
                                      set: ReservedSoundSet.ElectricGuitar_Jazz,
                                      note: (byte)(12 * octave + 4),
                                      velocity: 0xF7)
                                  .SafeCache()
                                  .SlowRangeFitter(),
                                  overwrite: true));
            }
        }
コード例 #10
0
        public void TestRenderToccataMidi()
        {
            Calibration.Initialize();

            string loadFile = DataManagement.PathForDataFile("Test", "toccata1.mid");
            string saveFile = DataManagement.PathForDataFile("Test", "toccata1.wav");

            Assert.IsTrue(MidiEncoding.LoadFile(
                              filePath: loadFile,
                              midiFile: out MidiFile midiFile,
                              retainAll: true));

            Assert.IsTrue(WaveEncoding.SaveStream(
                              filepath: saveFile,
                              stream: new SlowRangeFitterFilter(new MidiFileStream(midiFile).SafeCache()),
                              overwrite: true));


            Assert.IsTrue(File.Exists(saveFile));
        }
コード例 #11
0
        public void TestBiQuadFilters()
        {
            Calibration.Initialize();

            {
                //Bandpass Filtered Sine Wave, Matched Frequency
                IBGCStream stream =
                    new SquareWave(1f, 400f)
                    .BiQuadBandpassFilter(400f)
                    .Window(DURATION)
                    .Normalize(LEVEL);

                bool success = WaveEncoding.SaveStream(
                    filepath: DataManagement.PathForDataFile("Test", "BiQuadMostThroughBandWave.wav"),
                    stream: stream,
                    overwrite: true);

                Assert.IsTrue(success);
            }

            {
                //Bandpass Filtered Sine Wave, 2x Frequency
                IBGCStream stream =
                    new SquareWave(1f, 400f)
                    .BiQuadBandpassFilter(800f)
                    .Window(DURATION)
                    .Normalize(LEVEL);

                bool success = WaveEncoding.SaveStream(
                    filepath: DataManagement.PathForDataFile("Test", "BiQuadTooHighBandWave.wav"),
                    stream: stream,
                    overwrite: true);

                Assert.IsTrue(success);
            }
            {
                //Bandpass Filtered Sine Wave, Half Frequency
                IBGCStream stream =
                    new SquareWave(1f, 400f)
                    .BiQuadBandpassFilter(200f)
                    .Window(DURATION)
                    .Normalize(LEVEL);

                bool success = WaveEncoding.SaveStream(
                    filepath: DataManagement.PathForDataFile("Test", "BiQuadTooLowBandWave.wav"),
                    stream: stream,
                    overwrite: true);

                Assert.IsTrue(success);
            }

            {
                //Notch Filtered Square Wave, Matched Frequency
                IBGCStream stream =
                    new SquareWave(1f, 400f)
                    .BiQuadNotchFilter(400f)
                    .Window(DURATION)
                    .Normalize(LEVEL);

                bool success = WaveEncoding.SaveStream(
                    filepath: DataManagement.PathForDataFile("Test", "BiQuadNotchFilteredSquareWave.wav"),
                    stream: stream,
                    overwrite: true);

                Assert.IsTrue(success);
            }

            {
                //Notch Filtered Sine Wave, Matched Frequency
                IBGCStream stream =
                    new SineWave(1f, 400f)
                    .BiQuadNotchFilter(400f)
                    .Window(DURATION)
                    .Normalize(LEVEL);

                bool success = WaveEncoding.SaveStream(
                    filepath: DataManagement.PathForDataFile("Test", "BiQuadNotchFilteredSineWave.wav"),
                    stream: stream,
                    overwrite: true);

                Assert.IsTrue(success);
            }

            {
                //Notch Filtered Sine Wave, +10 Hz Mismatch
                IBGCStream stream =
                    new SineWave(1f, 400f)
                    .BiQuadNotchFilter(410f)
                    .Window(DURATION)
                    .Normalize(LEVEL);

                bool success = WaveEncoding.SaveStream(
                    filepath: DataManagement.PathForDataFile("Test", "BiQuadNotchFiltered410SineWave.wav"),
                    stream: stream,
                    overwrite: true);

                Assert.IsTrue(success);
            }
        }
コード例 #12
0
        public void TestFakeVoice()
        {
            Calibration.Initialize();

            // F2: 500
            // F3: 1000
            // F4: 2000

            double qFactor = 100;

            //IBGCStream f2 = new AnalyticNoiseStream(
            //    rms: 1.0,
            //    freqLB: 20,
            //    freqUB: 10000,
            //    frequencyCount: 10000,
            //    distribution: AnalyticNoiseStream.AmplitudeDistribution.Pink)
            //    .ToBGCStream()
            //    .ContinuousFilter(
            //        envelopeStream: new Audio.Envelopes.SigmoidEnvelope(2.0),
            //        filterType: ContinuousFilter.FilterType.BandPass,
            //        freqLB: 500,
            //        freqUB: 540,
            //        qFactor: 100.0);


            //Func<IBGCStream> makeCarrier = () =>
            //new AnalyticNoiseStream(
            //        rms: 1.0,
            //        freqLB: 20,
            //        freqUB: 10000,
            //        frequencyCount: 10000,
            //        distribution: AnalyticNoiseStream.AmplitudeDistribution.Brown)
            //    .ToBGCStream();

            //Func<IBGCStream> makeCarrier = () =>
            //    new SawtoothWave(
            //            amplitude: 1.0,
            //            frequency: 120);

            Func <IBGCStream> makeCarrier = () =>
                                            new StreamAdder(
                new SawtoothWave(
                    amplitude: 1.0,
                    frequency: 120),
                new AnalyticNoiseStream(
                    rms: 0.2,
                    freqLB: 20,
                    freqUB: 10000,
                    frequencyCount: 10000,
                    distribution: AnalyticNoiseStream.AmplitudeDistribution.Brown)
                .ToBGCStream());

            //Func<IBGCStream> makeCarrier = () =>
            //    new SquareWave(
            //        1.0,
            //        280.0,
            //        0.1);

            IBGCStream f2 = makeCarrier()
                            .ContinuousFilter(
                envelopeStream: new Audio.Envelopes.EnvelopeConcatenator(
                    new Audio.Envelopes.SigmoidEnvelope(0.1),
                    new Audio.Envelopes.ConstantEnvelope(1.0, 0.1)),
                filterType: ContinuousFilter.FilterType.BandPass,
                freqLB: 400,
                freqUB: 700,
                qFactor: qFactor);

            IBGCStream f3 = makeCarrier()
                            .ContinuousFilter(
                envelopeStream: new Audio.Envelopes.LinearEnvelope(0.05, 0.15),
                filterType: ContinuousFilter.FilterType.BandPass,
                freqLB: 1500,
                freqUB: 1000,
                qFactor: qFactor);

            IBGCStream f4 = makeCarrier()
                            .ContinuousFilter(
                envelopeStream: new Audio.Envelopes.ConstantEnvelope(1.0, 0.2),
                filterType: ContinuousFilter.FilterType.BandPass,
                freqLB: 2000,
                freqUB: 2000,
                qFactor: qFactor);

            IBGCStream fakeVoice = new StreamAdder(f2, f3, f4)
                                   .Window(.2)
                                   .Center(1)
                                   .SlowRangeFitter();

            WaveEncoding.SaveStream(
                filepath: DataManagement.PathForDataFile("Test", "testVoice.wav"),
                stream: fakeVoice);
        }
コード例 #13
0
        public void TestFunFakeVoice()
        {
            Calibration.Initialize();

            // F2: 500
            // F3: 1000
            // F4: 2000

            double qFactor = 200;

            //IBGCStream f2 = new AnalyticNoiseStream(
            //    rms: 1.0,
            //    freqLB: 20,
            //    freqUB: 10000,
            //    frequencyCount: 10000,
            //    distribution: AnalyticNoiseStream.AmplitudeDistribution.Pink)
            //    .ToBGCStream()
            //    .ContinuousFilter(
            //        envelopeStream: new Audio.Envelopes.SigmoidEnvelope(2.0),
            //        filterType: ContinuousFilter.FilterType.BandPass,
            //        freqLB: 500,
            //        freqUB: 540,
            //        qFactor: 100.0);


            //Func<IBGCStream> makeCarrier = () =>
            //new AnalyticNoiseStream(
            //        rms: 1.0,
            //        freqLB: 20,
            //        freqUB: 10000,
            //        frequencyCount: 10000,
            //        distribution: AnalyticNoiseStream.AmplitudeDistribution.Brown)
            //    .ToBGCStream();

            //Func<IBGCStream> makeCarrier = () =>
            //    new SawtoothWave(
            //            amplitude: 1.0,
            //            frequency: 120);

            Func <IBGCStream> makeCarrier = () =>
                                            new StreamAdder(
                new SawtoothWave(
                    amplitude: 1.0,
                    frequency: 120),
                new AnalyticNoiseStream(
                    rms: 0.2,
                    freqLB: 20,
                    freqUB: 10000,
                    frequencyCount: 10000,
                    distribution: AnalyticNoiseStream.AmplitudeDistribution.Brown)
                .ToBGCStream());

            //Func<IBGCStream> makeCarrier = () =>
            //    new SquareWave(
            //        1.0,
            //        280.0,
            //        0.1);

            //IBGCStream f2 = makeCarrier()
            //    .ContinuousFilter(
            //        envelopeStream: new SineWave(1.0, 4),
            //        filterType: ContinuousFilter.FilterType.BandPass,
            //        freqLB: 1500,
            //        freqUB: 1000,
            //        qFactor: qFactor);

            {
                IBGCStream f1 = makeCarrier()
                                .BiQuadBandpassFilter(
                    centralFrequency: 500,
                    qFactor: qFactor);

                IBGCStream f2 = makeCarrier()
                                .BiQuadBandpassFilter(
                    centralFrequency: 1500,
                    qFactor: qFactor);

                IBGCStream fakeVoice = new StreamAdder(f1, f2)
                                       .Window(0.2)
                                       .Center(0.5)
                                       .SlowRangeFitter();

                WaveEncoding.SaveStream(
                    filepath: DataManagement.PathForDataFile("Test", "testVoiceA.wav"),
                    stream: fakeVoice,
                    overwrite: true);
            }

            {
                IBGCStream f1 = makeCarrier()
                                .BiQuadBandpassFilter(
                    centralFrequency: 750,
                    qFactor: qFactor);

                IBGCStream f2 = makeCarrier()
                                .BiQuadBandpassFilter(
                    centralFrequency: 2000,
                    qFactor: qFactor);

                IBGCStream fakeVoice = new StreamAdder(f1, f2)
                                       .Window(0.2)
                                       .Center(0.5)
                                       .SlowRangeFitter();

                WaveEncoding.SaveStream(
                    filepath: DataManagement.PathForDataFile("Test", "testVoiceB.wav"),
                    stream: fakeVoice,
                    overwrite: true);
            }
        }
コード例 #14
0
        public void TestContinuousFilter()
        {
            Calibration.Initialize();

            IBGCStream noiseStream = new NoiseAudioClip(
                duration: 4,
                rms: 1.0,
                freqLB: 20.0,
                freqUB: 10000.0,
                frequencyCount: 10000,
                distribution: NoiseAudioClip.AmplitudeDistribution.Pink);


            for (ContinuousFilter.FilterType filter = 0; filter < ContinuousFilter.FilterType.MAX; filter++)
            {
                WaveEncoding.SaveStream(
                    filepath: DataManagement.PathForDataFile("Test", $"Sigmoid{filter}FilteredNoise.wav"),
                    stream: new ContinuousFilter(
                        stream: noiseStream,
                        filterEnvelope: new SigmoidEnvelope(4.0, 1.0),
                        filterType: filter,
                        freqLB: 20,
                        freqUB: 10000)
                    .Normalize(80),
                    overwrite: true);

                WaveEncoding.SaveStream(
                    filepath: DataManagement.PathForDataFile("Test", $"Linear{filter}FilteredNoise.wav"),
                    stream: new ContinuousFilter(
                        stream: noiseStream,
                        filterEnvelope: new LinearEnvelope(4.0),
                        filterType: filter,
                        freqLB: 20,
                        freqUB: 10000)
                    .Normalize(80),
                    overwrite: true);

                WaveEncoding.SaveStream(
                    filepath: DataManagement.PathForDataFile("Test", $"SlowSine{filter}FilteredNoise.wav"),
                    stream: new ContinuousFilter(
                        stream: noiseStream,
                        filterEnvelope: new SineWave(1.0, 1.0),
                        filterType: filter,
                        freqLB: 20,
                        freqUB: 10000)
                    .Normalize(80),
                    overwrite: true);

                WaveEncoding.SaveStream(
                    filepath: DataManagement.PathForDataFile("Test", $"FastSine{filter}FilteredNoise.wav"),
                    stream: new ContinuousFilter(
                        stream: noiseStream,
                        filterEnvelope: new SineWave(1.0, 50.0),
                        filterType: filter,
                        freqLB: 20,
                        freqUB: 10000)
                    .Normalize(80),
                    overwrite: true);

                WaveEncoding.SaveStream(
                    filepath: DataManagement.PathForDataFile("Test", $"SlowTriangle{filter}FilteredNoise.wav"),
                    stream: new ContinuousFilter(
                        stream: noiseStream,
                        filterEnvelope: new TriangleWave(1.0, 1.0),
                        filterType: filter,
                        freqLB: 20,
                        freqUB: 10000)
                    .Normalize(80),
                    overwrite: true);

                WaveEncoding.SaveStream(
                    filepath: DataManagement.PathForDataFile("Test", $"FastTriangle{filter}FilteredNoise.wav"),
                    stream: new ContinuousFilter(
                        stream: noiseStream,
                        filterEnvelope: new TriangleWave(1.0, 50.0),
                        filterType: filter,
                        freqLB: 20,
                        freqUB: 10000)
                    .Normalize(80),
                    overwrite: true);
            }
        }
コード例 #15
0
        public void TestNewConvolution()
        {
            string baseFile = "000000";

            WaveEncoding.LoadBGCStream(
                filepath: DataManagement.PathForDataFile("Test", $"{baseFile}.wav"),
                stream: out IBGCStream stream);

            Debug.Log($"Pre  RMS: {string.Join(", ", stream.CalculateRMS().Select(x => x.ToString()).ToArray())}");

            {
                float[] filter1 = new float[150];
                filter1[25] = 1f;


                float[] filter2 = new float[150];

                for (int i = 0; i < 150; i++)
                {
                    filter2[i] = 1f / (float)Math.Sqrt(150);
                }

                IBGCStream convolved = stream.MultiConvolve(filter1, filter2);


                string rms = string.Join(", ", convolved.CalculateRMS().Select(x => x.ToString()).ToArray());

                Debug.Log($"Post RMS: {rms}");

                //Write to File
                WaveEncoding.SaveStream(
                    filepath: DataManagement.PathForDataFile("Test", $"{baseFile}_Convolved.wav"),
                    stream: convolved,
                    overwrite: true);
            }

            {
                float[] filter1 = new float[150];
                filter1[25] = 1f / (float)Math.Sqrt(2);
                filter1[26] = 1f / (float)Math.Sqrt(2);


                float[] filter2 = new float[150];

                for (int i = 0; i < 150; i++)
                {
                    filter2[i] = 1f / 150f;
                }

                IBGCStream convolved = stream.MultiConvolve(filter1, filter2);

                string rms = string.Join(", ", convolved.CalculateRMS().Select(x => x.ToString()).ToArray());

                Debug.Log($"Post RMS: {rms}");

                //Write to File
                WaveEncoding.SaveStream(
                    filepath: DataManagement.PathForDataFile("Test", $"{baseFile}_Convolved2.wav"),
                    stream: convolved,
                    overwrite: true);
            }
        }