private void OnAudioAvailable(object sender, AsioAudioAvailableEventArgs e) { int dataSize = sizeof(short); byte[] interleavedBuffer = new byte[e.SamplesPerBuffer * dataSize * e.InputBuffers.Length]; byte[] inputBuffer = new byte[e.SamplesPerBuffer * dataSize]; for (int i = 0; i < e.InputBuffers.Length; i++) { Marshal.Copy(e.InputBuffers[i], inputBuffer, 0, e.SamplesPerBuffer * dataSize); //Copying to managed array for easier access (can for (int j = 0; j < inputBuffer.Length; j += dataSize) { interleavedBuffer[j * e.InputBuffers.Length + i * dataSize] = inputBuffer[j]; interleavedBuffer[j * e.InputBuffers.Length + i * dataSize + 1] = inputBuffer[j + 1]; } } waveProvider.AddSamples(interleavedBuffer, 0, interleavedBuffer.Length); }
private static void OnAsioOutAudioAvailable(object sender, AsioAudioAvailableEventArgs e) { // fill array with data e.GetAsInterleavedSamples(samples); int sample; int j; // convert sample to short format for (int i = 0; i < samples.Length; i++) { sample = (int)(samples[i] * Math.Pow(2, 15)); j = i * 2; sampleBytes[j] = (byte)sample; sampleBytes[j + 1] = (byte)(sample >> 8); } // add short to buffer bufferedWaveProvider.AddSamples(sampleBytes, 0, sampleBytes.Length); }
private void OnAsioOutAudioAvailable(object sender, AsioAudioAvailableEventArgs e) { float[] samplesBuffer = e.GetAsInterleavedSamples(); Console.WriteLine("STARTED"); Console.WriteLine("SAMPLES_PER_BUFFER:" + e.SamplesPerBuffer.ToString()); Console.WriteLine("INPUT_BUFFERS:" + e.InputBuffers.Length); Console.WriteLine("bytes:" + samplesBuffer.Length); int channelsCount = this.soundService.getCurrentChannelsCount(); if (this.cbRecordFile.Checked) { bool appendToFile = this.isFirstChunk == false; writeInterleavedSamplesToCSV(samplesBuffer, channelsCount, appendToFile); } else { for (int i = 0; i < samplesBuffer.Length; i += channelsCount) { for (int j = 0; j < channelsCount; j++) { Chart chart = this.charts[j]; float signalValue = samplesBuffer[i + j] * Int16.MaxValue; chart.Invoke((MethodInvoker) delegate { int maxIndex = (int)chart.ChartAreas[0].AxisX.Maximum; chart.Series[0].Points.Add(signalValue); int pointsCount = chart.Series[0].Points.Count; if (pointsCount >= maxIndex) { chart.Series[0].Points.RemoveAt(0); chart.ResetAutoValues(); } }); } } } isFirstChunk = false; Console.WriteLine("HANDLED"); }
private void asioDriver_AudioAvailable(object sender, AsioAudioAvailableEventArgs e) { var index = 0; foreach (var input in Sources) { if (input.IsMapped) { floatBuffer[index] = BufferHelpers.Ensure(floatBuffer[index], e.SamplesPerBuffer); copySamplesToManagedMemory(index, e); (input as SignalSource).RaiseBufferReady( new RoutingEventArgs { Index = index, Format = formatPerLine, Count = e.SamplesPerBuffer, Buffer = floatBuffer[index] }); } } }
private void HandleBuffer(object sender, AsioAudioAvailableEventArgs e) { /*byte[] buf = new byte[e.SamplesPerBuffer]; * for (int i = 0; i < e.InputBuffers.Length; i++) * { * //Marshal.Copy(e.InputBuffers[i], e.OutputBuffers, 0, e.InputBuffers.Length); * //also tried to upper one but this way i also couldn't hear anything * Marshal.Copy(e.InputBuffers[i], buf, 0, e.SamplesPerBuffer); * Marshal.Copy(buf, 0, e.OutputBuffers[i], e.SamplesPerBuffer); * } * e.WrittenToOutputBuffers = true;*/ var count = e.GetAsInterleavedSamples(values); //if (e.AsioSampleType == AsioSampleType.Int32LSB16) var samples = new Sample[count]; for (var i = 0; i < count; i++) { samples[i] = new Sample(new[] { values[i] }); } sampleQueue.Add(samples); }
private unsafe void ASIO_AudioAvailable(object sender, AsioAudioAvailableEventArgs e) { if (inpbuf == null) { inpbuf = new float[e.InputBuffers.Length][]; outbuf = new float[e.OutputBuffers.Length][]; for (int i = 0; i < e.OutputBuffers.Length; i++) { inpbuf[i] = new float[e.SamplesPerBuffer]; outbuf[i] = new float[e.SamplesPerBuffer]; } } if (e.AsioSampleType == NAudio.Wave.Asio.AsioSampleType.Int32LSB) { spb = e.SamplesPerBuffer; ou = e.OutputBuffers; inp = e.InputBuffers; for (int i = 0; i < spb; i++) { for (int j = 0; j < inp.Length; j++) { inpbuf[j][i] = *((int *)inp[j] + i) / (float)int.MaxValue; } } m.Mix(inpbuf, outbuf, spb, ou.Length); for (int i = 0; i < spb; i++) { for (int j = 0; j < ou.Length; j++) { *((int *)ou[j] + i) = (int)(outbuf[j][i] * (float)int.MaxValue); } } e.WrittenToOutputBuffers = true; } }
private static void OnAsioOutAudioAvailable(object?sender, AsioAudioAvailableEventArgs e) { Collection.Add(e.GetAsInterleavedSamples()); }
void asioOut_AudioAvailable(object sender, AsioAudioAvailableEventArgs e) { var samples = e.GetAsInterleavedSamples(); writer.WriteSamples(samples, 0, samples.Length); }
private void AsioOut_AudioAvailable(object sender, AsioAudioAvailableEventArgs e) { throw new NotImplementedException(); }
private void OnAsioAudioAvailable(object sender, AsioAudioAvailableEventArgs e) { e.GetAsInterleavedSamples(dataSample); OnDataReceived(dataSample); }
void OnAsioOutAudioAvailable(object sender, AsioAudioAvailableEventArgs e) { inputPatcher.ProcessBuffer(e.InputBuffers, e.OutputBuffers, e.SamplesPerBuffer, e.AsioSampleType); e.WrittenToOutputBuffers = true; }