* USB device gives wrong data?
@ 2007-10-19 21:44 william estrada
2007-10-22 6:34 ` Clemens Ladisch
0 siblings, 1 reply; 4+ messages in thread
From: william estrada @ 2007-10-19 21:44 UTC (permalink / raw)
To: linux-audio-user; +Cc: alsa-user, alsa-devel@alsa-project.org
Hi group,
I think I have found a problem with the USB sound driver? It appears
that the current drive returns a x'81' for silence but it should be a
x'7f'.
When I use my laptop's sound device and record without a mic, I get
a file full of x'7f's. If I do the same with my cheap-o USB device
I get a file full of x'81's. The sound quality from the laptop is
unacceptable, so that is way I want to use the USB device.
I have written a recording program that I have a 'silence' filter
that filters out segments of dead air. It works with the laptop's
sound device but not the USB device. The filter works by remove
x'7f's after allowing a selectable amount. I get the results using
arecord which does not have the filtering.
The USB device is a C -Media Electronics, Inc. I am running FC6.
> [root@laptop ~]# lsmod |grep snd
> snd_usb_audio 81985 0
> snd_usb_lib 21057 1 snd_usb_audio
> snd_rawmidi 28481 1 snd_usb_lib
> snd_hwdep 13637 1 snd_usb_audio
> snd_ali5451 27853 1
> snd_ac97_codec 99813 1 snd_ali5451
> snd_ac97_bus 6593 1 snd_ac97_codec
> snd_seq_dummy 8133 0
> snd_seq_oss 37057 0
> snd_seq_midi_event 11841 1 snd_seq_oss
> snd_seq 57009 5 snd_seq_dummy,snd_seq_oss,snd_seq_midi_event
> snd_seq_device 12365 4 snd_rawmidi,snd_seq_dummy,snd_seq_oss,snd_seq
> snd_pcm_oss 46433 0
> snd_mixer_oss 20545 1 snd_pcm_oss
> snd_pcm 80965 4 snd_usb_audio,snd_ali5451,snd_ac97_codec,snd_pcm_oss
> snd_timer 26693 2 snd_seq,snd_pcm
> snd 58181 140 snd_usb_audio,snd_rawmidi,snd_hwdep,snd_ali5451,snd_ac97_codec,snd_seq_oss,snd_seq,snd_seq_device,snd_pcm_oss,snd_mixer_oss,snd_pcm,snd_timer
> soundcore 12193 1 snd
> snd_page_alloc 14281 1 snd_pcm
Where do I report this 'bug' or how do I fix it?
Thanks for your time. Sorry for the multiple posting, not sure where is
should have gone.
--
William Estrada
MrUmunhum@popdial.com
Mt-Umunhum-Wireless.net ( http://Mt-Umunhum-Wireless.net )
Ymessenger: MrUmunhum
-------------------------------------------------------------------------
This SF.net email is sponsored by: Splunk Inc.
Still grepping through log files to find problems? Stop.
Now Search log events and configuration files using AJAX and a browser.
Download your FREE copy of Splunk now >> http://get.splunk.com/
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: USB device gives wrong data?
2007-10-19 21:44 USB device gives wrong data? william estrada
@ 2007-10-22 6:34 ` Clemens Ladisch
2007-10-22 16:58 ` william estrada
0 siblings, 1 reply; 4+ messages in thread
From: Clemens Ladisch @ 2007-10-22 6:34 UTC (permalink / raw)
To: william estrada; +Cc: alsa-devel
william estrada wrote:
> I think I have found a problem with the USB sound driver? It appears
> that the current drive returns a x'81' for silence but it should be a
> x'7f'.
The USB audio driver returns whatever data is sent by the device
> When I use my laptop's sound device and record without a mic, I get
> a file full of x'7f's. If I do the same with my cheap-o USB device
> I get a file full of x'81's.
For unsigned 8-bit samples, silence is x'80'.
Apparently, both devices have some DC offset and are quite noisy.
> I have written a recording program that I have a 'silence' filter
> that filters out segments of dead air. It works with the laptop's
> sound device but not the USB device. The filter works by remove
> x'7f's after allowing a selectable amount.
Your filter should be able to detect silence even when noise is present.
> Sorry for the multiple posting, not sure where is should have gone.
The the linux-audio-dev list, of course. ;-)
Regards,
Clemens
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: USB device gives wrong data?
2007-10-22 6:34 ` Clemens Ladisch
@ 2007-10-22 16:58 ` william estrada
[not found] ` <471CD6BE.4090209-rB/de7zFuWlBDgjK7y7TUQ@public.gmane.org>
0 siblings, 1 reply; 4+ messages in thread
From: william estrada @ 2007-10-22 16:58 UTC (permalink / raw)
To: Clemens Ladisch; +Cc: linux-audio-user@lists.linuxaudio.org, alsa-devel
Clemens,
I respect your options and appreciate your time, but from what I have read,
for a U8 format, silence is represented by a x'7F'. Do you have a source for
your option?
In pcm_misc.c seems to support your statement:
> static struct pcm_format_data pcm_formats[SNDRV_PCM_FORMAT_LAST+1] = {
.
.
> [SNDRV_PCM_FORMAT_U8] = {
> .width = 8, .phys = 8, .le = -1, .signd = 0,
> .silence = { 0x80 },
So I guess I need to make my filter flexible to match the current hardware
device driver?
How would you filter out noise? I am new to these interfaces and would like
to find a good place to get more information about filters, noise, etc. Any
URLs that you could recommend?
Thanks again for your time.
William Estrada
MrUmunhum@popdial.com
Mt-Umunhum-Wireless.net ( http://Mt-Umunhum-Wireless.net )
Ymessenger: MrUmunhum
Clemens Ladisch wrote:
> william estrada wrote:
>> I think I have found a problem with the USB sound driver? It appears
>> that the current drive returns a x'81' for silence but it should be a
>> x'7f'.
>
> The USB audio driver returns whatever data is sent by the device
>
>> When I use my laptop's sound device and record without a mic, I get
>> a file full of x'7f's. If I do the same with my cheap-o USB device
>> I get a file full of x'81's.
>
> For unsigned 8-bit samples, silence is x'80'.
>
> Apparently, both devices have some DC offset and are quite noisy.
>
>> I have written a recording program that I have a 'silence' filter
>> that filters out segments of dead air. It works with the laptop's
>> sound device but not the USB device. The filter works by remove
>> x'7f's after allowing a selectable amount.
>
> Your filter should be able to detect silence even when noise is present.
>
>> Sorry for the multiple posting, not sure where is should have gone.
>
> The the linux-audio-dev list, of course. ;-)
>
>
> Regards,
> Clemens
>
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [LAU] [alsa-devel] USB device gives wrong data?
[not found] ` <471CD6BE.4090209-rB/de7zFuWlBDgjK7y7TUQ@public.gmane.org>
@ 2007-10-22 23:05 ` James Cameron
0 siblings, 0 replies; 4+ messages in thread
From: James Cameron @ 2007-10-22 23:05 UTC (permalink / raw)
To: william estrada
Cc: linux-audio-user-cunTk1MwBs/CEJeg2xFRV2D2FQJk+8+b@public.gmane.org,
alsa-devel-K7yf7f+aM1XWsZ/bQMPhNw
Silence must be detected as a series of near equal samples, the absolute
value of a sample tells you nothing.
Given that the device produces PCM, it will contain an analog-to-digital
converter (ADC), which *should* be designed to yield the 0x80 value, but
manufacturing variables may conspire to produce a small offset and noise.
Offset. There will usually be some residual DC offset in an ADC design.
Most of the DC offset is removed with capacitors in series on the signal
path. DC offset moves the noise of silence in one direction away from
the zero point.
Noise. Sampling noise in the ADC will cause the final bit to vary, so a
chain of 0x80 0x7f 0x80 0x7f in any length and order might be received
for a silent input. This noise will vary according to temperature, and
other environmental factors. Classic sources of noise are interference
from radio transmitters, and earth loop hum.
The kernel source file pcm_misc.c provides silence values for use by the
kernel in generating silence, not in recognising it. Therefore these
values should not be used in a discussion of whether a device is
providing valid silence.
On Mon, Oct 22, 2007 at 09:58:38AM -0700, william estrada wrote:
> So I guess I need to make my filter flexible to match the current
> hardware device driver?
You should make any filter flexible enough to match all hardware, and
that way it will most reliably detect silence.
> How would you filter out noise?
You can filter out DC offset by measuring the offset you have, and
subtracting this measurement from your samples.
It is not possible to filter out ADC noise, because this noise is
inherent in the design of the ADC. There are advanced techniques that
can be done during manufacturing, but you're not at that stage in the
product lifecycle.
However, you could measure the noise, and see if your measurements are
reduced by adding a balun to the audio cable, or by stabilising the
temperature of the device, or by isolating the ground loop.
For example, if I connect some instrument to the Mic or Line In of one
of my sound cards, the outer ring of the connector is anchored to
electrical ground on my computer. The path through the safety ground
cable back to the instrument will usually cause a hum. Using an audio
transformer on the path from the instrument to the sound card may fix
this.
--
James Cameron mailto:quozl-kJBlkiJxCS/dtAWm4Da02A@public.gmane.org http://quozl.netrek.org/
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2007-10-22 23:05 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2007-10-19 21:44 USB device gives wrong data? william estrada
2007-10-22 6:34 ` Clemens Ladisch
2007-10-22 16:58 ` william estrada
[not found] ` <471CD6BE.4090209-rB/de7zFuWlBDgjK7y7TUQ@public.gmane.org>
2007-10-22 23:05 ` [LAU] [alsa-devel] " James Cameron
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.