Exemplo n.º 1
0
        public void AudioDeviceIOCallback(float *[] inputChannelData, int numInputChannels, float *[] outputChannelData, int numOutputChannels, int numSamples)
        {
            if (_source != null)
            {
                if (numInputChannels > numOutputChannels)
                {
                    throw new NotImplementedException();
                }

                var numActiveChans = 0;
                var channelSize    = numSamples * sizeof(float);
                for (var i = 0; i < numInputChannels; ++i)
                {
                    _channels[numActiveChans] = outputChannelData[i];
                    Memory.MemCopy(_channels[numActiveChans], inputChannelData[i], channelSize);
                    ++numActiveChans;
                }

                for (var i = 0; i < numOutputChannels; ++i)
                {
                    _channels[numActiveChans] = outputChannelData[i];
                    Memory.ZeroMem <float>(_channels[numActiveChans], numSamples);
                    ++numActiveChans;
                }

                _renderBuffer.Wrap(_channels, numActiveChans, numSamples);

                var info = new AudioSourceChannelInfo(_renderBuffer, 0, numSamples);
                _source.GetNextAudioBlock(ref info);

                for (var i = 0; i < numOutputChannels; ++i)
                {
                    SIMD.Mul(outputChannelData[i], _gain, outputChannelData[i], numSamples);
                }
            }
            else
            {
                for (var i = 0; i < numOutputChannels; ++i)
                {
                    Memory.ZeroMem <float>(outputChannelData[i], numSamples);
                }
            }
        }
Exemplo n.º 2
0
        public void GetNextAudioBlock(ref AudioSourceChannelInfo bufferToFill)
        {
            var buffer = bufferToFill.Buffer;

            for (var i = 1; i < buffer.NumChannels; ++i)
            {
//                for (var j = 0; j < bufferToFill.NumSamples; ++j)
//                {
//                    buffer.Channels[i][bufferToFill.StartSample + j] *= buffer.Channels[0][bufferToFill.StartSample + j];
//                }

                SIMD.Mul(
                    buffer.GetPointer(0, bufferToFill.StartSample),
                    buffer.GetPointer(i, bufferToFill.StartSample),
                    buffer.GetPointer(i, bufferToFill.StartSample),
                    bufferToFill.NumSamples
                    );
            }
        }