Пример #1
0
        public void SendAudio(float[] data, int channels)
        {
            if (data.Length == 0 || channels == 0 || !_enableAudioFrames)
            {
                return;
            }

            bool settingsChanged = false;
            int  tempSamples     = data.Length / channels;

            if (tempSamples != numSamples)
            {
                settingsChanged = true;
                numSamples      = tempSamples;
            }

            if (channels != numChannels)
            {
                settingsChanged = true;
                numChannels     = channels;
            }

            if (settingsChanged)
            {
                System.Array.Resize <float>(ref samples, numSamples * numChannels);
            }

            for (int ch = 0; ch < numChannels; ch++)
            {
                for (int i = 0; i < numSamples; i++)
                {
                    samples[numSamples * ch + i] = data[i * numChannels];
                }
            }
            unsafe
            {
                fixed(float *p = samples)
                {
                    var frame = new Interop.AudioFrame
                    {
                        SampleRate    = 48000,
                        NoChannels    = channels,
                        NoSamples     = numSamples,
                        ChannelStride = numSamples * sizeof(float),
                        Data          = (System.IntPtr)p
                    };

                    if (!string.IsNullOrEmpty(sendAudioFrameMetadata))
                    {
                        frame.Metadata = new DataEntry(sendAudioFrameMetadata);
                        _onAudioMetadataSent?.Invoke();
                    }

                    if (_send != null && !_send.IsClosed)
                    {
                        _send.SendAudio(frame);
                    }
                }
            }
        }
Пример #2
0
        private void OnAudioFilterRead(float[] data, int channels)
        {
            if (data.Length == 0 || channels == 0)
            {
                return;
            }

            unsafe
            {
                bool settingsChanged = false;
                int  tempSamples     = data.Length / channels;

                if (tempSamples != numSamples)
                {
                    settingsChanged = true;
                    numSamples      = tempSamples;
                    //PluginEntry.SetNumSamples(_plugin, numSamples);
                }

                if (channels != numChannels)
                {
                    settingsChanged = true;
                    numChannels     = channels;
                    //PluginEntry.SetAudioChannels(_plugin, channels);
                }

                if (settingsChanged)
                {
                    System.Array.Resize <float>(ref samples, numSamples * numChannels);
                }

                for (int ch = 0; ch < numChannels; ch++)
                {
                    for (int i = 0; i < numSamples; i++)
                    {
                        samples[numSamples * ch + i] = data[i * numChannels];
                    }
                }

                fixed(float *p = samples)
                {
                    //PluginEntry.SetAudioData(_plugin, (IntPtr)p);
                    var frame = new Interop.AudioFrame
                    {
                        SampleRate    = 48000,
                        NoChannels    = channels,
                        NoSamples     = numSamples,
                        ChannelStride = numSamples * sizeof(float),
                        Data          = (System.IntPtr)p
                    };

                    if (_send != null)
                    {
                        _send.SendAudio(frame);
                    }
                }

                //if (audioEnabled && pluginReady) PluginEntry.SendAudio(_plugin);
            }
        }
Пример #3
0
 public void UtilAudioToInterleaved(ref AudioFrame audioFrame, ref AudioFrameInterleaved audioFrameInterleaved)
 => _UtilAudioToInterleaved(ref audioFrame, ref audioFrameInterleaved);
Пример #4
0
 public FrameType Capture
     (out VideoFrame video, out AudioFrame audio, out MetadataFrame metadata, uint timeout)
 => _CaptureV3(this, out video, out audio, out metadata, timeout);