Alsa-Devel Archive on lore.kernel.org
 help / color / mirror / Atom feed
From: Enno Fennema <ennofennema@tele2.nl>
To: Daniel Sanz <daniellsanz2@gmail.com>
Cc: alsa-devel@alsa-project.org, Trent Piepho <tpiepho@gmail.com>,
	Clemens Ladisch <clemens@ladisch.de>
Subject: Re: snd_pcm_wait function (really snd_pcm_draiin)
Date: Fri, 16 Nov 2012 17:27:07 +0100	[thread overview]
Message-ID: <50A6695B.6080202@tele2.nl> (raw)
In-Reply-To: <CAHU0+dTL=rc6gMc49cWiUL3rL2_92myqYrReCUbK3hVy4BB=DA@mail.gmail.com>

[-- Attachment #1: Type: text/plain, Size: 688 bytes --]

On 11/16/12 11:41, Daniel Sanz wrote:
> Thanks, Trent, I've been playing a bit with snd_pcm_drain,
> snd_pcm_writei, blocking mode, non-blocking mode, etc. but even if I
> ...

I wanted to play a short sound and release the pcm. It works with a 
non-block drain as Clemens suggested.

I noticed using gettimeofday() around drain() that it takes a bit over 2 
seconds. Rather long for a sound that only takes 0.1 sec.
Not draining aand a usleep() for 0.1 sec plays the full time and 
releases the cpm quicker. As you see in attached example I don't bother 
with periods either.

Not exactly your question but I have given up on drainage for my current 
application.

Regards,
Enno Fennema

[-- Attachment #2: drain.c --]
[-- Type: text/x-csrc, Size: 865 bytes --]

#include <alsa/asoundlib.h>
#include <math.h>

int main(int argc, char** argv) {
  int err, i, n;
  snd_pcm_t *handle;
  int16_t buffer[500];

  for( i = 0; i < 500; i++ ) {		// put 500 samples in buffer
    double omega = (double)(i % 50) * 2.0 * M_PI / 50;
    buffer[i] = sin(omega) * 2500;
  }
  snd_pcm_open(&handle, "default", SND_PCM_STREAM_PLAYBACK, 0);
  snd_pcm_set_params(handle, SND_PCM_FORMAT_S16, 
		     SND_PCM_ACCESS_RW_INTERLEAVED, 
		     1, 22000, 0, 50000 );
  snd_pcm_start(handle);

  n = 2200;		
  while( n > 500 ) {
    err = snd_pcm_writei(handle, buffer, 500);
    if( err < 0 )
      printf("Error %d : %s\n", err, snd_strerror(err));
    n -= err;
  }
  err = snd_pcm_writei(handle, buffer, n);

#if 0
  snd_pcm_nonblock(handle, 0);	// ** 1 - nonblock; 0 - Do block
  snd_pcm_drain(handle);
#else
  usleep(100000);
#endif
  return 0;
}

[-- Attachment #3: Type: text/plain, Size: 0 bytes --]



  reply	other threads:[~2012-11-16 16:25 UTC|newest]

Thread overview: 9+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-11-12  7:23 snd_pcm_wait function Enno Fennema
2012-11-12  7:36 ` Clemens Ladisch
2012-11-12 20:57   ` Trent Piepho
2012-11-13  0:15     ` Daniel Sanz
2012-11-13  4:45       ` Trent Piepho
2012-11-16 10:41         ` Daniel Sanz
2012-11-16 16:27           ` Enno Fennema [this message]
2012-11-16 19:10             ` snd_pcm_wait function (really snd_pcm_draiin) David Henningsson
2012-11-19 11:10               ` Daniel Sanz

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=50A6695B.6080202@tele2.nl \
    --to=ennofennema@tele2.nl \
    --cc=alsa-devel@alsa-project.org \
    --cc=clemens@ladisch.de \
    --cc=daniellsanz2@gmail.com \
    --cc=tpiepho@gmail.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox