Files
2025-11-13 17:40:28 +08:00

1304 lines
47 KiB
C#

// Copyright © 2015-2022 Pico Technology Co., Ltd. All Rights Reserved.
using System;
using System.Runtime.InteropServices;
using Unity.XR.PXR;
using UnityEngine;
namespace PXR_Audio
{
namespace Spatializer
{
public abstract class Api
{
public abstract string GetVersion(ref int major, ref int minor, ref int patch);
public abstract Result CreateContext(ref IntPtr ctx, RenderingMode mode, uint framesPerBuffer,
uint sampleRate);
public abstract Result InitializeContext(IntPtr ctx);
public abstract Result SubmitMesh(
IntPtr ctx,
float[] vertices,
int verticesCount,
int[] indices,
int indicesCount,
AcousticsMaterial material,
ref int geometryId);
public abstract Result SubmitMeshAndMaterialFactor(
IntPtr ctx,
float[] vertices,
int verticesCount,
int[] indices,
int indicesCount,
float[] absorptionFactor,
float scatteringFactor,
float transmissionFactor,
ref int geometryId);
public abstract Result SubmitMeshWithConfig(
IntPtr ctx,
float[] vertices,
int verticesCount,
int[] indices,
int indicesCount,
ref MeshConfig config,
ref int geometryId);
public abstract Result UpdateMesh(
IntPtr ctx,
int geometryId,
float[] newVertices,
int newVerticesCount,
int[] newIndices,
int newIndicesCount,
ref MeshConfig config,
ref int newGeometryId,
bool isAsync = false);
public abstract Result RemoveMesh(IntPtr ctx, int geometryId);
public abstract int GetNumOfGeometries(IntPtr ctx);
public abstract Result SetMeshConfig(
IntPtr ctx,
int geometryId,
ref MeshConfig config,
uint propertyMask);
public abstract Result GetAbsorptionFactor(
AcousticsMaterial material,
float[] absorptionFactor);
public abstract Result GetScatteringFactor(
AcousticsMaterial material,
ref float scatteringFactor);
public abstract Result GetTransmissionFactor(
AcousticsMaterial material,
ref float transmissionFactor);
public abstract Result CommitScene(IntPtr ctx);
public abstract Result AddSource(
IntPtr ctx,
SourceMode sourceMode,
float[] position,
ref int sourceId,
bool isAsync);
public abstract Result AddSourceWithOrientation(
IntPtr ctx,
SourceMode mode,
float[] position,
float[] front,
float[] up,
float radius,
ref int sourceId,
bool isAsync);
public abstract Result AddSourceWithConfig(
IntPtr ctx,
ref SourceConfig sourceConfig,
ref int sourceId,
bool isAsync);
public abstract Result SetSourceConfig(IntPtr ctx, int sourceId, ref SourceConfig sourceConfig,
uint propertyMask);
public abstract Result SetSourceAttenuationMode(
IntPtr ctx,
int sourceId,
SourceAttenuationMode mode,
DistanceAttenuationCallback directDistanceAttenuationCallback,
DistanceAttenuationCallback indirectDistanceAttenuationCallback);
public abstract Result SetSourceRange(IntPtr ctx, int sourceId, float rangeMin, float rangeMax);
public abstract Result RemoveSource(IntPtr ctx, int sourceId);
public abstract Result SubmitSourceBuffer(
IntPtr ctx,
int sourceId,
float[] inputBufferPtr,
uint numFrames);
public abstract Result SubmitAmbisonicChannelBuffer(
IntPtr ctx,
float[] ambisonicChannelBuffer,
int order,
int degree,
AmbisonicNormalizationType normType,
float gain);
public abstract Result SubmitInterleavedAmbisonicBuffer(
IntPtr ctx,
float[] ambisonicBuffer,
int ambisonicOrder,
AmbisonicNormalizationType normType,
float gain);
public abstract Result SubmitMatrixInputBuffer(
IntPtr ctx,
float[] inputBuffer,
int inputChannelIndex);
public abstract Result GetInterleavedBinauralBuffer(
IntPtr ctx,
float[] outputBufferPtr,
uint numFrames,
bool isAccumulative);
public abstract Result GetPlanarBinauralBuffer(
IntPtr ctx,
float[][] outputBufferPtr,
uint numFrames,
bool isAccumulative);
public abstract Result GetInterleavedLoudspeakersBuffer(
IntPtr ctx,
float[] outputBufferPtr,
uint numFrames);
public abstract Result GetPlanarLoudspeakersBuffer(
IntPtr ctx,
float[][] outputBufferPtr,
uint numFrames);
public abstract Result UpdateScene(IntPtr ctx);
public abstract Result SetDopplerEffect(IntPtr ctx, int sourceId, bool on);
public abstract Result SetPlaybackMode(IntPtr ctx, PlaybackMode playbackMode);
public abstract Result SetLoudspeakerArray(
IntPtr ctx,
float[] positions,
int numLoudspeakers);
public abstract Result SetMappingMatrix(
IntPtr ctx,
float[] matrix,
int numInputChannels,
int numOutputChannels);
public abstract Result SetListenerPosition(
IntPtr ctx,
float[] position);
public abstract Result SetListenerOrientation(
IntPtr ctx,
float[] front,
float[] up);
public abstract Result SetListenerPose(
IntPtr ctx,
float[] position,
float[] front,
float[] up);
public abstract Result SetSourcePosition(
IntPtr ctx,
int sourceId,
float[] position);
public abstract Result SetSourceGain(
IntPtr ctx,
int sourceId,
float gain);
public abstract Result SetSourceSize(
IntPtr ctx,
int sourceId,
float volumetricSize);
public abstract Result UpdateSourceMode(
IntPtr ctx,
int sourceId,
SourceMode mode);
public abstract Result Destroy(IntPtr ctx);
}
public class ApiUnityImpl : Api
{
#if (UNITY_IPHONE || UNITY_WEBGL) && !UNITY_EDITOR
private static string DLLNAME = "__Internal";
#else
private const string DLLNAME = "PicoSpatializer";
#endif
[DllImport(DLLNAME, EntryPoint = "yggdrasil_get_version")]
private static extern string GetVersionImport(ref int major, ref int minor, ref int patch);
public override string GetVersion(ref int major, ref int minor, ref int patch)
{
return GetVersionImport(ref major, ref minor, ref patch);
}
[DllImport(DLLNAME, EntryPoint = "yggdrasil_audio_create_context")]
private static extern Result CreateContextImport(
ref IntPtr ctx,
RenderingMode mode,
uint framesPerBuffer,
uint sampleRate);
public override Result
CreateContext(
ref IntPtr ctx,
RenderingMode mode,
uint framesPerBuffer,
uint sampleRate
)
{
PXR_Plugin.System.UPxr_LogSdkApi("pico_spatial_audio_create_context|unity_native");
return CreateContextImport(ref ctx, mode, framesPerBuffer, sampleRate);
}
[DllImport(DLLNAME, EntryPoint = "yggdrasil_audio_initialize_context")]
private static extern Result InitializeContextImport(IntPtr ctx);
public override Result InitializeContext(IntPtr ctx)
{
return InitializeContextImport(ctx);
}
[DllImport(DLLNAME, EntryPoint = "yggdrasil_audio_submit_mesh")]
private static extern Result SubmitMeshImport(
IntPtr ctx,
float[] vertices,
int verticesCount,
int[] indices,
int indicesCount,
AcousticsMaterial material,
ref int geometryId);
public override Result SubmitMesh(
IntPtr ctx,
float[] vertices,
int verticesCount,
int[] indices,
int indicesCount,
AcousticsMaterial material,
ref int geometryId
)
{
return SubmitMeshImport(ctx, vertices, verticesCount, indices, indicesCount, material, ref geometryId);
}
[DllImport(DLLNAME, EntryPoint = "yggdrasil_audio_submit_mesh_and_material_factor")]
private static extern Result SubmitMeshAndMaterialFactorImport(
IntPtr ctx,
float[] vertices,
int verticesCount,
int[] indices,
int indicesCount,
float[] absorptionFactor,
float scatteringFactor,
float transmissionFactor,
ref int geometryId);
public override Result SubmitMeshAndMaterialFactor(
IntPtr ctx,
float[] vertices,
int verticesCount,
int[] indices,
int indicesCount,
float[] absorptionFactor,
float scatteringFactor,
float transmissionFactor,
ref int geometryId)
{
return SubmitMeshAndMaterialFactorImport(ctx, vertices, verticesCount, indices, indicesCount,
absorptionFactor, scatteringFactor, transmissionFactor, ref geometryId);
}
[DllImport(DLLNAME, EntryPoint = "yggdrasil_audio_submit_mesh_with_config")]
private static extern Result SubmitMeshWithConfigImport(IntPtr ctx, float[] vertices, int verticesCount,
int[] indices,
int indicesCount,
ref MeshConfig config, ref int geometryId, bool isAsync);
public override Result SubmitMeshWithConfig(IntPtr ctx, float[] vertices, int verticesCount, int[] indices,
int indicesCount,
ref MeshConfig config, ref int geometryId)
{
PXR_Plugin.System.UPxr_LogSdkApi("pico_spatial_audio_submit_mesh_with_config|unity_native");
return SubmitMeshWithConfigImport(ctx, vertices, verticesCount, indices, indicesCount, ref config,
ref geometryId, false);
}
[DllImport(DLLNAME, EntryPoint = "yggdrasil_audio_update_mesh")]
private static extern Result UpdateMeshImport(IntPtr ctx, int geometryId, float[] newVertices, int newVerticesCount, int[] newIndices,
int newIndicesCount, ref MeshConfig config, ref int newGeometryId, bool isAsync = false);
public override Result UpdateMesh(IntPtr ctx, int geometryId, float[] newVertices, int newVerticesCount, int[] newIndices,
int newIndicesCount, ref MeshConfig config, ref int newGeometryId, bool isAsync = false)
{
PXR_Plugin.System.UPxr_LogSdkApi("pico_spatial_audio_update_mesh|unity_native");
return UpdateMeshImport(ctx, geometryId, newVertices, newVerticesCount, newIndices, newIndicesCount,
ref config, ref newGeometryId, isAsync);
}
[DllImport(DLLNAME, EntryPoint = "yggdrasil_audio_remove_mesh")]
private static extern Result RemoveMeshImport(IntPtr ctx, int geometryId);
public override Result RemoveMesh(IntPtr ctx, int geometryId)
{
return RemoveMeshImport(ctx, geometryId);
}
[DllImport(DLLNAME, EntryPoint = "yggdrasil_audio_get_num_of_geometries")]
private static extern int GetNumOfGeometriesImport(IntPtr ctx);
public override int GetNumOfGeometries(IntPtr ctx)
{
return GetNumOfGeometriesImport(ctx);
}
[DllImport(DLLNAME, EntryPoint = "yggdrasil_audio_set_mesh_config")]
private static extern Result SetMeshConfigImport(IntPtr ctx, int geometryId, ref MeshConfig config,
uint propertyMask);
public override Result SetMeshConfig(IntPtr ctx, int geometryId, ref MeshConfig config, uint propertyMask)
{
return SetMeshConfigImport(ctx, geometryId, ref config, propertyMask);
}
[DllImport(DLLNAME, EntryPoint = "yggdrasil_audio_get_absorption_factor")]
private static extern Result GetAbsorptionFactorImport(
AcousticsMaterial material,
float[] absorptionFactor);
public override Result GetAbsorptionFactor(
AcousticsMaterial material,
float[] absorptionFactor
)
{
return GetAbsorptionFactorImport(material, absorptionFactor);
}
[DllImport(DLLNAME, EntryPoint = "yggdrasil_audio_get_scattering_factor")]
private static extern Result GetScatteringFactorImport(
AcousticsMaterial material,
ref float scatteringFactor);
public override Result GetScatteringFactor(
AcousticsMaterial material,
ref float scatteringFactor
)
{
return GetScatteringFactorImport(material, ref scatteringFactor);
}
[DllImport(DLLNAME, EntryPoint = "yggdrasil_audio_get_transmission_factor")]
private static extern Result GetTransmissionFactorImport(
AcousticsMaterial material,
ref float transmissionFactor);
public override Result GetTransmissionFactor(
AcousticsMaterial material,
ref float transmissionFactor
)
{
return GetTransmissionFactorImport(material, ref transmissionFactor);
}
[DllImport(DLLNAME, EntryPoint = "yggdrasil_audio_commit_scene")]
private static extern Result CommitSceneImport(IntPtr ctx);
public override Result CommitScene(IntPtr ctx)
{
return CommitSceneImport(ctx);
}
[DllImport(DLLNAME, EntryPoint = "yggdrasil_audio_add_source")]
private static extern Result AddSourceImport(
IntPtr ctx,
SourceMode sourceMode,
float[] position,
ref int sourceId,
bool isAsync);
public override Result AddSource(
IntPtr ctx,
SourceMode sourceMode,
float[] position,
ref int sourceId,
bool isAsync
)
{
return AddSourceImport(ctx, sourceMode, position, ref sourceId, isAsync);
}
[DllImport(DLLNAME, EntryPoint = "yggdrasil_audio_add_source_with_orientation")]
private static extern Result AddSourceWithOrientationImport(
IntPtr ctx,
SourceMode mode,
float[] position,
float[] front,
float[] up,
float radius,
ref int sourceId,
bool isAsync);
public override Result AddSourceWithOrientation(
IntPtr ctx,
SourceMode mode,
float[] position,
float[] front,
float[] up,
float radius,
ref int sourceId,
bool isAsync
)
{
return AddSourceWithOrientationImport(ctx, mode, position, front, up, radius, ref sourceId, isAsync);
}
[DllImport(DLLNAME, EntryPoint = "yggdrasil_audio_add_source_with_config")]
private static extern Result AddSourceWithConfigImport(
IntPtr ctx,
ref SourceConfig sourceConfig,
ref int sourceId,
bool isAsync);
public override Result AddSourceWithConfig(
IntPtr ctx,
ref SourceConfig sourceConfig,
ref int sourceId,
bool isAsync
)
{
PXR_Plugin.System.UPxr_LogSdkApi("pico_spatial_audio_add_source_with_config|unity_native");
return AddSourceWithConfigImport(ctx, ref sourceConfig, ref sourceId, isAsync);
}
[DllImport(DLLNAME, EntryPoint = "yggdrasil_audio_set_source_config")]
private static extern Result SetSourceConfigImport(IntPtr ctx, int sourceId, ref SourceConfig sourceConfig,
uint propertyMask);
public override Result SetSourceConfig(IntPtr ctx, int sourceId, ref SourceConfig sourceConfig,
uint propertyMask)
{
return SetSourceConfigImport(ctx, sourceId, ref sourceConfig, propertyMask);
}
[DllImport(DLLNAME, EntryPoint = "yggdrasil_audio_set_source_attenuation_mode")]
private static extern Result SetSourceAttenuationModeImport(IntPtr ctx,
int sourceId,
SourceAttenuationMode mode,
DistanceAttenuationCallback directDistanceAttenuationCallback,
DistanceAttenuationCallback indirectDistanceAttenuationCallback);
public override Result SetSourceAttenuationMode(
IntPtr ctx,
int sourceId,
SourceAttenuationMode mode,
DistanceAttenuationCallback directDistanceAttenuationCallback,
DistanceAttenuationCallback indirectDistanceAttenuationCallback
)
{
return SetSourceAttenuationModeImport(ctx, sourceId, mode, directDistanceAttenuationCallback,
indirectDistanceAttenuationCallback);
}
[DllImport(DLLNAME, EntryPoint = "yggdrasil_audio_set_source_range")]
private static extern Result SetSourceRangeImport(IntPtr ctx, int sourceId, float rangeMin, float rangeMax);
public override Result SetSourceRange(IntPtr ctx, int sourceId, float rangeMin, float rangeMax)
{
return SetSourceRangeImport(ctx, sourceId, rangeMin, rangeMax);
}
[DllImport(DLLNAME, EntryPoint = "yggdrasil_audio_remove_source")]
private static extern Result RemoveSourceImport(IntPtr ctx, int sourceId, bool is_async);
public override Result RemoveSource(IntPtr ctx, int sourceId)
{
return RemoveSourceImport(ctx, sourceId, true);
}
[DllImport(DLLNAME, EntryPoint = "yggdrasil_audio_submit_source_buffer")]
private static extern Result SubmitSourceBufferImport(
IntPtr ctx,
int sourceId,
float[] inputBufferPtr,
uint numFrames);
public override Result SubmitSourceBuffer(
IntPtr ctx,
int sourceId,
float[] inputBufferPtr,
uint numFrames
)
{
return SubmitSourceBufferImport(ctx, sourceId, inputBufferPtr, numFrames);
}
[DllImport(DLLNAME, EntryPoint = "yggdrasil_audio_submit_ambisonic_channel_buffer")]
private static extern Result SubmitAmbisonicChannelBufferImport(
IntPtr ctx,
float[] ambisonicChannelBuffer,
int order,
int degree,
AmbisonicNormalizationType normType,
float gain);
public override Result SubmitAmbisonicChannelBuffer(
IntPtr ctx,
float[] ambisonicChannelBuffer,
int order,
int degree,
AmbisonicNormalizationType normType,
float gain
)
{
return SubmitAmbisonicChannelBufferImport(ctx, ambisonicChannelBuffer, order, degree, normType, gain);
}
[DllImport(DLLNAME, EntryPoint = "yggdrasil_audio_submit_interleaved_ambisonic_buffer")]
private static extern Result SubmitInterleavedAmbisonicBufferImport(
IntPtr ctx,
float[] ambisonicBuffer,
int ambisonicOrder,
AmbisonicNormalizationType normType,
float gain);
public override Result SubmitInterleavedAmbisonicBuffer(
IntPtr ctx,
float[] ambisonicBuffer,
int ambisonicOrder,
AmbisonicNormalizationType normType,
float gain
)
{
return SubmitInterleavedAmbisonicBufferImport(ctx, ambisonicBuffer, ambisonicOrder, normType, gain);
}
[DllImport(DLLNAME, EntryPoint = "yggdrasil_audio_submit_matrix_input_buffer")]
private static extern Result SubmitMatrixInputBufferImport(
IntPtr ctx,
float[] inputBuffer,
int inputChannelIndex);
public override Result SubmitMatrixInputBuffer(
IntPtr ctx,
float[] inputBuffer,
int inputChannelIndex
)
{
return SubmitMatrixInputBufferImport(ctx, inputBuffer, inputChannelIndex);
}
[DllImport(DLLNAME, EntryPoint = "yggdrasil_audio_get_interleaved_binaural_buffer")]
private static extern Result GetInterleavedBinauralBufferImport(
IntPtr ctx,
float[] outputBufferPtr,
uint numFrames,
bool isAccumulative);
public override Result GetInterleavedBinauralBuffer(
IntPtr ctx,
float[] outputBufferPtr,
uint numFrames,
bool isAccumulative
)
{
return GetInterleavedBinauralBufferImport(ctx, outputBufferPtr, numFrames, isAccumulative);
}
[DllImport(DLLNAME, EntryPoint = "yggdrasil_audio_get_planar_binaural_buffer")]
private static extern Result GetPlanarBinauralBufferImport(
IntPtr ctx,
float[][] outputBufferPtr,
uint numFrames,
bool isAccumulative);
public override Result GetPlanarBinauralBuffer(
IntPtr ctx,
float[][] outputBufferPtr,
uint numFrames,
bool isAccumulative
)
{
return GetPlanarBinauralBufferImport(ctx, outputBufferPtr, numFrames, isAccumulative);
}
[DllImport(DLLNAME, EntryPoint = "yggdrasil_audio_get_interleaved_loudspeakers_buffer")]
private static extern Result GetInterleavedLoudspeakersBufferImport(
IntPtr ctx,
float[] outputBufferPtr,
uint numFrames);
public override Result GetInterleavedLoudspeakersBuffer(
IntPtr ctx,
float[] outputBufferPtr,
uint numFrames
)
{
return GetInterleavedLoudspeakersBufferImport(ctx, outputBufferPtr, numFrames);
}
[DllImport(DLLNAME, EntryPoint = "yggdrasil_audio_get_planar_loudspeakers_buffer")]
private static extern Result GetPlanarLoudspeakersBufferImport(
IntPtr ctx,
float[][] outputBufferPtr,
uint numFrames);
public override Result GetPlanarLoudspeakersBuffer(
IntPtr ctx,
float[][] outputBufferPtr,
uint numFrames
)
{
return GetPlanarLoudspeakersBufferImport(ctx, outputBufferPtr, numFrames);
}
[DllImport(DLLNAME, EntryPoint = "yggdrasil_audio_update_scene")]
private static extern Result UpdateSceneImport(IntPtr ctx);
public override Result UpdateScene(IntPtr ctx)
{
AmbisonicDecoderUpdate();
return UpdateSceneImport(ctx);
}
[DllImport(DLLNAME, EntryPoint = "yggdrasil_audio_set_doppler_effect")]
private static extern Result SetDopplerEffectImport(IntPtr ctx, int sourceId, bool on);
public override Result SetDopplerEffect(IntPtr ctx, int sourceId, bool on)
{
return SetDopplerEffectImport(ctx, sourceId, on);
}
[DllImport(DLLNAME, EntryPoint = "yggdrasil_audio_set_playback_mode")]
private static extern Result SetPlaybackModeImport(
IntPtr ctx,
PlaybackMode playbackMode);
public override Result SetPlaybackMode(IntPtr ctx, PlaybackMode playbackMode)
{
return SetPlaybackModeImport(ctx, playbackMode);
}
[DllImport(DLLNAME, EntryPoint = "yggdrasil_audio_set_loudspeaker_array")]
private static extern Result SetLoudspeakerArrayImport(
IntPtr ctx,
float[] positions,
int numLoudspeakers);
public override Result SetLoudspeakerArray(
IntPtr ctx,
float[] positions,
int numLoudspeakers
)
{
return SetLoudspeakerArrayImport(ctx, positions, numLoudspeakers);
}
[DllImport(DLLNAME, EntryPoint = "yggdrasil_audio_set_mapping_matrix")]
private static extern Result SetMappingMatrixImport(
IntPtr ctx,
float[] matrix,
int numInputChannels,
int numOutputChannels);
public override Result SetMappingMatrix(
IntPtr ctx,
float[] matrix,
int numInputChannels,
int numOutputChannels
)
{
return SetMappingMatrixImport(ctx, matrix, numInputChannels, numOutputChannels);
}
[DllImport(DLLNAME, EntryPoint = "yggdrasil_audio_set_listener_position")]
private static extern Result SetListenerPositionImport(
IntPtr ctx,
float[] position);
public override Result SetListenerPosition(
IntPtr ctx,
float[] position
)
{
return SetListenerPositionImport(ctx, position);
}
[DllImport(DLLNAME, EntryPoint = "yggdrasil_audio_set_listener_orientation")]
private static extern Result SetListenerOrientationImport(
IntPtr ctx,
float[] front,
float[] up);
public override Result SetListenerOrientation(
IntPtr ctx,
float[] front,
float[] up
)
{
return SetListenerOrientationImport(ctx, front, up);
}
[DllImport(DLLNAME, EntryPoint = "yggdrasil_audio_set_listener_pose")]
private static extern Result SetListenerPoseImport(
IntPtr ctx,
float[] position,
float[] front,
float[] up);
public override Result SetListenerPose(
IntPtr ctx,
float[] position,
float[] front,
float[] up
)
{
return SetListenerPoseImport(ctx, position, front, up);
}
[DllImport(DLLNAME, EntryPoint = "yggdrasil_audio_set_source_position")]
private static extern Result SetSourcePositionImport(
IntPtr ctx,
int sourceId,
float[] position);
public override Result SetSourcePosition(
IntPtr ctx,
int sourceId,
float[] position
)
{
return SetSourcePositionImport(ctx, sourceId, position);
}
[DllImport(DLLNAME, EntryPoint = "yggdrasil_audio_set_source_gain")]
private static extern Result SetSourceGainImport(
IntPtr ctx,
int sourceId,
float gain);
public override Result SetSourceGain(
IntPtr ctx,
int sourceId,
float gain
)
{
return SetSourceGainImport(ctx, sourceId, gain);
}
[DllImport(DLLNAME, EntryPoint = "yggdrasil_audio_set_source_size")]
private static extern Result SetSourceSizeImport(
IntPtr ctx,
int sourceId,
float volumetricSize);
public override Result SetSourceSize(
IntPtr ctx,
int sourceId,
float volumetricSize
)
{
return SetSourceSizeImport(ctx, sourceId, volumetricSize);
}
[DllImport(DLLNAME, EntryPoint = "yggdrasil_audio_update_source_mode")]
private static extern Result UpdateSourceModeImport(
IntPtr ctx,
int sourceId,
SourceMode mode);
public override Result UpdateSourceMode(
IntPtr ctx,
int sourceId,
SourceMode mode
)
{
return UpdateSourceModeImport(ctx, sourceId, mode);
}
[DllImport(DLLNAME, EntryPoint = "yggdrasil_audio_destroy")]
private static extern Result DestroyImport(IntPtr ctx);
public override Result Destroy(IntPtr ctx)
{
return DestroyImport(ctx);
}
// Call from Pico's unity native ambisonic decoder
[DllImport("PicoAmbisonicDecoder", EntryPoint = "yggdrasil_audio_unity_ambisonic_decoder_update")]
private static extern void AmbisonicDecoderUpdate();
}
public class ApiWwiseImpl : Api
{
#if (UNITY_IPHONE || UNITY_WEBGL) && !UNITY_EDITOR
private static string DLLNAME = "__Internal";
#else
private const string DLLNAME = "PicoSpatializerWwise";
#endif
[DllImport(DLLNAME, EntryPoint = "yggdrasil_get_version")]
private static extern string GetVersionImport(ref int major, ref int minor, ref int patch);
public override string GetVersion(ref int major, ref int minor, ref int patch)
{
return GetVersionImport(ref major, ref minor, ref patch);
}
[DllImport(DLLNAME, EntryPoint = "CSharp_PicoSpatializerWwise_CreateContext")]
private static extern Result CreateContextImport(ref IntPtr ctx,
RenderingMode mode,
uint framesPerBuffer,
uint sampleRate);
public override Result
CreateContext(
ref IntPtr ctx,
RenderingMode mode,
uint framesPerBuffer,
uint sampleRate
)
{
PXR_Plugin.System.UPxr_LogSdkApi("pico_spatial_audio_create_context|wwise");
return CreateContextImport(ref ctx, mode, framesPerBuffer, sampleRate);
}
public override Result InitializeContext(IntPtr ctx)
{
Debug.Log("Wwise plugin will automatically initialize context after creating.");
return Result.Success;
}
[DllImport(DLLNAME, EntryPoint = "CSharp_PicoSpatializerWwise_SubmitMesh")]
private static extern Result SubmitMeshImport(
IntPtr ctx,
float[] vertices,
int verticesCount,
int[] indices,
int indicesCount,
AcousticsMaterial material,
ref int geometryId);
public override Result SubmitMesh(
IntPtr ctx,
float[] vertices,
int verticesCount,
int[] indices,
int indicesCount,
AcousticsMaterial material,
ref int geometryId
)
{
return SubmitMeshImport(ctx, vertices, verticesCount, indices, indicesCount, material, ref geometryId);
}
[DllImport(DLLNAME, EntryPoint = "CSharp_PicoSpatializerWwise_SubmitMeshAndMaterialFactor")]
private static extern Result SubmitMeshAndMaterialFactorImport(
IntPtr ctx,
float[] vertices,
int verticesCount,
int[] indices,
int indicesCount,
float[] absorptionFactor,
float scatteringFactor,
float transmissionFactor,
ref int geometryId);
public override Result SubmitMeshAndMaterialFactor(
IntPtr ctx,
float[] vertices,
int verticesCount,
int[] indices,
int indicesCount,
float[] absorptionFactor,
float scatteringFactor,
float transmissionFactor,
ref int geometryId)
{
return SubmitMeshAndMaterialFactorImport(ctx, vertices, verticesCount, indices, indicesCount,
absorptionFactor, scatteringFactor, transmissionFactor, ref geometryId);
}
[DllImport(DLLNAME, EntryPoint = "CSharp_PicoSpatializerWwise_SubmitMeshWithConfig")]
private static extern Result SubmitMeshWithConfigImport(IntPtr ctx, float[] vertices, int verticesCount,
int[] indices,
int indicesCount,
ref MeshConfig config, ref int geometryId);
public override Result SubmitMeshWithConfig(IntPtr ctx, float[] vertices, int verticesCount, int[] indices,
int indicesCount,
ref MeshConfig config, ref int geometryId)
{
PXR_Plugin.System.UPxr_LogSdkApi("pico_spatial_audio_submit_mesh_with_config|wwise");
return SubmitMeshWithConfigImport(ctx, vertices, verticesCount, indices, indicesCount, ref config,
ref geometryId);
}
public override Result UpdateMesh(IntPtr ctx, int geometryId, float[] newVertices, int newVerticesCount, int[] newIndices,
int newIndicesCount, ref MeshConfig config, ref int newGeometryId, bool isAsync = false)
{
throw new NotImplementedException();
}
[DllImport(DLLNAME, EntryPoint = "CSharp_PicoSpatializerWwise_RemoveMesh")]
private static extern Result RemoveMeshImport(IntPtr ctx, int geometryId);
public override Result RemoveMesh(IntPtr ctx, int geometryId)
{
return RemoveMeshImport(ctx, geometryId);
}
public override int GetNumOfGeometries(IntPtr ctx)
{
throw new NotImplementedException();
}
[DllImport(DLLNAME, EntryPoint = "CSharp_PicoSpatializerWwise_SetMeshConfig")]
private static extern Result SetMeshConfigImport(IntPtr ctx, int geometryId, ref MeshConfig config,
uint propertyMask);
public override Result SetMeshConfig(IntPtr ctx, int geometryId, ref MeshConfig config, uint propertyMask)
{
return SetMeshConfigImport(ctx, geometryId, ref config, propertyMask);
}
[DllImport(DLLNAME, EntryPoint = "CSharp_PicoSpatializerWwise_GetAbsorptionFactor")]
private static extern Result GetAbsorptionFactorImport(
AcousticsMaterial material,
float[] absorptionFactor);
public override Result GetAbsorptionFactor(
AcousticsMaterial material,
float[] absorptionFactor
)
{
return GetAbsorptionFactorImport(material, absorptionFactor);
}
[DllImport(DLLNAME, EntryPoint = "CSharp_PicoSpatializerWwise_GetScatteringFactor")]
private static extern Result GetScatteringFactorImport(
AcousticsMaterial material,
ref float scatteringFactor);
public override Result GetScatteringFactor(
AcousticsMaterial material,
ref float scatteringFactor
)
{
return GetScatteringFactorImport(material, ref scatteringFactor);
}
[DllImport(DLLNAME, EntryPoint = "CSharp_PicoSpatializerWwise_GetTransmissionFactor")]
private static extern Result GetTransmissionFactorImport(
AcousticsMaterial material,
ref float transmissionFactor);
public override Result GetTransmissionFactor(
AcousticsMaterial material,
ref float transmissionFactor
)
{
return GetTransmissionFactorImport(material, ref transmissionFactor);
}
[DllImport(DLLNAME, EntryPoint = "CSharp_PicoSpatializerWwise_CommitScene")]
private static extern Result CommitSceneImport(IntPtr ctx);
public override Result CommitScene(IntPtr ctx)
{
return CommitSceneImport(ctx);
}
public override Result AddSource(
IntPtr ctx,
SourceMode sourceMode,
float[] position,
ref int sourceId,
bool isAsync
)
{
Debug.LogWarning("Unexpected API calling.");
return Result.Error;
}
public override Result AddSourceWithOrientation(
IntPtr ctx,
SourceMode mode,
float[] position,
float[] front,
float[] up,
float radius,
ref int sourceId,
bool isAsync
)
{
Debug.LogWarning("Unexpected API calling.");
return Result.Error;
}
public override Result AddSourceWithConfig(
IntPtr ctx,
ref SourceConfig sourceConfig,
ref int sourceId,
bool isAsync
)
{
Debug.LogWarning("Unexpected API calling.");
return Result.Error;
}
public override Result SetSourceConfig(IntPtr ctx, int sourceId, ref SourceConfig sourceConfig,
uint propertyMask)
{
Debug.LogWarning("Unexpected API calling.");
return Result.Error;
}
public override Result SetSourceAttenuationMode(
IntPtr ctx,
int sourceId,
SourceAttenuationMode mode,
DistanceAttenuationCallback directDistanceAttenuationCallback,
DistanceAttenuationCallback indirectDistanceAttenuationCallback
)
{
Debug.LogWarning("Unexpected API calling.");
return Result.Error;
}
public override Result SetSourceRange(IntPtr ctx, int sourceId, float rangeMin, float rangeMax)
{
Debug.LogWarning("Unexpected API calling.");
return Result.Error;
}
public override Result RemoveSource(IntPtr ctx, int sourceId)
{
Debug.LogWarning("Unexpected API calling.");
return Result.Error;
}
public override Result SubmitSourceBuffer(
IntPtr ctx,
int sourceId,
float[] inputBufferPtr,
uint numFrames
)
{
Debug.LogWarning("Unexpected API calling.");
return Result.Error;
}
public override Result SubmitAmbisonicChannelBuffer(
IntPtr ctx,
float[] ambisonicChannelBuffer,
int order,
int degree,
AmbisonicNormalizationType normType,
float gain
)
{
Debug.LogWarning("Unexpected API calling.");
return Result.Error;
}
public override Result SubmitInterleavedAmbisonicBuffer(
IntPtr ctx,
float[] ambisonicBuffer,
int ambisonicOrder,
AmbisonicNormalizationType normType,
float gain
)
{
Debug.LogWarning("Unexpected API calling.");
return Result.Error;
}
public override Result SubmitMatrixInputBuffer(
IntPtr ctx,
float[] inputBuffer,
int inputChannelIndex
)
{
Debug.LogWarning("Unexpected API calling.");
return Result.Error;
}
public override Result GetInterleavedBinauralBuffer(
IntPtr ctx,
float[] outputBufferPtr,
uint numFrames,
bool isAccumulative
)
{
Debug.LogWarning("Unexpected API calling.");
return Result.Error;
}
public override Result GetPlanarBinauralBuffer(
IntPtr ctx,
float[][] outputBufferPtr,
uint numFrames,
bool isAccumulative
)
{
Debug.LogWarning("Unexpected API calling.");
return Result.Error;
}
public override Result GetInterleavedLoudspeakersBuffer(
IntPtr ctx,
float[] outputBufferPtr,
uint numFrames
)
{
Debug.LogWarning("Unexpected API calling.");
return Result.Error;
}
public override Result GetPlanarLoudspeakersBuffer(
IntPtr ctx,
float[][] outputBufferPtr,
uint numFrames
)
{
Debug.LogWarning("Unexpected API calling.");
return Result.Error;
}
[DllImport(DLLNAME, EntryPoint = "CSharp_PicoSpatializerWwise_UpdateScene")]
private static extern Result UpdateSceneImport(IntPtr ctx);
public override Result UpdateScene(IntPtr ctx)
{
return UpdateSceneImport(ctx);
}
public override Result SetDopplerEffect(IntPtr ctx, int sourceId, bool on)
{
Debug.LogWarning("Unexpected API calling.");
return Result.Error;
}
public override Result SetPlaybackMode(IntPtr ctx, PlaybackMode playbackMode)
{
Debug.LogWarning("Unexpected API calling.");
return Result.Error;
}
public override Result SetLoudspeakerArray(
IntPtr ctx,
float[] positions,
int numLoudspeakers
)
{
Debug.LogWarning("Unexpected API calling.");
return Result.Error;
}
public override Result SetMappingMatrix(
IntPtr ctx,
float[] matrix,
int numInputChannels,
int numOutputChannels
)
{
Debug.LogWarning("Unexpected API calling.");
return Result.Error;
}
public override Result SetListenerPosition(
IntPtr ctx,
float[] position
)
{
Debug.LogWarning("Unexpected API calling.");
return Result.Error;
}
public override Result SetListenerOrientation(
IntPtr ctx,
float[] front,
float[] up
)
{
Debug.LogWarning("Unexpected API calling.");
return Result.Error;
}
public override Result SetListenerPose(
IntPtr ctx,
float[] position,
float[] front,
float[] up
)
{
Debug.LogWarning("Unexpected API calling.");
return Result.Error;
}
public override Result SetSourcePosition(
IntPtr ctx,
int sourceId,
float[] position
)
{
Debug.LogWarning("Unexpected API calling.");
return Result.Error;
}
public override Result SetSourceGain(
IntPtr ctx,
int sourceId,
float gain
)
{
Debug.LogWarning("Unexpected API calling.");
return Result.Error;
}
public override Result SetSourceSize(
IntPtr ctx,
int sourceId,
float volumetricSize
)
{
Debug.LogWarning("Unexpected API calling.");
return Result.Error;
}
public override Result UpdateSourceMode(
IntPtr ctx,
int sourceId,
SourceMode mode
)
{
Debug.LogWarning("Unexpected API calling.");
return Result.Error;
}
[DllImport(DLLNAME, EntryPoint = "CSharp_PicoSpatializerWwise_Destroy")]
private static extern Result DestroyImport(IntPtr ctx);
public override Result Destroy(IntPtr ctx)
{
return DestroyImport(ctx);
}
}
}
}