From 2824c6265a39e4f49ef27ab6c26539492581c96e Mon Sep 17 00:00:00 2001 From: Mattias Andrée Date: Thu, 19 Feb 2026 17:57:05 +0100 Subject: misc MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Mattias Andrée --- dogwhistle.c | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) (limited to 'dogwhistle.c') diff --git a/dogwhistle.c b/dogwhistle.c index 2d48b82..894d7e3 100644 --- a/dogwhistle.c +++ b/dogwhistle.c @@ -7,9 +7,10 @@ /* TODO add support for selecting output device and backend */ /* TODO add support for selecting volume */ /* TODO add support for pausing and exiting */ +/* TODO prefer loudspeakers over headphones */ +/* TODO use bus to listen for incoming phone calls and pause when arriving */ #define UTYPE uint32_t -#define SMIN INT32_MIN #define SMAX INT32_MAX #define FORMAT SND_PCM_FORMAT_U32 @@ -23,10 +24,10 @@ int main(int argc, char *argv[]) { UTYPE *buffer; - snd_pcm_uframes_t i, buflen = SAMPLE_RATE; + snd_pcm_uframes_t i, buflen, wavelen; snd_pcm_sframes_t n; snd_pcm_t *sound_handle = NULL; - unsigned long int freq = 16000; + double freq = 16000; double volume = (double)0.1f, imul, omul; int r; @@ -46,19 +47,23 @@ main(int argc, char *argv[]) eprintf("snd_pcm_set_params: %s\n", snd_strerror(r)); /* Generate tone */ + buflen = wavelen = (snd_pcm_uframes_t)((double)SAMPLE_RATE / freq); + if ((snd_pcm_uframes_t)freq > 1) + buflen *= (snd_pcm_uframes_t)freq; buffer = emallocn((size_t)buflen, sizeof(*buffer), 0); omul = volume * SMAX * 2; - imul = 2 * (double)freq / (double)SAMPLE_RATE; #ifdef __GNUC__ # pragma GCC diagnostic push # pragma GCC diagnostic ignored "-Wunsuffixed-float-constants" #endif - imul *= M_PI; + imul = 2 * M_PI * freq / (double)SAMPLE_RATE; #ifdef __GNUC__ # pragma GCC diagnostic pop #endif - for (i = 0; i < buflen; i++) - buffer[i] = (UTYPE)(sin(imul * (double)i) * omul - SMIN); + for (i = 0; i < wavelen; i++) + buffer[i] = (UTYPE)(sin(imul * (double)i) * omul + SMAX); + for (i = wavelen; i < buflen; i += wavelen) + memcpy(&buffer[i], &buffer[0], wavelen * sizeof(UTYPE)); /* Play tone */ for (;;) { -- cgit v1.2.3-70-g09d2