NewN_UAVPlane/Assets/Plugins/RenderHeads/AVProMovieCapture/Runtime/Scripts/Components/UnityAudioCapture.cs

82 lines
2.0 KiB
C#

using UnityEngine;
//-----------------------------------------------------------------------------
// Copyright 2012-2021 RenderHeads Ltd. All rights reserved.
//-----------------------------------------------------------------------------
namespace RenderHeads.Media.AVProMovieCapture
{
/// <summary>
/// Base class for capturing audio from Unity
/// Two classes derive from this:
/// 1) CaptureAudioFromAudioListener - used for real-time capture
/// 2) CaptureAudioFromAudioRenderer - used for offline rendering
/// </summary>
public abstract class UnityAudioCapture : MonoBehaviour
{
public virtual int OverflowCount
{
get { return 0; }
}
public abstract int ChannelCount
{
get;
}
public abstract void PrepareCapture();
public abstract void StartCapture();
public abstract void StopCapture();
public abstract void FlushBuffer();
public virtual System.IntPtr ReadData(out int length) { length = 0; return System.IntPtr.Zero; }
public static int GetUnityAudioChannelCount()
{
int result = GetChannelCount(AudioSettings.driverCapabilities);
if (
#if !UNITY_2019_2_OR_NEWER
AudioSettings.speakerMode != AudioSpeakerMode.Raw &&
#endif
AudioSettings.speakerMode < AudioSettings.driverCapabilities)
{
result = GetChannelCount(AudioSettings.speakerMode);
}
return result;
}
private static int GetChannelCount(AudioSpeakerMode mode)
{
int result = 0;
switch (mode)
{
#if !UNITY_2019_2_OR_NEWER
case AudioSpeakerMode.Raw:
break;
#endif
case AudioSpeakerMode.Mono:
result = 1;
break;
case AudioSpeakerMode.Stereo:
result = 2;
break;
case AudioSpeakerMode.Quad:
result = 4;
break;
case AudioSpeakerMode.Surround:
result = 5;
break;
case AudioSpeakerMode.Mode5point1:
result = 6;
break;
case AudioSpeakerMode.Mode7point1:
result = 8;
break;
case AudioSpeakerMode.Prologic:
result = 2;
break;
}
return result;
}
}
}