mirror of
https://github.com/Ale32bit/Capy64.git
synced 2025-01-19 02:56:43 +00:00
Remove audio_end event.
Add audio_need event, emitted when the channel is ready to get more audio data
This commit is contained in:
parent
32d5299a3f
commit
8703733b91
2 changed files with 19 additions and 27 deletions
|
@ -53,6 +53,13 @@ public class Audio : IDisposable
|
||||||
if (Channels[i] == sender)
|
if (Channels[i] == sender)
|
||||||
{
|
{
|
||||||
freeChannels[i] = true;
|
freeChannels[i] = true;
|
||||||
|
var pending = Channels[i].PendingBufferCount;
|
||||||
|
Capy64.Instance.LuaRuntime.QueueEvent("audio_need", LK =>
|
||||||
|
{
|
||||||
|
LK.PushInteger(i);
|
||||||
|
LK.PushInteger(pending);
|
||||||
|
return 2;
|
||||||
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -90,19 +90,6 @@ public class Audio : IComponent
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static async Task DelayEmit(TimeSpan time, DynamicSoundEffectInstance channel)
|
|
||||||
{
|
|
||||||
var waitTime = time - TimeSpan.FromMilliseconds(1000 / 60);
|
|
||||||
if (waitTime.TotalMilliseconds < 0)
|
|
||||||
waitTime = time;
|
|
||||||
await Task.Delay(waitTime);
|
|
||||||
_game.LuaRuntime.QueueEvent("audio_end", LK =>
|
|
||||||
{
|
|
||||||
LK.PushInteger(channel.PendingBufferCount);
|
|
||||||
return 1;
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
private static int L_Play(IntPtr state)
|
private static int L_Play(IntPtr state)
|
||||||
{
|
{
|
||||||
var L = Lua.FromIntPtr(state);
|
var L = Lua.FromIntPtr(state);
|
||||||
|
@ -147,7 +134,6 @@ public class Audio : IComponent
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
var ts = _game.Audio.Submit(rid, buffer);
|
var ts = _game.Audio.Submit(rid, buffer);
|
||||||
DelayEmit(ts, channel);
|
|
||||||
|
|
||||||
if (channel.State != SoundState.Playing)
|
if (channel.State != SoundState.Playing)
|
||||||
channel.Play();
|
channel.Play();
|
||||||
|
@ -194,7 +180,6 @@ public class Audio : IComponent
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
var ts = _game.Audio.Submit(rid, buffer);
|
var ts = _game.Audio.Submit(rid, buffer);
|
||||||
DelayEmit(ts, channel);
|
|
||||||
|
|
||||||
if (channel.State != SoundState.Playing)
|
if (channel.State != SoundState.Playing)
|
||||||
channel.Play();
|
channel.Play();
|
||||||
|
@ -215,8 +200,8 @@ public class Audio : IComponent
|
||||||
var id = (int)L.CheckInteger(1);
|
var id = (int)L.CheckInteger(1);
|
||||||
if (!_game.Audio.TryGetChannel(id, out var channel, out var rid))
|
if (!_game.Audio.TryGetChannel(id, out var channel, out var rid))
|
||||||
{
|
{
|
||||||
L.PushBoolean(false);
|
L.ArgumentError(1, "channel id not found");
|
||||||
return 1;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
channel.Resume();
|
channel.Resume();
|
||||||
|
@ -228,8 +213,8 @@ public class Audio : IComponent
|
||||||
var id = (int)L.CheckInteger(1);
|
var id = (int)L.CheckInteger(1);
|
||||||
if (!_game.Audio.TryGetChannel(id, out var channel, out var rid))
|
if (!_game.Audio.TryGetChannel(id, out var channel, out var rid))
|
||||||
{
|
{
|
||||||
L.PushBoolean(false);
|
L.ArgumentError(1, "channel id not found");
|
||||||
return 1;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
channel.Pause();
|
channel.Pause();
|
||||||
|
@ -241,8 +226,8 @@ public class Audio : IComponent
|
||||||
var id = (int)L.CheckInteger(1);
|
var id = (int)L.CheckInteger(1);
|
||||||
if (!_game.Audio.TryGetChannel(id, out var channel, out var rid))
|
if (!_game.Audio.TryGetChannel(id, out var channel, out var rid))
|
||||||
{
|
{
|
||||||
L.PushBoolean(false);
|
L.ArgumentError(1, "channel id not found");
|
||||||
return 1;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
channel.Stop();
|
channel.Stop();
|
||||||
|
@ -257,8 +242,8 @@ public class Audio : IComponent
|
||||||
var id = (int)L.CheckInteger(1);
|
var id = (int)L.CheckInteger(1);
|
||||||
if (!_game.Audio.TryGetChannel(id, out var channel, out var rid))
|
if (!_game.Audio.TryGetChannel(id, out var channel, out var rid))
|
||||||
{
|
{
|
||||||
L.PushNil();
|
L.ArgumentError(1, "channel id not found");
|
||||||
return 1;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
L.PushNumber(channel.Volume);
|
L.PushNumber(channel.Volume);
|
||||||
|
@ -272,8 +257,8 @@ public class Audio : IComponent
|
||||||
var id = (int)L.CheckInteger(1);
|
var id = (int)L.CheckInteger(1);
|
||||||
if (!_game.Audio.TryGetChannel(id, out var channel, out var rid))
|
if (!_game.Audio.TryGetChannel(id, out var channel, out var rid))
|
||||||
{
|
{
|
||||||
L.PushNil();
|
L.ArgumentError(1, "channel id not found");
|
||||||
return 1;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
var volume = (float)L.CheckNumber(2);
|
var volume = (float)L.CheckNumber(2);
|
||||||
|
@ -291,8 +276,8 @@ public class Audio : IComponent
|
||||||
var id = (int)L.CheckInteger(1);
|
var id = (int)L.CheckInteger(1);
|
||||||
if (!_game.Audio.TryGetChannel(id, out var channel, out var rid))
|
if (!_game.Audio.TryGetChannel(id, out var channel, out var rid))
|
||||||
{
|
{
|
||||||
L.PushNil();
|
L.ArgumentError(1, "channel id not found");
|
||||||
return 1;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
var status = channel.State switch
|
var status = channel.State switch
|
||||||
|
|
Loading…
Reference in a new issue