Initial Commit
This commit is contained in:
commit
13767d3f40
160 changed files with 51070 additions and 0 deletions
74
AudioLinkSysAudio/AudioLinkSysAudio.cs
Normal file
74
AudioLinkSysAudio/AudioLinkSysAudio.cs
Normal file
|
|
@ -0,0 +1,74 @@
|
|||
using UnityEngine;
|
||||
using UnityEngine.Audio;
|
||||
using System.Linq;
|
||||
#if UNITY_EDITOR
|
||||
using UnityEditor;
|
||||
#endif
|
||||
|
||||
[RequireComponent(typeof(AudioSource))]
|
||||
public class SystemAudioCapture : MonoBehaviour
|
||||
{
|
||||
private AudioSource audioSource;
|
||||
[SerializeField] private string deviceName;
|
||||
[SerializeField] private AudioMixerGroup audioMixerGroup; // Assign a muted mixer group
|
||||
private int sampleRate = 48000;
|
||||
private int bufferSize = 1024;
|
||||
|
||||
public AudioClip CapturedAudio => audioSource.clip;
|
||||
|
||||
void Start()
|
||||
{
|
||||
audioSource = GetComponent<AudioSource>();
|
||||
audioSource.loop = true;
|
||||
audioSource.mute = false; // Allow processing
|
||||
audioSource.outputAudioMixerGroup = audioMixerGroup; // Route to a muted mixer group
|
||||
StartCapture();
|
||||
}
|
||||
|
||||
private void StartCapture()
|
||||
{
|
||||
if (string.IsNullOrEmpty(deviceName)) return;
|
||||
|
||||
if (Microphone.IsRecording(deviceName))
|
||||
Microphone.End(deviceName);
|
||||
|
||||
audioSource.clip = Microphone.Start(deviceName, true, 10, sampleRate);
|
||||
while (Microphone.GetPosition(deviceName) <= 0) { } // Wait for microphone to initialize
|
||||
audioSource.Play(); // Ensure playback for Audio Link
|
||||
}
|
||||
|
||||
public void RestartCapture()
|
||||
{
|
||||
if (Microphone.IsRecording(deviceName))
|
||||
Microphone.End(deviceName);
|
||||
StartCapture();
|
||||
}
|
||||
|
||||
#if UNITY_EDITOR
|
||||
[CustomEditor(typeof(SystemAudioCapture))]
|
||||
public class SystemAudioCaptureEditor : Editor
|
||||
{
|
||||
public override void OnInspectorGUI()
|
||||
{
|
||||
SystemAudioCapture script = (SystemAudioCapture)target;
|
||||
var devices = Microphone.devices;
|
||||
int selectedIndex = Mathf.Max(0, devices.ToList().IndexOf(script.deviceName));
|
||||
selectedIndex = EditorGUILayout.Popup("Audio Device", selectedIndex, devices);
|
||||
if (selectedIndex >= 0 && selectedIndex < devices.Length)
|
||||
{
|
||||
script.deviceName = devices[selectedIndex];
|
||||
}
|
||||
script.audioMixerGroup = (AudioMixerGroup)EditorGUILayout.ObjectField("Audio Mixer Group", script.audioMixerGroup, typeof(AudioMixerGroup), false);
|
||||
if (GUILayout.Button("Restart Capture"))
|
||||
{
|
||||
script.RestartCapture();
|
||||
}
|
||||
if (GUI.changed)
|
||||
{
|
||||
EditorUtility.SetDirty(script);
|
||||
}
|
||||
DrawDefaultInspector();
|
||||
}
|
||||
}
|
||||
#endif
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue