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