FYI, I finally got it working, by replacing the snd_pcm_wait construct with 
(pseudo code):

while (true) {
    poll_result = do_poll();
    if (poll_result == capture) {
       capture.getBuffer(in_buffer);
    }
    if (poll_result == playback)  {
       do_calbacks(in_buffer, out_buffer);
       playback.putBuffer(out_buffer);
    }
}

Regards
/R

> -----Original Message-----
> From: Robert Bielik
> Sent: den 15 januari 2018 17:59
> To: alsa-user@lists.sourceforge.net
> Subject: RE: Strange i/o problem
> 
> Yet more info, the output of snd_pcm_hw_params_dump and
> snd_pcm_sw_params_dump (they look the same for both capture and
> playback):
> 
> ACCESS:  RW_INTERLEAVED
> FORMAT:  FLOAT_LE
> SUBFORMAT:  STD
> SAMPLE_BITS: 32
> FRAME_BITS: 64
> CHANNELS: 2
> RATE: 48000
> PERIOD_TIME: (666 667)
> PERIOD_SIZE: 32
> PERIOD_BYTES: 256
> PERIODS: 2
> BUFFER_TIME: (1333 1334)
> BUFFER_SIZE: 64
> BUFFER_BYTES: 512
> TICK_TIME: 0
> tstamp_mode: NONE
> tstamp_type: MONOTONIC
> period_step: 1
> avail_min: 32
> start_threshold: 32
> stop_threshold: 1073741824
> silence_threshold: 0
> silence_size: 1073741824
> boundary: 1073741824
> 
> > -----Original Message-----
> > From: Robert Bielik
> > Sent: den 15 januari 2018 17:47
> > To: Robert Bielik <robert.bie...@dirac.com>; alsa-
> u...@lists.sourceforge.net
> > Subject: RE: Strange i/o problem
> >
> > Ah, forgot to mention a couple of things, this is on a Raspberry Pi 3 with
> > Raspbian Stretch, the rendering thread is set to SCHED_RR with max
> priority,
> > the timing of the callback is typically (in microseconds):
> >
> > min, mean, max, stddev: 655, 666, 680, 1.45639
> > min, mean, max, stddev: 656, 666, 680, 1.25471
> > min, mean, max, stddev: 640, 666, 694, 1.83335
> > min, mean, max, stddev: 619, 666, 713, 2.10409
> > min, mean, max, stddev: 656, 666, 681, 1.32999
> > min, mean, max, stddev: 652, 666, 682, 1.65541
> > min, mean, max, stddev: 651, 666, 685, 1.49302
> > min, mean, max, stddev: 656, 666, 680, 1.33093
> > min, mean, max, stddev: 649, 666, 690, 1.6246
> > min, mean, max, stddev: 656, 666, 679, 1.3234
> > min, mean, max, stddev: 656, 666, 680, 1.36177
> > min, mean, max, stddev: 611, 666, 704, 1.9551
> > min, mean, max, stddev: 651, 666, 687, 1.37784
> > min, mean, max, stddev: 650, 666, 689, 1.4738
> > min, mean, max, stddev: 609, 666, 722, 2.2253
> > min, mean, max, stddev: 656, 666, 680, 1.57805
> > min, mean, max, stddev: 643, 666, 683, 1.54424
> >
> > (which to me looks more than OK)
> >
> > > -----Original Message-----
> > > From: Robert Bielik [mailto:robert.bie...@dirac.com]
> > > Sent: den 15 januari 2018 17:41
> > > To: alsa-user@lists.sourceforge.net
> > > Subject: [Alsa-user] Strange i/o problem
> > >
> > > I have a strange problem: I'm trying to pipe audio input -> output using a
> > I2S
> > > device @48000 Hz and 32 frames buffer size and 2 periods, to get as low a
> > > latency as possible.
> > >
> > > It works nicely if I either:
> > > 1. Use capture + playback and record capture to a wav file (sounds fine).
> > > 2. Use playback only and generate sine waves.
> > > 3. Pipe capture -> playback with a larger buffer size, such as 64.
> > >
> > > But if I have capture + playback, I get a very strange output noise akin
> > > towards heavy intermodulation distortion.
> > >
> > > The rendering thread is (pseudo code):
> > >
> > > while (true) {
> > >     if(capture_active) {
> > >        snd_pcm_wait(capture_handle, timeout);
> > >        read_pcm_data_into_buffer(capture_handle, input_buffer);
> > >     }
> > >     do_callback(input_buffer, output_buffer);
> > >     if (playback_active) {
> > >         snd_pcm_wait(playback_handle, timeout);
> > >         write_pcm_data_from_buffer(playback_handle, output_buffer);
> > >     }
> > > }
> > >
> > > Any ideas what can go wrong ?
> > > /R
> > >
> > >
> > > ------------------------------------------------------------------------------
> > > Check out the vibrant tech community on one of the world's most
> > > engaging tech sites, Slashdot.org! http://sdm.link/slashdot
> > > _______________________________________________
> > > Alsa-user mailing list
> > > Alsa-user@lists.sourceforge.net
> > > https://lists.sourceforge.net/lists/listinfo/alsa-user

------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
_______________________________________________
Alsa-user mailing list
Alsa-user@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/alsa-user

Reply via email to