From owner-freebsd-questions Wed Oct 25 4:46:20 2000 Delivered-To: freebsd-questions@freebsd.org Received: from francine.edoropolis.org (catv6055.extern.kun.nl [131.174.116.55]) by hub.freebsd.org (Postfix) with ESMTP id BCAD037B479 for ; Wed, 25 Oct 2000 04:46:11 -0700 (PDT) Received: from francine.edoropolis.org (localhost [127.0.0.1]) by francine.edoropolis.org (8.11.0/8.9.2) with ESMTP id e9PBk9j06626 for ; Wed, 25 Oct 2000 13:46:09 +0200 (CEST) (envelope-from purrcat@edoropolis.org) Message-Id: <200010251146.e9PBk9j06626@francine.edoropolis.org> To: freebsd-questions@freebsd.org Subject: ViBRA16C 16bit recording problems X-Mailer: nmh X-Maileditor: vi X-Visit: http://www.edoropolis.org/ X-Use: Leona-HTTPd, http://www.qdonksoft.com/ Date: Wed, 25 Oct 2000 13:46:08 +0200 From: Khamba Staring Sender: owner-freebsd-questions@FreeBSD.ORG Precedence: bulk X-Loop: FreeBSD.ORG Hi, I'm trying to record some music using a SoundBlaster ViBRA16C soundcard. I can record at various speeds (8000/22050/44100 etc Hz) both stereo and mono, but when I set the depth to 16 bits instead of 8, all I get is static. I used DAP for this and thought it was a DAP problem until I wrote a little record program myself (DAP can't record long plays; my code just reads /dev/dsp and puts the output directly in a file) but I got the same result (all speeds, mono/stereo recording works, but not with 16bits). dmesg outputs: -- sbc1: at port 0x220-0x22f,0x330-0x331,0x388-0x38b irq 5 drq 1,5 on isa0 sbc1: setting card to irq 5, drq 1, 5 pcm0: on sbc1 -- IRQ 5, DRQ 1 and 5 are not used by any other device. As far as I can see all devices are properly linked: -- lrwxrwxrwx 1 root wheel 4 Oct 25 12:33 dsp -> dsp0 crw-rw-rw- 1 root wheel 30, 3 Oct 25 12:33 dsp0 lrwxrwxrwx 1 root wheel 5 Oct 25 12:33 dspW -> dspW0 crw-rw-rw- 1 root wheel 30, 5 Oct 25 12:33 dspW0 -- This is what my relevant code looks like: -- if((snddev = open(sd, O_RDONLY, 0)) == -1) { printf("error opening sound device %s: %s\n", sd, strerror(errno)); exit(-1); } if(s_depth == 16) { format = AFMT_U16_LE; printf("Setting device to 16 bits: "); if(ioctl(snddev, SNDCTL_DSP_SETFMT, &format) == -1) { printf("not succeeded: %s\n", strerror(errno)); exit(-1); } else printf("succeeded\n"); if(format != AFMT_U16_LE) { printf("not succeeded; format: %d\n", format); exit(-1); } } if(s_size == 2) { printf("Setting device to stereo: "); if(ioctl(snddev, SNDCTL_DSP_STEREO, &true) == -1) { printf("not succeeded: %s\n", strerror(errno)); exit(-1); } else printf("succeeded: %d\n", s_size); } printf("Setting speed to %d: ", s_rate); if(ioctl(snddev, SNDCTL_DSP_SPEED, &s_rate) == -1) { printf("not succeeded: %s\n", strerror(errno)); exit(-1); } else printf("succeeded: %d\n", s_rate); for(;;) { if((dev_read = read(snddev, sndbuf, bufsize)) == -1) { printf("error reading sound device file %s: %s\n", sd, strerror(errno)); sigint(); } if((file_written = fwrite(sndbuf, 1, dev_read, sndfile)) == 0) { printf("error writing to file %s\n", sf); sigint(); } } -- Of course I also opened the output file (sndfile), I used a 1024 bytes (bufsize) buffer (sndbuf). SIGINT is used to stop the recording; sigint() just closes the files and quits. The output looks like this: -- Setting device to 16 bits: succeeded Setting device to stereo: succeeded: 2 Setting speed to 44100: succeeded: 44100 -- Has anyone had the same problem? Or does anyone know where I should start looking for it? I also tried the Network Audio System, but wasn't able to produce a playable audio file (?!). Also, playing 16bit 44100 stereo audio streams works like a charm.. I don't understand it. Kind regards, -- Khamba Staring Ps: I'm not on the freebsd-questions mailing list. If you've got an answer, please also mail it to me.. To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-questions" in the body of the message