diff --git a/sndlock.cpp b/sndlock.cpp index 01b6b88..42acbd4 100644 --- a/sndlock.cpp +++ b/sndlock.cpp @@ -17,6 +17,7 @@ static std::atomic frequency = 440.0f; #define SND_SIG 1 #define SND_BITS 16 #define SND_PCHAN 2 +#define SND_RCHAN 1 #define SND_RATE 44100 #define SND_BUFLEN 4096 @@ -25,7 +26,7 @@ static void dsp_thread() struct sio_hdl *hdl; struct sio_par par; - hdl = sio_open(SIO_DEVANY, SIO_PLAY, 1); + hdl = sio_open(SIO_DEVANY, SIO_PLAY|SIO_REC, 1); if(hdl == nullptr) { std::cerr << "failed to open sound device" << std::endl; return; @@ -34,6 +35,7 @@ static void dsp_thread() par.sig = SND_SIG; par.bits = SND_BITS; par.pchan = SND_PCHAN; + par.pchan = SND_RCHAN; par.rate = SND_RATE; par.le = SIO_LE_NATIVE; par.xrun = SIO_ERROR; @@ -60,14 +62,15 @@ static void dsp_thread() size_t buf_out_idx = SND_BUFLEN*SND_PCHAN; nfds_t nfds = sio_nfds(hdl); struct pollfd pfd[nfds]; + while(!shutdown_threads) { - sio_pollfd(hdl, pfd, POLLOUT); + sio_pollfd(hdl, pfd, POLLOUT|POLLIN); poll(pfd, nfds, INFTIM); int revents = sio_revents(hdl, pfd); if(revents & POLLOUT) { - uint32_t ftw = frequency*(float)UINT32_MAX/SND_RATE; if(buf_out_idx == SND_BUFLEN*SND_PCHAN) { + uint32_t ftw = frequency*(float)UINT32_MAX/SND_RATE; for(int i=0;i