mirror of
https://github.com/RGBCube/serenity
synced 2025-07-25 04:57:44 +00:00
Audio: Make basic streaming WAV playback work.
I had to solve a bunch of things simultaneously to make this work. Refactor AWavLoader to be a streaming loader rather than a one-shot one. The constructor parses the header, and if everything looks good, you can repeatedly ask the AWavLoader for sample buffers until it runs out. Also send a message from AudioServer when a buffer has finished playing. That allows us to implement a blocking variant of play(). Use all of this in aplay to play WAV files chunk-at-a-time. This is definitely not perfect and it's a little glitchy and skippy, but I think it's a step in the right direction.
This commit is contained in:
parent
a292d8cd5a
commit
426248098c
10 changed files with 88 additions and 64 deletions
|
@ -17,7 +17,7 @@ void AClientConnection::handshake()
|
|||
set_my_client_id(response.greeting.your_client_id);
|
||||
}
|
||||
|
||||
void AClientConnection::play(const ABuffer& buffer)
|
||||
void AClientConnection::play(const ABuffer& buffer, bool block)
|
||||
{
|
||||
auto shared_buf = SharedBuffer::create_with_size(buffer.size_in_bytes());
|
||||
if (!shared_buf) {
|
||||
|
@ -31,5 +31,5 @@ void AClientConnection::play(const ABuffer& buffer)
|
|||
ASAPI_ClientMessage request;
|
||||
request.type = ASAPI_ClientMessage::Type::PlayBuffer;
|
||||
request.play_buffer.buffer_id = shared_buf->shared_buffer_id();
|
||||
sync_request(request, ASAPI_ServerMessage::Type::PlayingBuffer);
|
||||
sync_request(request, block ? ASAPI_ServerMessage::Type::FinishedPlayingBuffer : ASAPI_ServerMessage::Type::PlayingBuffer);
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue