Port-amiga archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

NetBSD/amiga audio questions: sampling rates, screenmodes, and the low-pass filter/LED state



Hi again,

I have a couple of sound-related NetBSD/amiga questions.  I've been thinking of 
setting up my A1200 as an MP3 player, streaming the files over the network.  
Now, I remember the need under AmigaDOS to use the scan-doubled AGA screen 
modes in order to be able to play audio at high (e.g. 44.1 kHz) sampling rates, 
and this was true for Linux on the 1200 as well.  However, NetBSD's aucc sound 
driver seems to limit the playback period to 124 ticks, so even in VGA or 
dblpal you only get ~29 kHz at most:

/* transform frequency to period, adjust bounds */
static u_int
freqtoper(u_int freq) {
    u_int per=eclockfreq*5/freq;

    if (per<124)
        per=124;    /* must have at least 124 ticks between samples */

Wouldn't this only be necessary when the system is using a plain old PAL/NTSC 
screenmode?  I was curious what would happen if you set the limit to, say, 80 
ticks, which I figure should allow 44.1 kHz playback on a PAL machine, so I 
tried it out, and, well, it seems to work just fine (although a 50 MHz '060 is 
only just fast enough to run mpg123 at this rate).  Of course, you have to set 
the display to a high hsync screenmode, either with iteconfig or at boot time 
(loadbsd -A), otherwise everything slows down again.  So, is there anything 
potentially "bad" about loosening the restriction on the period in this way (or 
even removing it altogether)?


My second question is about the low-pass audio filter (and the corresponding 
power LED brightness) on many Amiga models.  It seems that NetBSD just leaves 
the filter in whatever state it's in when it's booted, which is on (LED bright) 
on my 1200.  It would be nice for there to be a kernel option to set the 
initial filter state to "off", since playing audio in 14-bit at 44.1 kHz with 
the filter on is a bit pointless!  Sure, you could boot into AmigaDOS and run 
an LED toggler program before booting into NetBSD, but I figure setting it in 
the kernel would have some advantages.  Anyway, I worked out I probably needed 
to use the following code:

ciaa.pra |= CIAA_PRA_LED;    /* Turn off the low-pass audio filter. */

which I inserted at an appropriate-looking place in 
/sys/arch/amiga/amiga/amiga_init.c (line 980, just after the keyboard 
interrupts get enabled??), and that seemed to do the trick.  Is this an 
appropriate way to do this?  Would it be easy to add a new kernel option for it?

I was thinking perhaps even nicer would be a new option to loadbsd or a 
userland program to toggle the filter state at will, but that would be where 
I'd start getting lost!  Any thoughts?
--
Chris Edwards
cme at ihug dot co dot nz





Home | Main Index | Thread Index | Old Index