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); } } } }
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); } }