Re: [Alsa-devel] Underruns (borken pipes)

2002-07-16 Thread Bruce Paterson

Paul Davis wrote:
 
 OK. I believe I now understand the tradeoffs. Also, it was not clear
 to me that the Jack audio driver would solve my problems since most
 of what Jack is about is allowing multiple audio clients (which I
 don't have, and in fact don't want at all in this case).
 
 Thats not entirely true. At least 30-50% of JACK's design comes from
 the desire to have a simple, highly abstracted, highly efficient model
 for audio i/o. 95%+ of the time that i use JACK, its with one client
 (for now, anyway).

ok. 
[Might be worth doing a re-visit to your intro to Jack...add a line
about
the above.] 

 no, poll reports back to you when the amount of data/space equals or
 exceeds the avail_min count set by your program.

AHH !  Click ! :-)

It now works fine with polling once I set the avail_min to 1/8 the max
size of 
the frame buffer. 
Since it's working fine I'll leave it for now, but if we need to support
diff.
soundcards etc. in the future Jack may be worth a visit.

-- 
Cheers,
Bruce
---
This email and any files transmitted with it are confidential and
intended solely for the use of the individual or entity to whom
they are addressed. If you have received this email in error please
notify the system manager.

/\\\/\\\/\\\/   /  Bruce Paterson  
   /  \\\ \\\ \\\  /   /Senior Design Engineer
  /   /\\\/\\\/\\\/   /   87 Peters Ave, Mulgrave, Vic, 3170
 /   /  \\\ \\\ \\\  /  PO Box 4112, Mulgrave, Vic, 3170, Australia
/   /\\\/\\\ \\\/   Ph: +61 3 8561 4232   Fax: +61 3 9560 9055
  Tele-IP Ltd.  Email: [EMAIL PROTECTED]Icq: #32015991
WWW:   http://www.tele-ip.com   VK3TJN
---


---
This sf.net email is sponsored by: Jabber - The world's fastest growing 
real-time communications platform! Don't just IM. Build it in! 
http://www.jabber.com/osdn/xim
___
Alsa-devel mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/alsa-devel



Re: [Alsa-devel] Underruns (borken pipes)

2002-07-15 Thread Bruce Paterson

Paul Davis wrote:
 
 this design is based (like a lot of JACK's API) on the way just about
 every non-Unix audio API works. it also models the way all the better

OK. I believe I now understand the tradeoffs. Also, it was not clear to
me that the Jack
audio driver would solve my problems since most of what Jack is about is
allowing multiple
audio clients (which I don't have, and in fact don't want at all in this
case).

 You know nothing in the alsa docs even hints at this, well certainly
 not in all the PCM bits I went through. Actually it IS working 90% of
 the time at present, as long
 
 precisely what would be expected. its not the average case scheduling
 latency that is bad in the regular kernel, its the worst case. thats
 why it works 90% of the time.

Would you care to speculate that the reason it works better *without*
poll is that
on average I'm stuffing something into the buffers before they are
totally empty
(which would be the case for poll), so the impact of a long system
latency
just prior to stuffing is less since there's a bit more left in the
hardware buffer ?

I suspect writing less in each time won't help because the behaviour of
'poll' remains
unchanged only reporting when the hardware buffer is empty (too late !).

 its not documented in the alsa docs because almost nothing is
 documented in the alsa docs. :) :(

I noticed !
 
 Could you possibly give me some pointers as to where to look in the
 Jack code ? I am totally unfamilier with it.
 
 the relevant code is all in the ALSA driver/client, which lives in
 jack/drivers/alsa/alsa_driver.c. what's there is fairly complex,
 because of the full duplex requirement and the use of poll/mmap
 access. however, it works very well, at least on soundcards that have
 their playback and capture streams pretty well in sync (i.e. the same
 requirement needed for ASIO and probably EASI as well).

ok, will dive in when  if necessary.

  a kernel with Andrew Morton's low latency patches. you didn't say what
  buffer sizes you were using, so its hard to know if this is an issue.
 
 I did actually:
 Output frame buffer size is 6553, and input 5461, as returned by the
 hardware.
 Nothing bigger can be assigned.
 
 sorry, i missed that. if thats in frames, they are pretty big, and

Yes, in frames. frames size is the number of hardware channels (10in /
12out).

 you're just facing the inevitable poor scheduling latency of the

...and this would be fixed by jack driver style code, or would require
the low
latency kernel patch as well ?  No point going to Jack at this stage if
it's not
going to help.  
The fact that it's much better without Xwindows supports the occasional
latency 
problem.

 regular linux kernel. if its in bytes, its still fairly large. they
 are really odd values however, and they would normally be power-of-2
 figures no matter what the unit.

Ah, but if you divide 65536 by 10 and 12 respectively (the frame widths)
and
round down those are the numbers you get ! (I just worked that out
then). 
 
 Also, if my plughw:0,0 interface to the envy24 doesn't work (segfault
 in the plug code), whereas the hw:0,0 does, will Jack even work ??
 
 since your application doesn't have any control over the hardware, and
 since JACK is known to work on ice1712-based hardware, there should be
 no problem.

Hmmm ok. Maybe the alsa 'plug' normal read/write code is screwed but the
mmap read/write used by Jack is fine. That's the only theory I can can
up with, 
since I'm sure Jack uses non-interleaved buffers.


-- 
Cheers,
Bruce
---
This email and any files transmitted with it are confidential and
intended solely for the use of the individual or entity to whom
they are addressed. If you have received this email in error please
notify the system manager.

/\\\/\\\/\\\/   /  Bruce Paterson  
   /  \\\ \\\ \\\  /   /Senior Design Engineer
  /   /\\\/\\\/\\\/   /   87 Peters Ave, Mulgrave, Vic, 3170
 /   /  \\\ \\\ \\\  /  PO Box 4112, Mulgrave, Vic, 3170, Australia
/   /\\\/\\\ \\\/   Ph: +61 3 8561 4232   Fax: +61 3 9560 9055
  Tele-IP Ltd.  Email: [EMAIL PROTECTED]Icq: #32015991
WWW:   http://www.tele-ip.com   VK3TJN
---


---
This sf.net email is sponsored by:ThinkGeek
Welcome to geek heaven.
http://thinkgeek.com/sf
___
Alsa-devel mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/alsa-devel



Re: [Alsa-devel] Underruns (borken pipes)

2002-07-13 Thread Paul Davis

I did, but the Jack introduction frankly scared me off a bit. I'm
sure that it's not its intention, but the talk about necessary mods
to the kernel and synchronisation issues between channels (IO)
seemed a huge amount of bother to go to at the time.

no kernel mods are necessary for JACK. kernel mods (1 patch) are
necessary if you want really low latency, but this is true for ALSA
and OSS as well.

the channel synchronisation issue is a basic design feature. when run
in full-duplex mode, JACK wants its clients to be able to do both
input and output in the same amounts at the same time (rather than say
you can do N frames of input now and then later you can do M frames
of output now - most programs would find this very difficult to
do; the other alternative is to provide much smaller frame counts to
the process() callback (ie. the smaller of the current data/space
available for playback/capture at a given interrupt), but this is much
less efficient since it means you have to invoke the clients much more
often.)

this design is based (like a lot of JACK's API) on the way just about
every non-Unix audio API works. it also models the way all the better
hardware works. and finally, although JACK works on most
consumer-level software, it wasn't designed as a general purpose
consumer sound server. if you are using it on crappy h/w, yes, this
channel sync issue will cause problems. you have a choice: you can
either write a custom ALSA interface that handles the lack of full
duplex sync, or you can get a decent audio interface for US$60 or so
and then be able to hook into the other applications (more added every
week) that use JACK. you're in luck: you already have a decent interface.

 the first suggestion will reveal quite a bit. you additionally will
 need to know that you can't avoid underruns with small buffer sizes
 unless you run with SCHED_FIFO or SCHED_RR scheduling, and not without

You know nothing in the alsa docs even hints at this, well certainly
not in all the PCM bits I went through. Actually it IS working 90% of
the time at present, as long

precisely what would be expected. its not the average case scheduling
latency that is bad in the regular kernel, its the worst case. thats
why it works 90% of the time.

its not documented in the alsa docs because almost nothing is
documented in the alsa docs. :) :(
 
Could you possibly give me some pointers as to where to look in the
Jack code ? I am totally unfamilier with it.

the relevant code is all in the ALSA driver/client, which lives in
jack/drivers/alsa/alsa_driver.c. what's there is fairly complex,
because of the full duplex requirement and the use of poll/mmap
access. however, it works very well, at least on soundcards that have
their playback and capture streams pretty well in sync (i.e. the same
requirement needed for ASIO and probably EASI as well).

 a kernel with Andrew Morton's low latency patches. you didn't say what
 buffer sizes you were using, so its hard to know if this is an issue.

I did actually:
Output frame buffer size is 6553, and input 5461, as returned by the
hardware.
Nothing bigger can be assigned.

sorry, i missed that. if thats in frames, they are pretty big, and
you're just facing the inevitable poor scheduling latency of the
regular linux kernel. if its in bytes, its still fairly large. they
are really odd values however, and they would normally be power-of-2
figures no matter what the unit.

Also, if my plughw:0,0 interface to the envy24 doesn't work (segfault
in the plug code), whereas the hw:0,0 does, will Jack even work ??

since your application doesn't have any control over the hardware, and
since JACK is known to work on ice1712-based hardware, there should be
no problem.

--p


---
This sf.net email is sponsored by:ThinkGeek
Welcome to geek heaven.
http://thinkgeek.com/sf
___
Alsa-devel mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/alsa-devel



Re: [Alsa-devel] Underruns (borken pipes)

2002-07-12 Thread Paul Davis

I got around my previous problems (readn) in an output/capture
application with an envy24
(ice1712) by bypassing the plugin and going straight to hw:0,0. Had to
change my code a bit
but it's now **almost** working.

i humbly suggest that you:

  (1) read the source code for JACK's ALSA driver/client
  (2) consider using JACK

the first suggestion will reveal quite a bit. you additionally will
need to know that you can't avoid underruns with small buffer sizes
unless you run with SCHED_FIFO or SCHED_RR scheduling, and not without
a kernel with Andrew Morton's low latency patches. you didn't say what
buffer sizes you were using, so its hard to know if this is an issue.

the second suggestion will avoid you having to deal with any of this
nonsense altogether, and get focused on the core part of your
application.

http://jackit.sf.net/

--p


---
This sf.net email is sponsored by:ThinkGeek
Gadgets, caffeine, t-shirts, fun stuff.
http://thinkgeek.com/sf
___
Alsa-devel mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/alsa-devel



Re: [Alsa-devel] Underruns (borken pipes)

2002-07-12 Thread Bruce Paterson

Paul Davis wrote:
 
 I got around my previous problems (readn) in an output/capture
 application with an envy24
 (ice1712) by bypassing the plugin and going straight to hw:0,0. Had to
 change my code a bit
 but it's now **almost** working.
 
 i humbly suggest that you:
 
   (1) read the source code for JACK's ALSA driver/client
   (2) consider using JACK

I did, but the Jack introduction frankly scared me off a bit. I'm sure
that it's not its
intention, but the talk about necessary mods to the kernel and
synchronisation issues between
channels (IO) seemed a huge amount of bother to go to at the time.
Maybe (based on your comments)
it's necessary evil afterall anyway.

 the first suggestion will reveal quite a bit. you additionally will
 need to know that you can't avoid underruns with small buffer sizes
 unless you run with SCHED_FIFO or SCHED_RR scheduling, and not without

You know nothing in the alsa docs even hints at this, well certainly not
in all the
PCM bits I went through. Actually it IS working 90% of the time at
present, as long
as; 
a) I leave lots of RAM (don't run X etc)
b) I bash away at write/read regardless every 10ms in my hacky version
of code (the poll version
is a disaster)
Could you possibly give me some pointers as to where to look in the Jack
code ? I am totally
unfamilier with it.

 a kernel with Andrew Morton's low latency patches. you didn't say what
 buffer sizes you were using, so its hard to know if this is an issue.

I did actually:
Output frame buffer size is 6553, and input 5461, as returned by the
hardware.
Nothing bigger can be assigned.

I have my own frame buffer for tx of full channel width 10, and another
for rx of channel
width 12. Each is only the frame sizes above only.
I have on top of that my own buffers (non interleaved) for my 4 capture
channels and 1
output channel. These are typically 40s at 96000 long * 32bitsall
are preallocated.
I copy from these in/out of the tx/rx frame buffers prior/after a
sucessful write/read
call.

Also, if my plughw:0,0 interface to the envy24 doesn't work (segfault in
the plug code),
whereas the hw:0,0 does, will Jack even work ??
-- 
Cheers,
Bruce
---
This email and any files transmitted with it are confidential and
intended solely for the use of the individual or entity to whom
they are addressed. If you have received this email in error please
notify the system manager.

/\\\/\\\/\\\/   /  Bruce Paterson  
   /  \\\ \\\ \\\  /   /Senior Design Engineer
  /   /\\\/\\\/\\\/   /   87 Peters Ave, Mulgrave, Vic, 3170
 /   /  \\\ \\\ \\\  /  PO Box 4112, Mulgrave, Vic, 3170, Australia
/   /\\\/\\\ \\\/   Ph: +61 3 8561 4232   Fax: +61 3 9560 9055
  Tele-IP Ltd.  Email: [EMAIL PROTECTED]Icq: #32015991
WWW:   http://www.tele-ip.com   VK3TJN
---


---
This sf.net email is sponsored by:ThinkGeek
Gadgets, caffeine, t-shirts, fun stuff.
http://thinkgeek.com/sf
___
Alsa-devel mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/alsa-devel