All of lore.kernel.org
 help / color / mirror / Atom feed
* problem linking pcm timer to midi timer at SB Audigy
@ 2006-08-25 15:19 Gerald Grabner
  2006-08-25 15:34 ` Clemens Ladisch
  0 siblings, 1 reply; 3+ messages in thread
From: Gerald Grabner @ 2006-08-25 15:19 UTC (permalink / raw)
  To: alsa-devel

Hi there,

I'm having troubles with linking the pcm timer to the midi timer for a
SB Audigy. I slightly adapted the code of Steve deRosier
[http://thread.gmane.org/gmane.linux.alsa.devel/22156/focus=22160], my
function is listed below. While it works with an ES1938 card, it
doesn't with a SB Audigy: If I'm trying to record audio (generated
from a midi signal I'm sending from the same card), I only hear the
first note sent. Obviously the timing is completely wrong. The problem
doesn't occur for pcm playback.

Unfortunatly, I didn't find much documentation about cards, devices
and subdevices.
Do I have to choose a particular one for the Audigy?
Why the "SDevice = SDevice << 1;" statement?
Where can I find documentation on this topic?

My system: alsa 1.0.11, openSuSE 10.1

Any hints are highly welcome!
Thx a lot,
Gerald


bool SmSeq::LinkPCMTimer( snd_pcm_t* pcm )
{
   // get pcm info
   snd_pcm_info_t* PCMInfo;
   snd_pcm_info_alloca( &PCMInfo );
   int err = snd_pcm_info( pcm, PCMInfo );
   if( err < 0 )  return false ;

   // get the info we need
   int             Card = snd_pcm_info_get_card     ( PCMInfo );
   unsigned int  Device = snd_pcm_info_get_device   ( PCMInfo );
   unsigned int SDevice = snd_pcm_info_get_subdevice( PCMInfo );
   SDevice = SDevice << 1;  // ?
   if( ( Card < 0 ) )  return false;

   // setup the data that links us to the PCM
   snd_timer_id_t* QTID;
   snd_timer_id_alloca( &QTID );
   snd_timer_id_set_class    ( QTID, SND_TIMER_CLASS_PCM );
   snd_timer_id_set_sclass   ( QTID, SND_TIMER_SCLASS_NONE );
   snd_timer_id_set_card     ( QTID, Card );
   snd_timer_id_set_device   ( QTID, Device );
   snd_timer_id_set_subdevice( QTID, SDevice );

   // setup the actual timer
   snd_seq_queue_timer_t* QueueTimer;
   snd_seq_queue_timer_alloca( &QueueTimer );
   if( snd_seq_get_queue_timer( seq, queue, QueueTimer ) < 0 )
     return false;
   snd_seq_queue_timer_set_type( QueueTimer, SND_SEQ_TIMER_ALSA );
   snd_seq_queue_timer_set_id  ( QueueTimer, QTID );
   snd_seq_set_queue_timer( seq, queue, QueueTimer );

   return true;
}

-------------------------------------------------------------------------
Using Tomcat but need to do more? Need to support web services, security?
Get stuff done quickly with pre-integrated technology to make your job easier
Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo
http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642

^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: problem linking pcm timer to midi timer at SB Audigy
  2006-08-25 15:19 problem linking pcm timer to midi timer at SB Audigy Gerald Grabner
@ 2006-08-25 15:34 ` Clemens Ladisch
  2006-08-25 20:49   ` Gerald Grabner
  0 siblings, 1 reply; 3+ messages in thread
From: Clemens Ladisch @ 2006-08-25 15:34 UTC (permalink / raw)
  To: Gerald Grabner, alsa-devel

Gerald Grabner wrote:
> I'm having troubles with linking the pcm timer to the midi timer for a
> SB Audigy. I slightly adapted the code of Steve deRosier
> [http://thread.gmane.org/gmane.linux.alsa.devel/22156/focus=22160], my
> function is listed below. While it works with an ES1938 card, it
> doesn't with a SB Audigy: If I'm trying to record audio (generated
> from a midi signal I'm sending from the same card), I only hear the
> first note sent. Obviously the timing is completely wrong. The problem
> doesn't occur for pcm playback.

Look into /proc/asound/seq/queues and /proc/asound/seq/timers to see
what's going on.

> Unfortunatly, I didn't find much documentation about cards, devices
> and subdevices.
> Do I have to choose a particular one for the Audigy?

Yes.  See "arecord -l" for a list of recording devices.  You have to
choose the same device that you're using for recording.

> Why the "SDevice = SDevice << 1;" statement?

The subdevice number of the timer is not the same as the PCM subdevice
number, see /proc/asound/timers.

> Where can I find documentation on this topic?

This stuff is basically undocumented.


Regards,
Clemens

-------------------------------------------------------------------------
Using Tomcat but need to do more? Need to support web services, security?
Get stuff done quickly with pre-integrated technology to make your job easier
Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo
http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642

^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: problem linking pcm timer to midi timer at SB Audigy
  2006-08-25 15:34 ` Clemens Ladisch
@ 2006-08-25 20:49   ` Gerald Grabner
  0 siblings, 0 replies; 3+ messages in thread
From: Gerald Grabner @ 2006-08-25 20:49 UTC (permalink / raw)
  To: Clemens Ladisch, alsa-devel

Hi Clemens,

thanks for those infos!

Now I was experimenting with devices and subdevices and looked at
/proc/asound/seq/timer, see below.

Device 0 and Subdevice 0 is "PCM playback 0-0-0" with a period time of
0.000000000, so the queue is not advancing, which is the problem I
had.

Device 0 and Subdevice 1 is "PCM capture 0-0-1", and the queue is
running, but the Period time is 0.023219952, which is not what I set
with snd_pcm_hw_params (period_size=1024 -> period time = 0.00097656).
Am I forced to use another period size? (Unfortunately, at the moment I
only have internet access to that machine, so I cannot check the audio
recording.)

Device 0 and Subdevice 1 gives the "system timer", with a period time
of 0.004. Hmm...

Devices 2 and 4 doen't seem appropriate for timers.

Is there a way to get more infos or descriptions of subdevices?

Would you cleary recommend any of those devices/subdevices?

Many thx,
Gerald


 > arecord -l
**** List of CAPTURE Hardware Devices ****
card 0: Audigy2 [Audigy 2 Platinum [SB0240P]], device 0: emu10k1 [ADC 
Capture/Standard PCM Playback]
   Subdevices: 0/1
   Subdevice #0: subdevice #0
card 0: Audigy2 [Audigy 2 Platinum [SB0240P]], device 1: emu10k1 mic 
[Mic Capture]
   Subdevices: 1/1
   Subdevice #0: subdevice #0
card 0: Audigy2 [Audigy 2 Platinum [SB0240P]], device 2: emu10k1 efx 
[Multichannel Capture/PT Playback]
   Subdevices: 1/1
   Subdevice #0: subdevice #0
card 0: Audigy2 [Audigy 2 Platinum [SB0240P]], device 4: p16v [p16v]
   Subdevices: 1/1
   Subdevice #0: subdevice #0

/proc/asound/seq/timer without linking:
Timer for queue 0 : RTC timer
   Period time : 0.000976562
   Skew : 65536 / 65536

/proc/asound/seq/timer with linking, device 0, subdevice 0:
Timer for queue 0 : PCM playback 0-0-0
   Period time : 0.000000000
   Skew : 65536 / 65536

/proc/asound/seq/timer with linking, device 0, subdevice 1:
Timer for queue 0 : PCM capture 0-0-1
   Period time : 0.023219952
   Skew : 65536 / 65536

/proc/asound/seq/timer with linking, device=1, subdevice 0:
Timer for queue 0 : system timer
   Period time : 0.004000000
   Skew : 65536 / 65536

/proc/asound/seq/timer with linking, device=2, subdevice 0:
Timer for queue 0 : PCM playback 0-2-0
   Period time : 0.000000000
   Skew : 65536 / 65536

/proc/asound/seq/timer with linking, device=4, subdevice 0:
Timer for queue 0 : PCM playback 0-4-0
   Period time : 0.000000000
   Skew : 65536 / 65536



Clemens Ladisch wrote:
> Gerald Grabner wrote:
>> I'm having troubles with linking the pcm timer to the midi timer for a
>> SB Audigy. I slightly adapted the code of Steve deRosier
>> [http://thread.gmane.org/gmane.linux.alsa.devel/22156/focus=22160], my
>> function is listed below. While it works with an ES1938 card, it
>> doesn't with a SB Audigy: If I'm trying to record audio (generated
>> from a midi signal I'm sending from the same card), I only hear the
>> first note sent. Obviously the timing is completely wrong. The problem
>> doesn't occur for pcm playback.
> 
> Look into /proc/asound/seq/queues and /proc/asound/seq/timers to see
> what's going on.
> 
>> Unfortunatly, I didn't find much documentation about cards, devices
>> and subdevices.
>> Do I have to choose a particular one for the Audigy?
> 
> Yes.  See "arecord -l" for a list of recording devices.  You have to
> choose the same device that you're using for recording.
> 
>> Why the "SDevice = SDevice << 1;" statement?
> 
> The subdevice number of the timer is not the same as the PCM subdevice
> number, see /proc/asound/timers.
> 
>> Where can I find documentation on this topic?
> 
> This stuff is basically undocumented.
> 
> 
> Regards,
> Clemens

-------------------------------------------------------------------------
Using Tomcat but need to do more? Need to support web services, security?
Get stuff done quickly with pre-integrated technology to make your job easier
Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo
http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642

^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2006-08-25 20:49 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2006-08-25 15:19 problem linking pcm timer to midi timer at SB Audigy Gerald Grabner
2006-08-25 15:34 ` Clemens Ladisch
2006-08-25 20:49   ` Gerald Grabner

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.