Exemplo n.º 1
0
 /// <summary>
 /// Initializes a new instance of the <see cref="BiQuadFilter"/> class.
 /// </summary>
 /// <param name="source">The source.</param>
 /// <param name="parameter">The parameter.</param>
 /// <exception cref="ArgumentNullException">source</exception>
 public BiQuadFilter(IReadableAudioSource <float, SampleFormat> source, BiQuadParameter parameter)
 {
     Source         = source ?? throw new ArgumentNullException(nameof(source));
     Parameter      = parameter;
     internalStates = new Vector2[Format.Channels];
     internalStates.AsSpan().Fill(new Vector2(0, 0));
 }
Exemplo n.º 2
0
 /// <summary>
 /// Initializes a new instance of the <see cref="SplineResampler"/> class.
 /// </summary>
 /// <param name="source">The source.</param>
 /// <param name="destinationSampleRate">The destination sample rate.</param>
 public SplineResampler(IReadableAudioSource <float, SampleFormat> source, int destinationSampleRate) :
     base(source.Format.SampleRate > destinationSampleRate
         ? new BiQuadFilter(source, BiQuadParameter.CreateLPFParameter(source.Format.SampleRate, destinationSampleRate * 0.5, 0.70710678118654752440084436210485))
         : source, destinationSampleRate)
 {
     bufferWrapper = new ResizablePooledBufferWrapper <float>(1);
 }
Exemplo n.º 3
0
 /// <summary>
 /// Initializes a new instance of the <see cref="SampleToPCM8Converter"/> class.
 /// </summary>
 /// <param name="source">The source.</param>
 /// <param name="accuracyNeeded">Turns on <see cref="AccuracyMode"/> when <c>true</c>.</param>
 public SampleToPCM8Converter(IReadableAudioSource <float, SampleFormat> source, bool accuracyNeeded = true)
     : base(source, new WaveFormat(source.Format.SampleRate, 8, source.Format.Channels, AudioEncoding.Pcm))
 {
     if (accuracyNeeded)
     {
         dsmAccumulator = new float[source.Format.Channels];
         dsmLastOutput  = new byte[source.Format.Channels];
     }
     AccuracyMode = accuracyNeeded;
     readBuffer   = new float[ActualBufferMax];
 }
Exemplo n.º 4
0
 /// <summary>
 /// Initializes a new instance of the <see cref="SampleToPcm24Converter"/> class.
 /// </summary>
 /// <param name="source">The source.</param>
 /// <param name="accuracyNeeded">Turns on <see cref="AccuracyMode"/> when <c>true</c>.</param>
 /// <param name="endianness">The destination endianness.</param>
 public SampleToPcm24Converter(IReadableAudioSource <float, SampleFormat> source, bool accuracyNeeded = true, Endianness endianness = Endianness.Little)
     : base(source, new WaveFormat(source.Format.SampleRate, 24, source.Format.Channels, AudioEncoding.Pcm))
 {
     if (accuracyNeeded)
     {
         dsmAccumulator = new float[source.Format.Channels];
         dsmLastOutput  = new Int24[source.Format.Channels];
     }
     AccuracyMode = accuracyNeeded;
     Endianness   = endianness;
     readBuffer   = new float[ActualBufferMax];
 }
Exemplo n.º 5
0
 public ReverbEffect(WaveFormat waveFormat, Scalar.Scalar decay, Scalar.Scalar delay, int max_buffer_len, IReadableAudioSource <float> source) : base(waveFormat)
 {
     Source = source;
     Decay  = decay;
     Delay  = delay;
     if (max_buffer_len < 0 || max_buffer_len > waveFormat.SampleRate)
     {
         throw new ArgumentOutOfRangeException("max_buffer_len must be greater than zero and cannot exceed the samples per second of the provided WaveFormat");
     }
     _buffer       = new float[max_buffer_len];
     _buffer_index = 0;
 }
Exemplo n.º 6
0
 /// <summary>
 /// Initializes a new instance of the <see cref="ResamplerBase"/> class.
 /// </summary>
 /// <param name="source">The source.</param>
 /// <param name="destinationSampleRate">The destination sample rate.</param>
 /// <exception cref="ArgumentNullException">source</exception>
 /// <exception cref="ArgumentOutOfRangeException">destinationSampleRate</exception>
 protected ResamplerBase(IReadableAudioSource <float, SampleFormat> source, int destinationSampleRate)
 {
     Source = source ?? throw new ArgumentNullException(nameof(source));
     Format = new SampleFormat(source.Format.Channels, destinationSampleRate);
     if (destinationSampleRate < 1)
     {
         throw new ArgumentOutOfRangeException(nameof(destinationSampleRate), $"{nameof(destinationSampleRate)} must be grater than 0!");
     }
     (RateMul, RateDiv) = MathHelper.MinimizeDivisor(destinationSampleRate, source.Format.SampleRate);
     RateMulInverse     = 1.0f / RateMul;
     RateDivInverse     = 1.0f / RateDiv;
 }
Exemplo n.º 7
0
 /// <summary>
 /// Initializes a new instance of the <see cref="Pcm16ToSampleConverter"/> class.
 /// </summary>
 /// <param name="source">The source.</param>
 /// <param name="endianness">The endianness of <paramref name="source"/>.</param>
 public Pcm24ToSampleConverter(IReadableAudioSource <byte, IWaveFormat> source, Endianness endianness = Endianness.Little)
     : base(source, new SampleFormat(source.Format.SampleRate, source.Format.Channels))
 {
     Endianness = endianness;
 }
Exemplo n.º 8
0
 /// <summary>
 /// Initializes a new instance of the <see cref="Pcm8ToSampleConverter"/> class.
 /// </summary>
 /// <param name="source">The source.</param>
 public Pcm8ToSampleConverter(IReadableAudioSource <byte, IWaveFormat> source)
     : base(source, new SampleFormat(source.Format.SampleRate, source.Format.Channels))
 {
 }
Exemplo n.º 9
0
        static void Main(string[] args)
        {
            WaveFormat waveFormat = new WaveFormat(44100, 16, 1);

            Oscillator freqOsc      = new Oscillator(Oscillator.WaveType.SineWave, waveFormat.SampleRate, new ConstantScalar(0.1f), new ConstantScalar(80.0f), new ConstantScalar(0), new ConstantScalar(100.0f));
            Oscillator ampOscVel    = new Oscillator(Oscillator.WaveType.SineWave, waveFormat.SampleRate, new ConstantScalar(0.05f), new ConstantScalar(8.0f), new ConstantScalar(0.5f), new ConstantScalar(8.0f));
            Oscillator ampOsc       = new Oscillator(Oscillator.WaveType.SawtoothWave, waveFormat.SampleRate, ampOscVel, new ConstantScalar(0.5f), new ConstantScalar(0), new ConstantScalar(1.1f));
            Oscillator variableFreq = new Oscillator(Oscillator.WaveType.SineWave, waveFormat.SampleRate, freqOsc, ampOsc, new ConstantScalar(0), new ConstantScalar(0));

            ScalarPassthrough scalarPassthru = new ScalarPassthrough(waveFormat, variableFreq);

            NoiseGenerator noiseGen  = new NoiseGenerator(waveFormat, NoiseGenerator.NoiseType.WhiteNoise);
            Oscillator     freqsweep = new Oscillator(Oscillator.WaveType.SineWave, waveFormat.SampleRate, new ConstantScalar(0.1f), new ConstantScalar(200), new ConstantScalar(0), new ConstantScalar(440));
            Oscillator     qsweep    = new Oscillator(Oscillator.WaveType.SineWave, waveFormat.SampleRate, new ConstantScalar(1.0f), new ConstantScalar(0.9f), new ConstantScalar(0), new ConstantScalar(1.0f)); //new ConstantScalar((float)(1.0 / Math.Sqrt(2)));
            //Oscillator gainSweep = new Oscillator(Oscillator.WaveType.TriangleWave, waveFormat.SampleRate, new ConstantScalar(0.025f), new ConstantScalar(2), new ConstantScalar(0), new ConstantScalar(6));
            ConstantScalar gainSweep = new ConstantScalar(6);

            SampleProcessor.SampleProcessor filter = new SampleProcessor.NotchFilter(waveFormat, freqsweep, qsweep, gainSweep, scalarPassthru);


            // distortion "pedal" on a minimally modified hard body electric guitar signal
            Oscillator     gainOsc     = new Oscillator(Oscillator.WaveType.SineWave, waveFormat.SampleRate, new ConstantScalar(0.5f), new ConstantScalar(2), new ConstantScalar(0), new ConstantScalar(5));
            Oscillator     cutoffOsc   = new Oscillator(Oscillator.WaveType.SineWave, waveFormat.SampleRate, new ConstantScalar(0.95f), new ConstantScalar(3), new ConstantScalar(0), new ConstantScalar(4));
            ConstantScalar cutoff      = new ConstantScalar(0.2f);
            IWaveSource    cleanguitar = CodecFactory.Instance.GetCodec(@"..\..\sampledata\guitar-sample.mp3"); // sample signal from single-pickup electric guitar. Recorded 8/14/20.
            IReadableAudioSource <float> convertedguitar = cleanguitar.ToMono().ToSampleSource();

            SampleProcessor.DistortionEffect distortion   = new SampleProcessor.DistortionEffect(waveFormat, gainOsc, cutoff, convertedguitar);
            SampleProcessor.SampleProcessor  reverbEffect = new SampleProcessor.ReverbEffect(waveFormat, new ConstantScalar(0.4f), new ConstantScalar(0.5f), waveFormat.SampleRate, distortion);

            BasicAudioController basicAudioController = new BasicAudioController(GetSoundOut(), 1, 44100);

            basicAudioController.addSource((ISampleSource)reverbEffect);
            basicAudioController.startPlaying();

            Console.ReadKey();
            basicAudioController.stopPlaying();
            return;

            MIDI.MIDIData data = MIDI.MIDIFileReader.readFile(@"..\..\sampledata\MIDI_sample.mid");

            MIDI.MIDIData testdata = new MIDI.MIDIData();
            testdata.format       = 0;
            testdata.timing       = MIDI.TimingScheme.TimeCode;
            testdata.timecode_fps = 24;
            testdata.timecode_sfr = 4;
            testdata.ntracks      = 1;
            testdata.tracks.Add(new MIDI.MIDITrack());
            MIDI.MIDIEvent event0 = new MIDI.MIDIEvent();
            MIDI.MIDIEvent event1 = new MIDI.MIDIEvent();

            event0.delta = 4 * 24 * 5; // wait 5 seconds from start
            event1.delta = 4 * 24 * 2; // 2 seconds

            //event0.type = MIDI.EventType.MIDIEvent;
            //event0.midieventtype = MIDI.MIDIEventType.NoteOn;
            //event0.val1 = 0; // channel 0
            //event0.val2 = 60; // middle C
            //event0.val3 = 1;

            //event1.type = MIDI.EventType.MIDIEvent;
            //event1.midieventtype = MIDI.MIDIEventType.NoteOff;
            //event1.val1 = 0; // channel 0
            //event1.val2 = 60; // middle C
            //event1.val3 = 1;

            //testdata.tracks[0].events.Add(event0);
            //testdata.tracks[0].events.Add(event1);


            MIDI.MIDIPlayer player = new MIDI.MIDIPlayer(data);
            Console.WriteLine("Track 1 events:");
            player.playTrack(1);

            Console.ReadKey();
            return;

            MIDIAudioController audioController = new MIDIAudioController(GetSoundOut());

            ChromaticScale.ChromaticScale scale = new ChromaticScale.ChromaticScale();
            audioController.startPlaying();
            SampleSource.WaveGenerator.WaveType wavetype = WaveGenerator.WaveType.SineWave;

            Console.ReadKey(); // wait for input
            for (int i = 0; i < scale.notes.Count(); i++)
            {
                float freq = scale.notes[i].base_freq / 2;
                Console.WriteLine(scale.notes[i].identifier[0] + " - " + freq + " - " + wavetype);
                audioController.updatePlaying(freq, wavetype);
                Console.ReadKey(); // wait for input

                wavetype = Next(wavetype);
            }
            for (int i = 0; i < scale.notes.Count(); i++)
            {
                Console.WriteLine(scale.notes[i].identifier[0] + " - " + scale.notes[i].base_freq.ToString() + " - " + wavetype);
                audioController.updatePlaying(scale.notes[i].base_freq, wavetype);
                Console.ReadKey(); // wait for input
                wavetype = Next(wavetype);
            }
            for (int i = 0; i < scale.notes.Count(); i++)
            {
                float freq = scale.notes[i].base_freq * 2;
                Console.WriteLine(scale.notes[i].identifier[0] + " - " + freq + " - " + wavetype);
                audioController.updatePlaying(freq, wavetype);
                Console.ReadKey(); // wait for input
                wavetype = Next(wavetype);
            }

            audioController.stopPlaying();
            audioController.Dispose();
        }
Exemplo n.º 10
0
 public VolumeModulator(WaveFormat waveformat, IReadableAudioSource <float> source, Scalar.Scalar scalar) : base(waveformat)
 {
     this.scalar = scalar;
     this.source = source;
 }
Exemplo n.º 11
0
 public DistortionEffect(WaveFormat waveFormat, Scalar.Scalar gain, Scalar.Scalar cutoff, IReadableAudioSource <float> source) : base(waveFormat)
 {
     Source = source;
     Gain   = gain;
     Cutoff = cutoff;
 }
Exemplo n.º 12
0
 /// <summary>
 /// Initializes a new instance of the <see cref="SampleToFloat32Converter"/> class.
 /// </summary>
 /// <param name="source">The source.</param>
 public SampleToFloat32Converter(IReadableAudioSource <float, SampleFormat> source)
     : base(source, new WaveFormat(source.Format.SampleRate, 32, source.Format.Channels, AudioEncoding.IeeeFloat))
 {
 }
Exemplo n.º 13
0
 /// <summary>
 /// Create a new audio source.
 /// </summary>
 /// <param name="source">Audio source.</param>
 /// <param name="loop">Loop information.</param>
 public AudioSource(IReadableAudioSource <byte> source, Loop loop = null)
 {
     IsLinux            = false;
     AudioSourceWindows = source;
     Loop = loop;
 }