76 lines
2.0 KiB
C#
76 lines
2.0 KiB
C#
using Assets.WasapiAudio.Scripts.Core;
|
|
using UnityEngine;
|
|
using UnityEngine.UI;
|
|
|
|
[ExecuteAlways]
|
|
public class AudioSource : MonoBehaviour {
|
|
public WasapiCaptureType CaptureType = WasapiCaptureType.Loopback;
|
|
public int SpectrumSize = 32;
|
|
public int MinFrequency = 100;
|
|
public int MaxFrequency = 20000;
|
|
public ScalingStrategy ScalingStrategy = ScalingStrategy.Sqrt;
|
|
public WasapiAudioFilter[] Filters;
|
|
|
|
public Preferences preferences;
|
|
public Texture speakerTexture;
|
|
public Texture micTexture;
|
|
|
|
private WasapiAudio _wasapiAudio;
|
|
private float[] _spectrumData;
|
|
|
|
public void Start() {
|
|
CaptureType = preferences.data.useLoopback
|
|
? WasapiCaptureType.Loopback
|
|
: WasapiCaptureType.Microphone;
|
|
|
|
// Debug.Log($"Pref: {preferences.data.useLoopback} {CaptureType}");
|
|
|
|
Initialise();
|
|
}
|
|
|
|
void Initialise() {
|
|
bool isLoopback = CaptureType == WasapiCaptureType.Loopback;
|
|
SetImageTexture(isLoopback);
|
|
|
|
_wasapiAudio?.StopListen();
|
|
|
|
_wasapiAudio = new WasapiAudio(CaptureType, SpectrumSize, ScalingStrategy, MinFrequency, MaxFrequency, Filters, spectrumData => {
|
|
_spectrumData = spectrumData;
|
|
});
|
|
|
|
_wasapiAudio.StartListen();
|
|
}
|
|
|
|
public float[] GetSpectrumData() {
|
|
return _spectrumData;
|
|
}
|
|
|
|
void OnDestroy() {
|
|
_wasapiAudio?.StopListen();
|
|
}
|
|
|
|
public void ToggleCaptureType() {
|
|
bool isLoopback = CaptureType == WasapiCaptureType.Loopback;
|
|
if (isLoopback) {
|
|
CaptureType = WasapiCaptureType.Microphone;
|
|
preferences.SetUseLoopback(false);
|
|
} else {
|
|
CaptureType = WasapiCaptureType.Loopback;
|
|
preferences.SetUseLoopback(true);
|
|
}
|
|
Initialise();
|
|
}
|
|
|
|
void SetImageTexture(bool useLoopback) {
|
|
RawImage image = GetComponent<RawImage>();
|
|
|
|
if (!image) return;
|
|
|
|
image.texture = useLoopback
|
|
? speakerTexture
|
|
: micTexture;
|
|
}
|
|
|
|
}
|
|
|