first commit
This commit is contained in:
@@ -0,0 +1,81 @@
|
||||
using UnityEngine;
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Copyright 2019-2022 RenderHeads Ltd. All rights reserved.
|
||||
//-----------------------------------------------------------------------------
|
||||
|
||||
namespace RenderHeads.Media.AVProVideo
|
||||
{
|
||||
/// Allows per-channel volume control
|
||||
/// Currently supported on Windows and UWP (Media Foundation API only), macOS, iOS, tvOS and Android (ExoPlayer API only)
|
||||
[AddComponentMenu("AVPro Video/Audio Channel Mixer", 401)]
|
||||
[HelpURL("https://www.renderheads.com/products/avpro-video/")]
|
||||
public class AudioChannelMixer : MonoBehaviour
|
||||
{
|
||||
const int MaxChannels = 8;
|
||||
|
||||
[Range(0f, 1f)]
|
||||
[SerializeField] float[] _channels = null;
|
||||
|
||||
/// Range 0.0 to 1.0
|
||||
public float[] Channel
|
||||
{
|
||||
get { return _channels; }
|
||||
set { _channels = value; }
|
||||
}
|
||||
|
||||
void Reset()
|
||||
{
|
||||
_channels = new float[MaxChannels];
|
||||
for (int i = 0; i < MaxChannels; i++)
|
||||
{
|
||||
_channels[i] = 1f;
|
||||
}
|
||||
}
|
||||
|
||||
void ChangeChannelCount(int numChannels)
|
||||
{
|
||||
float[] channels = new float[numChannels];
|
||||
if (_channels != null && _channels.Length != 0)
|
||||
{
|
||||
for (int i = 0; i < channels.Length; i++)
|
||||
{
|
||||
if (i < _channels.Length)
|
||||
{
|
||||
channels[i] = _channels[i];
|
||||
}
|
||||
else
|
||||
{
|
||||
channels[i] = 1f;
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
for (int i = 0; i < numChannels; i++)
|
||||
{
|
||||
channels[i] = 1f;
|
||||
}
|
||||
}
|
||||
_channels = channels;
|
||||
}
|
||||
|
||||
void OnAudioFilterRead(float[] data, int channels)
|
||||
{
|
||||
if (channels != _channels.Length)
|
||||
{
|
||||
ChangeChannelCount(channels);
|
||||
}
|
||||
int k = 0;
|
||||
int numSamples = data.Length / channels;
|
||||
for (int j = 0; j < numSamples; j++)
|
||||
{
|
||||
for (int i = 0; i < channels; i++)
|
||||
{
|
||||
data[k] *= _channels[i];
|
||||
k++;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user