Files
BABA_YAGA/Packages/app.rive.rive-unity/Runtime/AudioEngine.cs
2026-05-19 17:39:03 +07:00

64 lines
1.7 KiB
C#

using UnityEngine;
using System;
using System.Runtime.InteropServices;
namespace Rive
{
public class AudioEngine
{
internal IntPtr m_nativeAudioEngine;
private AudioEngine(IntPtr engine)
{
m_nativeAudioEngine = engine;
}
public void Read(float[] data, int channels)
{
readAudioEngine(m_nativeAudioEngine, data, (uint)(data.Length / channels));
}
public void Sum(float[] data, int channels)
{
sumAudioEngine(m_nativeAudioEngine, data, (uint)(data.Length / channels));
}
~AudioEngine()
{
unrefAudioEngine(m_nativeAudioEngine);
}
public static AudioEngine Make(int numChannels, int sampleRate)
{
var nativeEngine = makeAudioEngine((uint)numChannels, (uint)sampleRate);
if (nativeEngine == IntPtr.Zero)
{
return null;
}
return new AudioEngine(nativeEngine);
}
#region Native Methods
[DllImport(NativeLibrary.name)]
private static extern void unrefAudioEngine(IntPtr audioEngine);
[DllImport(NativeLibrary.name)]
internal static extern void readAudioEngine(
IntPtr audioEngine,
float[] frames,
uint frameCount
);
[DllImport(NativeLibrary.name)]
internal static extern void sumAudioEngine(
IntPtr audioEngine,
float[] frames,
uint frameCount
);
[DllImport(NativeLibrary.name)]
internal static extern IntPtr makeAudioEngine(uint numChannels, uint sampleRate);
#endregion
}
}