On Mon, Feb 23, 2009 at 05:05:52PM +0000, Jacob Meuser wrote:
> On Mon, Feb 23, 2009 at 07:58:22AM -0800, J.C. Roberts wrote:
> > On Mon, 23 Feb 2009 13:35:14 +0100 Alexandre Ratchov <a...@caoua.org>
> > wrote:
> > 
> > > aucat records 1-channel, s16le at 16kHz (required by the device)
> > > then it converts it to 2-channel, s16le at 44.1kHz (required by -o
> > > defaults) and saves the result. So it appears to work.
> > > 
> > > You probably want to record as follows:
> > > 
> > > aucat -f /dev/audio1 -C 0:0 -e s16le -r 16000 -o out-wcam-plain.raw
> > > 
> > > and then to play it:
> > > 
> > > aucat -c 0:0 -e s16le -r 16000 -i out-wcam-plain.raw
> > > 
> > > Let me know if above commands properly work on current (they should
> > > work even on few months old -current system, but iirc not on 4.4)
> > > 
> > 
> > The above failed on both 4.5-current (Feb 18), and 4.4-Stable.
> > 
> > Though there have been a ton of changes since 4.4-stable, the old code
> > works perfectly with this device. From the output below, you can see the
> > 4.4-stable code up-sampling from 16000Hz to 44100Hz.
> > 
> > $ aucat -C 0:0 -e s16le -r 16000 -f /dev/audio1 -o test44.raw 
> > test44.raw: assuming headerless file
> > /dev/audio1: recording s16le,0:0,16000Hz
> > /dev/audio1: using 4004ms rec buffer
> > file_new: /dev/audio1
> > file_new: test44.raw
> > test44.raw: s16le,0:0,16000Hz -> s16le,0:0,44100Hz
> > test44.raw: writing s16le,0:0,44100Hz
> > starting device...
> > dev_start: play/rec started
> > ^Cdraining buffers...
> > sub_rm: copy
> > aproc_del: wpipe: test44.raw: deleted
> > abuf_del:
> > aproc_del: conv: test44.raw: deleted
> > abuf_del:
> > aproc_del: sub: copy: deleted
> > abuf_del:
> > aproc_del: rpipe: /dev/audio1: deleted
> > file_poll: test44.raw: deleted
> > file_poll: /dev/audio1: deleted
> > test44.raw: closed
> > dev_stop: play/rec stopped
> > $
> > $ aucat -c 0:0 -e s16le -i test44.raw                         
> > test44.raw: assuming headerless file
> > /dev/audio: playing s16le,0:0,44100Hz
> > /dev/audio: using 700ms play buffer
> > file_new: /dev/audio
> > file_new: test44.raw
> > test44.raw: reading s16le,0:0,44100Hz
> > filling buffers...
> > starting device...
> > dev_start: play/rec started
> > aproc_del: rpipe: test44.raw: deleted
> > file_poll: test44.raw: deleted
> > mix_rm: softmix
> > abuf_del:
> > mix_out: nothing more to do...
> > aproc_del: mix: softmix: deleted
> > abuf_del:
> > aproc_del: wpipe: /dev/audio: deleted
> > file_poll: /dev/audio: deleted
> > draining buffers...
> > file_poll: nothing to do...
> > dev_stop: play/rec stopped
> > $ 
> > 
> > 
> > Unfortunately, the above doesn't work in 4.5-current, and the debug
> > output has been changed somewhat. One of the things I did notice is the
> > resampling from 16000Hz to 44100Hz does not seem to be occurring in
> > 4.5-current.
> > 
> > $ aucat -C 0:0 -e s16le -r 16000 -f /dev/audio1 -o test45.raw
> > test45.raw: assuming headerless file
> > safile_new: using 5872(2936) fpb
> > file_new: sndio:hdl
> > dev_init: hw recording s16le,0:0,16000Hz
> > dev_init: using 8808 fpb
> > safile_start: play/rec started
> > file_new: wav:test45.raw
> > ^Cdev_done: dev_mix = 0x0, dev_sub = 0x7c9ae880
> > safile_stop: play/rec stopped
> > aproc_del: rpipe(hdl): terminating...
> > file_del: sndio:hdl <>: delayed
> > sub_hup: sub: eof
> > aproc_del: sub(sub): terminating...
> > aproc_del: wpipe(test45.raw): terminating...
> > file_del: wav:test45.raw <WOK>: immediate
> > aproc_del: wpipe(test45.raw): freed
> > aproc_del: sub(sub): freed
> > aproc_del: rpipe(hdl): has refs
> > file_del: sndio:hdl <>: immediate
> > aproc_del: rpipe(hdl): terminating...
> > aproc_del: rpipe(hdl): freed
> > 
> > $ aucat -c 0:0 -e s16le -i test45.raw                                 
> > test45.raw: assuming headerless file
> > safile_new: using 5888(2944) fpb
> > file_new: sndio:hdl
> > dev_init: hw playing s16le,0:0,44100Hz
> > mix_newout: using 2944 fpb
> > dev_init: using 8832 fpb
> > safile_start: play/rec started
> > file_new: wav:test45.raw
> > mix_setmaster: 0x81324000: 32768/32768 -> 32768
> > dev_setvol: 0x81324000
> > dev_setvol: 0x81324000 -> 32768
> > aproc_del: rpipe(test45.raw): terminating...
> > file_del: wav:test45.raw <>: delayed
> > aproc_del: rpipe(test45.raw): freed
> > file_del: wav:test45.raw <>: immediate
> > mix_eof: mix: detached
> > dev_done: dev_mix = 0x89201580, dev_sub = 0x0
> > mix_out: nothing more to do...
> > aproc_del: mix(mix): terminating...
> > aproc_del: mix(mix): freed
> > aproc_del: wpipe(hdl): terminating...
> > file_del: sndio:hdl <WOK>: delayed
> > aproc_del: wpipe(hdl): has refs
> > file_del: sndio:hdl <WOK>: immediate
> > aproc_del: wpipe(hdl): terminating...
> > aproc_del: wpipe(hdl): freed
> > $
> >  
> > You may also want to note that by defining the rate (-r) as 16000Hz in
> > the playback still results in it playing too fast and with distortion,
> > albeit slower than playing it as above at 44100Hz. From the debug output
> > on the recording, it seems the file is supposed to be saved at 16000Hz,
> > but on playback, you have the force the rate down to about 8000Hz for
> > the timing to seem correct (i.e. normal speech speed, but there is also
> > plenty of distortion).
> 
> this really sounds like a driver issue.  aucat is bad data.  it can't
s/is/gets/

> fix that.
> 
> > I still think the issue has something to do with the new resampling
> > (rate change) code that allows aucat in server mode (-l) to handle
> > anything you toss at it. If I'm reading the debug output correctly,
> > the old 4.4-stable aucat resampled from 16000Hz up to 44100Hz, but the
> > 4.5-current aucat is not resampling the input at all during recording?
> 
> it's obviously the driver.  test the device on 44 and again on 45 *without
> using aucat at all* using audioctl/cat /dev/sound1.
> 
> -- 
> jake...@sdf.lonestar.org
> SDF Public Access UNIX System - http://sdf.lonestar.org
> 

-- 
jake...@sdf.lonestar.org
SDF Public Access UNIX System - http://sdf.lonestar.org

Reply via email to