#include #include #include #include #include #include "sydney.h" #include "macro.h" #define ASSERT_SUCCESS(x) do { \ int _r; \ if ((_r = x)) { \ fprintf(stderr, "Operation <%s> failed: %s%s%s\n", \ #x, \ sa_strerror(_r), \ _r == SA_ERROR_SYSTEM ? "; " : "", _r == SA_ERROR_SYSTEM ? strerror(errno) : ""); \ } \ assert(_r == SA_SUCCESS); \ } while(0) #define FREQ 440 static const float data[4] = { 0.0, 1.0, 0.0, -1.0 }; static int callback(sa_stream_t *s, sa_event_t e) { switch (e) { case SA_EVENT_INIT_THREAD: printf("Thread initialized.\n"); return 0; case SA_EVENT_ERROR: { int e; ASSERT_SUCCESS(sa_stream_get_event_error(s, &e)); printf("Error: %s\n", sa_strerror(e)); return -1; } case SA_EVENT_NOTIFY: printf("Notified.\n"); return 0; case SA_EVENT_REQUEST_IO: ASSERT_SUCCESS(sa_stream_write(s, data, sizeof(data))); return 0; case _SA_EVENT_MAX: ; } sa_assert_not_reached(); } int main(int argc, char *argv[]) { sa_stream_t *s; ASSERT_SUCCESS(sa_stream_create_pcm(&s, "Sine Test (pull)", SA_MODE_WRONLY, SA_PCM_FORMAT_FLOAT32_NE, FREQ * 4, 1)); ASSERT_SUCCESS(sa_stream_change_device(s, "/dev/dsp1")); ASSERT_SUCCESS(sa_stream_open(s)); ASSERT_SUCCESS(sa_stream_start_thread(s, callback)); sleep(20); ASSERT_SUCCESS(sa_stream_stop_thread(s)); ASSERT_SUCCESS(sa_stream_drain(s)); ASSERT_SUCCESS(sa_stream_destroy(s)); return 0; }