aboutsummaryrefslogtreecommitdiff
path: root/Ryujinx.Audio/Renderers/SoundIo/SoundIoAudioTrack.cs
diff options
context:
space:
mode:
authorAc_K <Acoustik666@gmail.com>2020-11-20 21:59:01 +0100
committerGitHub <noreply@github.com>2020-11-20 21:59:01 +0100
commit57c4e6ef21d1f281b172aedcfd993a2ac43456ef (patch)
tree8ee5e5b42ab14bd8df52e823f3fcb4027e5ed873 /Ryujinx.Audio/Renderers/SoundIo/SoundIoAudioTrack.cs
parent9493cdfe553d77d8f37927ef2acf87cfbab1c467 (diff)
audout: Implement and fix some calls (#1725)
* audout: Implement GetAudioOutBufferCount, GetAudioOutPlayedSampleCount and FlushAudioOutBuffers This PR implement audout service calls: - GetAudioOutBufferCount - GetAudioOutPlayedSampleCount - FlushAudioOutBuffers The RE calls just give some hints about no extra checks. Since we use a totally different implementation because of our backend, I can't do something better for now. SetAudioOutVolume and GetAudioOutVolume are fixed too by set/get the volume of the current opened track, previous implementation was wrong. This fix #1133, fix #1258 and fix #1519. Thanks to @jduncanator for this help during the implementation and all his precious advices. * Fix some debug leftovers * Address jD feedback
Diffstat (limited to 'Ryujinx.Audio/Renderers/SoundIo/SoundIoAudioTrack.cs')
-rw-r--r--Ryujinx.Audio/Renderers/SoundIo/SoundIoAudioTrack.cs34
1 files changed, 34 insertions, 0 deletions
diff --git a/Ryujinx.Audio/Renderers/SoundIo/SoundIoAudioTrack.cs b/Ryujinx.Audio/Renderers/SoundIo/SoundIoAudioTrack.cs
index 6fdeb991..52c4ebc9 100644
--- a/Ryujinx.Audio/Renderers/SoundIo/SoundIoAudioTrack.cs
+++ b/Ryujinx.Audio/Renderers/SoundIo/SoundIoAudioTrack.cs
@@ -54,6 +54,16 @@ namespace Ryujinx.Audio.SoundIo
/// </summary>
public ConcurrentQueue<long> ReleasedBuffers { get; private set; }
+ /// <summary>
+ /// Buffer count of the track
+ /// </summary>
+ public uint BufferCount => (uint)m_ReservedBuffers.Count;
+
+ /// <summary>
+ /// Played sample count of the track
+ /// </summary>
+ public ulong PlayedSampleCount { get; private set; }
+
private int _hardwareChannels;
private int _virtualChannels;
@@ -430,6 +440,8 @@ namespace Ryujinx.Audio.SoundIo
AudioStream.EndWrite();
+ PlayedSampleCount += (ulong)samples.Length;
+
UpdateReleasedBuffers(samples.Length);
}
@@ -572,6 +584,28 @@ namespace Ryujinx.Audio.SoundIo
}
/// <summary>
+ /// Flush all track buffers
+ /// </summary>
+ public bool FlushBuffers()
+ {
+ m_Buffer.Clear();
+
+ if (m_ReservedBuffers.Count > 0)
+ {
+ foreach (var buffer in m_ReservedBuffers)
+ {
+ ReleasedBuffers.Enqueue(buffer.Tag);
+ }
+
+ OnBufferReleased();
+
+ return true;
+ }
+
+ return false;
+ }
+
+ /// <summary>
/// Closes the <see cref="SoundIoAudioTrack"/>
/// </summary>
public void Close()