3 #if SILICONSTUDIO_PLATFORM_WINDOWS
6 using System.Runtime.InteropServices;
7 using System.Threading;
11 namespace SiliconStudio.
Paradox.Audio
13 public partial class DynamicSoundEffectInstance
16 private void SubmitBufferImpl(byte[] buffer,
int offset,
int byteCount)
18 var gcHandle = GCHandle.Alloc(buffer, GCHandleType.Pinned);
19 submittedBufferHandles.Enqueue(
new SubBufferDataHandles(gcHandle));
21 var audioBuffer =
new AudioBuffer
23 AudioDataPointer = gcHandle.AddrOfPinnedObject()+offset,
24 AudioBytes = byteCount,
27 SourceVoice.SubmitSourceBuffer(audioBuffer, null);
29 Interlocked.Increment(ref pendingBufferCount);
30 Interlocked.Increment(ref internalPendingBufferCount);
33 private void InitializeDynamicSound()
35 SourceVoice.BufferEnd += OnBufferEnd;
38 private void OnBufferEnd(IntPtr context)
43 private void ClearBuffersImpl()
45 SourceVoice.FlushSourceBuffers();
52 private class SubBufferDataHandles
54 private GCHandle handle;
56 public SubBufferDataHandles(GCHandle handle)
61 public void FreeHandles()
66 public int HandleCount {
get {
return 1; } }