73 lines
2.4 KiB
C#
73 lines
2.4 KiB
C#
using System;
|
|
using Normal.Realtime.Native;
|
|
|
|
namespace Normal.Realtime.Native {
|
|
public class Microphone : IDisposable {
|
|
// Class
|
|
public static bool PlatformSupported() {
|
|
return Plugin.MicrophonePlatformSupported();
|
|
}
|
|
|
|
// Pointer to native class
|
|
private IntPtr _nativeMicrophone = IntPtr.Zero;
|
|
|
|
// Instance
|
|
public Microphone() {
|
|
_nativeMicrophone = Plugin.MicrophoneCreate();
|
|
}
|
|
|
|
// NOTE: This may not be called on the same thread that we created the native room with. It's recommended Dispose() is called manually to prevent any issues.
|
|
~Microphone() {
|
|
// Clean up unmanaged code
|
|
Dispose(false);
|
|
}
|
|
|
|
// Ideally called whenever someone is done using an audio preprocessor.
|
|
public void Dispose() {
|
|
Dispose(true);
|
|
GC.SuppressFinalize(this);
|
|
}
|
|
|
|
void Dispose(bool disposing) {
|
|
if (_nativeMicrophone != IntPtr.Zero) {
|
|
Plugin.MicrophoneDelete(_nativeMicrophone);
|
|
_nativeMicrophone = IntPtr.Zero;
|
|
}
|
|
}
|
|
|
|
public bool Start() {
|
|
if (_nativeMicrophone == IntPtr.Zero)
|
|
throw RealtimeNativeException.NativePointerIsNull("Microphone");
|
|
|
|
return Plugin.MicrophoneStart(_nativeMicrophone);
|
|
}
|
|
|
|
public void Stop() {
|
|
if (_nativeMicrophone == IntPtr.Zero)
|
|
throw RealtimeNativeException.NativePointerIsNull("Microphone");
|
|
|
|
Plugin.MicrophoneStop(_nativeMicrophone);
|
|
}
|
|
|
|
public int SampleRate() {
|
|
if (_nativeMicrophone == IntPtr.Zero)
|
|
throw RealtimeNativeException.NativePointerIsNull("Microphone");
|
|
|
|
return Plugin.MicrophoneGetSampleRate(_nativeMicrophone);
|
|
}
|
|
|
|
public int Channels() {
|
|
if (_nativeMicrophone == IntPtr.Zero)
|
|
throw RealtimeNativeException.NativePointerIsNull("Microphone");
|
|
|
|
return Plugin.MicrophoneGetChannels(_nativeMicrophone);
|
|
}
|
|
|
|
public bool GetAudioData(float[] audioData) {
|
|
if (_nativeMicrophone == IntPtr.Zero)
|
|
throw RealtimeNativeException.NativePointerIsNull("Microphone");
|
|
|
|
return Plugin.MicrophoneGetAudioData(_nativeMicrophone, audioData, audioData.Length);
|
|
}
|
|
}
|
|
}
|