Userspace: Add simple AudioServer and LibAudio

This commit is contained in:
2025-07-10 17:30:41 +03:00
parent 85d195212a
commit 3aea2c007d
13 changed files with 941 additions and 0 deletions

View File

@@ -0,0 +1,48 @@
#pragma once
#include <BAN/Array.h>
#include <BAN/ByteSpan.h>
#include <BAN/CircularQueue.h>
#include <BAN/HashMap.h>
#include <LibAudio/Audio.h>
class AudioServer
{
BAN_NON_MOVABLE(AudioServer);
BAN_NON_COPYABLE(AudioServer);
public:
AudioServer(int audio_device_fd);
BAN::ErrorOr<void> on_new_client(int fd);
void on_client_disconnect(int fd);
bool on_client_packet(int fd, long smo_key);
void update();
private:
struct ClientInfo
{
LibAudio::AudioBuffer* buffer;
size_t sample_frames_queued { 0 };
};
private:
enum class AddOrRemove { Add, Remove };
void reset_kernel_buffer();
void send_samples();
private:
const int m_audio_device_fd;
uint32_t m_sample_rate;
uint32_t m_channels;
size_t m_samples_sent { 0 };
BAN::Array<uint8_t, 1024> m_send_buffer;
BAN::CircularQueue<double, 64 * 1024> m_samples;
BAN::HashMap<int, ClientInfo> m_audio_buffers;
};