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
This commit is contained in:
parent
9493cdfe55
commit
57c4e6ef21
7 changed files with 254 additions and 63 deletions
|
@ -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);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue