mirror of
https://github.com/ZuneDev/Xune.git
synced 2026-07-27 13:13:10 -07:00
107 lines
3.2 KiB
C#
107 lines
3.2 KiB
C#
// Decompiled with JetBrains decompiler
|
|
// Type: Microsoft.Iris.Render.Sound.Sound
|
|
// Assembly: UIX.RenderApi, Version=4.8.0.0, Culture=neutral, PublicKeyToken=ddd0da4d3e678217
|
|
// MVID: D47658B8-A8EA-43D6-8837-ECE823BFFFC1
|
|
// Assembly location: C:\Program Files\Zune\UIX.RenderApi.dll
|
|
|
|
using Microsoft.Iris.Render.Animation;
|
|
using Microsoft.Iris.Render.Common;
|
|
using Microsoft.Iris.Render.Protocol;
|
|
using Microsoft.Iris.Render.Protocols.Splash.Rendering;
|
|
using System;
|
|
|
|
namespace Microsoft.Iris.Render.Sound
|
|
{
|
|
internal class Sound :
|
|
SharedRenderObject,
|
|
ISound,
|
|
ISharedRenderObject,
|
|
IRenderHandleOwner,
|
|
IActivatableObject,
|
|
IActivatable
|
|
{
|
|
public static readonly string PlayMethod = "Play";
|
|
public static readonly string StopMethod = "Stop";
|
|
private RemoteSound m_remoteSound;
|
|
private SoundBuffer m_bufferOwner;
|
|
|
|
internal Sound(SoundBuffer buffer)
|
|
{
|
|
this.m_remoteSound = this.CreateRemoteObject(buffer);
|
|
this.m_bufferOwner = buffer;
|
|
}
|
|
|
|
protected override void Dispose(bool inDispose)
|
|
{
|
|
try
|
|
{
|
|
if (this.m_remoteSound != null)
|
|
{
|
|
this.m_remoteSound.Dispose();
|
|
this.m_remoteSound = null;
|
|
}
|
|
this.m_bufferOwner = null;
|
|
}
|
|
finally
|
|
{
|
|
base.Dispose(inDispose);
|
|
}
|
|
}
|
|
|
|
void ISound.Play()
|
|
{
|
|
if (!this.m_bufferOwner.IsContentLoaded)
|
|
this.m_bufferOwner.LoadContent();
|
|
if (!this.m_bufferOwner.IsContentLoaded || !this.m_remoteSound.IsValid)
|
|
return;
|
|
this.m_remoteSound.SendPlay();
|
|
}
|
|
|
|
void ISound.Stop()
|
|
{
|
|
if (!this.m_bufferOwner.IsContentLoaded || !this.m_remoteSound.IsValid)
|
|
return;
|
|
this.m_remoteSound.SendStop();
|
|
}
|
|
|
|
private RemoteSound CreateRemoteObject(SoundBuffer buffer)
|
|
{
|
|
RemoteSound remoteSound = null;
|
|
RENDERHANDLE handle = buffer.Device.Session.AllocateRenderHandle(this);
|
|
try
|
|
{
|
|
buffer.Device.CreateRemoteSound(handle, buffer);
|
|
remoteSound = buffer.Device.Session.BuildSoundFromHandle(handle);
|
|
return remoteSound;
|
|
}
|
|
finally
|
|
{
|
|
if (!remoteSound.IsValid)
|
|
buffer.Device.Session.FreeRenderHandle(handle);
|
|
}
|
|
}
|
|
|
|
RENDERHANDLE IRenderHandleOwner.RenderHandle => this.m_remoteSound.RenderHandle;
|
|
|
|
void IRenderHandleOwner.OnDisconnect() => this.m_remoteSound = null;
|
|
|
|
RENDERHANDLE IActivatableObject.GetObjectId() => this.m_remoteSound.RenderHandle;
|
|
|
|
uint IActivatableObject.GetMethodId(string methodName)
|
|
{
|
|
if (methodName == PlayMethod)
|
|
return 1;
|
|
if (methodName == StopMethod)
|
|
return 2;
|
|
Debug2.Validate(false, typeof(ArgumentException), "Unsupported method: {0}", methodName);
|
|
return 0;
|
|
}
|
|
|
|
protected enum ActivatableMethods : uint
|
|
{
|
|
Play = 1,
|
|
Stop = 2,
|
|
}
|
|
}
|
|
}
|