aboutsummaryrefslogtreecommitdiff
path: root/Ryujinx.Audio/Renderers/OpenAL/OpenALAudioTrack.cs
diff options
context:
space:
mode:
Diffstat (limited to 'Ryujinx.Audio/Renderers/OpenAL/OpenALAudioTrack.cs')
-rw-r--r--Ryujinx.Audio/Renderers/OpenAL/OpenALAudioTrack.cs31
1 files changed, 31 insertions, 0 deletions
diff --git a/Ryujinx.Audio/Renderers/OpenAL/OpenALAudioTrack.cs b/Ryujinx.Audio/Renderers/OpenAL/OpenALAudioTrack.cs
index 2f150998..6e016713 100644
--- a/Ryujinx.Audio/Renderers/OpenAL/OpenALAudioTrack.cs
+++ b/Ryujinx.Audio/Renderers/OpenAL/OpenALAudioTrack.cs
@@ -11,9 +11,12 @@ namespace Ryujinx.Audio
public int SampleRate { get; private set; }
public ALFormat Format { get; private set; }
public PlaybackState State { get; set; }
+ public float Volume { get; private set; }
public int HardwareChannels { get; }
public int VirtualChannels { get; }
+ public uint BufferCount => (uint)_buffers.Count;
+ public ulong PlayedSampleCount { get; set; }
private ReleaseCallback _callback;
@@ -125,6 +128,34 @@ namespace Ryujinx.Audio
}
}
+ public bool FlushBuffers()
+ {
+ while (_queuedTagsQueue.TryDequeue(out long tag))
+ {
+ _releasedTagsQueue.Enqueue(tag);
+ }
+
+ _callback();
+
+ foreach (var buffer in _buffers)
+ {
+ AL.DeleteBuffer(buffer.Value);
+ }
+
+ bool heldBuffers = _buffers.Count > 0;
+
+ _buffers.Clear();
+
+ return heldBuffers;
+ }
+
+ public void SetVolume(float volume)
+ {
+ Volume = volume;
+
+ AL.Source(SourceId, ALSourcef.Gain, Volume);
+ }
+
public void Dispose()
{
Dispose(true);