Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion main.c
Original file line number Diff line number Diff line change
Expand Up @@ -654,7 +654,7 @@ beebjit_main(void) {
util_bail("os_poller_create failed");
}

if (!headless_flag && !util_has_option(p_opt_flags, "sound:off")) {
if (!util_has_option(p_opt_flags, "sound:off")) {
int ret;
char* p_device_name = NULL;
uint32_t sound_sample_rate = os_sound_get_default_sample_rate();
Expand Down
75 changes: 45 additions & 30 deletions os_sound_null.c
Original file line number Diff line number Diff line change
Expand Up @@ -2,77 +2,92 @@

#include "util.h"

static const uint32_t k_os_sound_default_rate = 48000;
static uint32_t k_os_sound_default_buffer_size = 2048;
static const uint32_t k_os_sound_default_num_periods = 4;

struct os_sound_struct {
struct util_file* p_output;
char* p_device_name;
uint32_t sample_rate;
uint32_t buffer_size;
uint32_t num_periods;
uint32_t period_size;
};

uint32_t
os_sound_get_default_sample_rate(void) {
util_bail("headless");
return 0;
return k_os_sound_default_rate;
}

uint32_t
os_sound_get_default_buffer_size(void) {
util_bail("headless");
return 0;
return k_os_sound_default_buffer_size;
}

uint32_t
os_sound_get_default_num_periods(void) {
util_bail("headless");
return 0;
return k_os_sound_default_num_periods;
}

struct os_sound_struct*
os_sound_create(char* p_device_name,
uint32_t sample_rate,
uint32_t buffer_size,
uint32_t num_periods) {
(void) p_device_name;
(void) sample_rate;
(void) buffer_size;
(void) num_periods;
util_bail("headless");
return NULL;
struct os_sound_struct* p_driver =
util_mallocz(sizeof(struct os_sound_struct));
if (p_device_name == NULL) {
p_driver->p_device_name = NULL;
} else {
p_driver->p_device_name = strdup(p_device_name);
}
p_driver->sample_rate = sample_rate;
p_driver->buffer_size = buffer_size;
p_driver->num_periods = num_periods;
p_driver->period_size = (p_driver->buffer_size / p_driver->num_periods);
return p_driver;
}

void
os_sound_destroy(struct os_sound_struct* p_driver) {
(void) p_driver;
util_bail("headless");
if (p_driver->p_output != NULL) {
util_file_close(p_driver->p_output);
p_driver->p_output = NULL;
}
}

int
os_sound_init(struct os_sound_struct* p_driver) {
(void) p_driver;
util_bail("headless");
return -1;
if (p_driver->p_device_name == NULL) {
return -1;
}
p_driver->p_output = util_file_try_open(p_driver->p_device_name, 1, 1);
if (p_driver->p_output == NULL) {
log_do_log(k_log_audio, k_log_error, "open failed");
return -1;
}
return 0;
}

uint32_t
os_sound_get_sample_rate(struct os_sound_struct* p_driver) {
(void) p_driver;
util_bail("headless");
return 0;
return p_driver->sample_rate;
}

uint32_t
os_sound_get_buffer_size(struct os_sound_struct* p_driver) {
(void) p_driver;
util_bail("headless");
return 0;
return p_driver->buffer_size;
}

uint32_t
os_sound_get_period_size(struct os_sound_struct* p_driver) {
(void) p_driver;
util_bail("headless");
return 0;
return p_driver->period_size;
}

void
os_sound_write(struct os_sound_struct* p_driver,
int16_t* p_frames,
uint32_t num_frames) {
(void) p_driver;
(void) p_frames;
(void) num_frames;
util_bail("headless");
util_file_write(p_driver->p_output, p_frames, num_frames * sizeof(int16_t));
}