コード例 #1
0
    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);
    }
コード例 #2
0
        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);
        }
コード例 #3
0
ファイル: Form1.cs プロジェクト: roma2341/MultiVisualizer
        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");
        }
コード例 #4
0
ファイル: AsioInputMapper.cs プロジェクト: gareththegeek/ndaw
        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]
                    });
                }
            }
        }
コード例 #5
0
        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);
        }
コード例 #6
0
ファイル: Player.cs プロジェクト: lazar2222/OtherProjects
        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;
            }
        }
コード例 #7
0
ファイル: App.cs プロジェクト: galilov/MovementDetector
 private static void OnAsioOutAudioAvailable(object?sender, AsioAudioAvailableEventArgs e)
 {
     Collection.Add(e.GetAsInterleavedSamples());
 }
コード例 #8
0
        void asioOut_AudioAvailable(object sender, AsioAudioAvailableEventArgs e)
        {
            var samples = e.GetAsInterleavedSamples();

            writer.WriteSamples(samples, 0, samples.Length);
        }
コード例 #9
0
 private void AsioOut_AudioAvailable(object sender, AsioAudioAvailableEventArgs e)
 {
     throw new NotImplementedException();
 }
コード例 #10
0
 private void OnAsioAudioAvailable(object sender, AsioAudioAvailableEventArgs e)
 {
     e.GetAsInterleavedSamples(dataSample);
     OnDataReceived(dataSample);
 }
コード例 #11
0
 void OnAsioOutAudioAvailable(object sender, AsioAudioAvailableEventArgs e)
 {
     inputPatcher.ProcessBuffer(e.InputBuffers, e.OutputBuffers,
                                e.SamplesPerBuffer, e.AsioSampleType);
     e.WrittenToOutputBuffers = true;
 }