/// <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)); }
/// <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); }
/// <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]; }
/// <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]; }
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; }
/// <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; }
/// <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; }
/// <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)) { }
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(); }
public VolumeModulator(WaveFormat waveformat, IReadableAudioSource <float> source, Scalar.Scalar scalar) : base(waveformat) { this.scalar = scalar; this.source = source; }
public DistortionEffect(WaveFormat waveFormat, Scalar.Scalar gain, Scalar.Scalar cutoff, IReadableAudioSource <float> source) : base(waveFormat) { Source = source; Gain = gain; Cutoff = cutoff; }
/// <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)) { }
/// <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; }