[alsa-devel] Usb audio - unsuported sampling rates
Hello,
I'm using an usb mic which(according to it's producer should support up to 48kHz sampling rate). The problem is ALSA allows me to use only 16 kHz for this device. I do not want to resample the data, I want to sample it at 48kHz in order to be able to record some high pitch sounds 18-20kHz.
I would want to try to do any modifications necessary in order to try support 48kHz, but I'm not sure where to start.
Some information:
cat /proc/asound/modules ... 1 snd_usb_audio
arecord --list-devices **** List of CAPTURE Hardware Devices **** .... card 1: CameraB409241 [USB Camera-B4.09.24.1], device 0: USB Audio [USB Audio] Subdevices: 1/1 Subdevice #0: subdevice #0
when I try to use: arecord -v -D hw:1,0 -f S16_LE -c 4 -r 48000 gigi.wav I get this:
Recording WAVE 'gigi.wav' : Signed 16 bit Little Endian, Rate 48000 Hz, Channels 4 Warning: rate is not accurate (requested = 48000Hz, got = 16000Hz) please, try the plug plugin Hardware PCM card 1 'USB Camera-B4.09.24.1' device 0 subdevice 0 Its setup is: stream : CAPTURE access : RW_INTERLEAVED format : S16_LE subformat : STD channels : 4 rate : 16000 exact rate : 16000 (16000/1) msbits : 16 buffer_size : 8000 period_size : 2000 period_time : 125000 tstamp_mode : NONE period_step : 1 avail_min : 2000 period_event : 0 start_threshold : 1 stop_threshold : 8000 silence_threshold: 0 silence_size : 0 boundary : 2097152000 appl_ptr : 0 hw_ptr : 0
Any sampling rate I would try higher or lower than 16kHz, I will always get 16000 kHz.
Some more information: lsusb Bus 001 Device 007: ID 1415:2000 Nam Tai E&E Products Ltd. or OmniVision Technologies, Inc. Sony Playstation Eye
lsusb -t
/: Bus 01.Port 1: Dev 1, Class=root_hub, Driver=ehci_hcd/2p, 480M |__ Port 1: Dev 2, If 0, Class=hub, Driver=hub/6p, 480M |__ Port 2: Dev 7, If 0, Class=vend., Driver=ov534, 480M |__ Port 2: Dev 7, If 1, Class=audio, Driver=snd-usb-audio, 480M |__ Port 2: Dev 7, If 2, Class=audio, Driver=snd-usb-audio, 480M
At the moment I'm looking inside ALSA's source code to try to see from where this limitation of 16000kHz for my device appears, but I have to admit that I'm kind of lost. Any pointers on what direction should I go to try make my desired rate supported would be greatly appreciated!
Thank you and best regards, Gordon
Hi,
On 10.07.2012 07:25, Gordon Dilan wrote:
I'm using an usb mic which(according to it's producer should support up to 48kHz sampling rate). The problem is ALSA allows me to use only 16 kHz for this device. I do not want to resample the data, I want to sample it at 48kHz in order to be able to record some high pitch sounds 18-20kHz.
I would want to try to do any modifications necessary in order to try support 48kHz, but I'm not sure where to start.
[...]
Some more information: lsusb Bus 001 Device 007: ID 1415:2000 Nam Tai E&E Products Ltd. or OmniVision Technologies, Inc. Sony Playstation Eye
lsusb -t
Please also provide the output of 'lsusb -v'.
/: Bus 01.Port 1: Dev 1, Class=root_hub, Driver=ehci_hcd/2p, 480M |__ Port 1: Dev 2, If 0, Class=hub, Driver=hub/6p, 480M |__ Port 2: Dev 7, If 0, Class=vend., Driver=ov534, 480M |__ Port 2: Dev 7, If 1, Class=audio, Driver=snd-usb-audio, 480M |__ Port 2: Dev 7, If 2, Class=audio, Driver=snd-usb-audio, 480M
At the moment I'm looking inside ALSA's source code to try to see from where this limitation of 16000kHz for my device appears, but I have to admit that I'm kind of lost. Any pointers on what direction should I go to try make my desired rate supported would be greatly appreciated!
The device is queried for its supported sample rates during probe using class-specific commands. If it doesn't return all rates that are actually supported, we need to add a quirk and override this list.
The list of known sample rates is included in /proc/asound/card1/stream0. What does that show for you?
Daniel
Hello Daniel,
Thank you very much for your reply !!!
Please see below.
On Tue, Jul 10, 2012 at 9:53 AM, Daniel Mack zonque@gmail.com wrote:
Hi,
On 10.07.2012 07:25, Gordon Dilan wrote:
I'm using an usb mic which(according to it's producer should support up
to
48kHz sampling rate). The problem is ALSA allows me to use only 16 kHz
for
this device. I do not want to resample the data, I want to sample it at 48kHz in order to be able to record some high pitch sounds 18-20kHz.
I would want to try to do any modifications necessary in order to try support 48kHz, but I'm not sure where to start.
[...]
Some more information: lsusb Bus 001 Device 007: ID 1415:2000 Nam Tai E&E Products Ltd. or OmniVision Technologies, Inc. Sony Playstation Eye
lsusb -t
Please also provide the output of 'lsusb -v'.
I've appended the output at the end of this mail. Since the output is long, I've also put it on pastebin: http://pastebin.com/tpY1thht
/: Bus 01.Port 1: Dev 1, Class=root_hub, Driver=ehci_hcd/2p, 480M |__ Port 1: Dev 2, If 0, Class=hub, Driver=hub/6p, 480M |__ Port 2: Dev 7, If 0, Class=vend., Driver=ov534, 480M |__ Port 2: Dev 7, If 1, Class=audio, Driver=snd-usb-audio, 480M |__ Port 2: Dev 7, If 2, Class=audio, Driver=snd-usb-audio, 480M
At the moment I'm looking inside ALSA's source code to try to see from where this limitation of 16000kHz for my device appears, but I have to admit that I'm kind of lost. Any pointers on what direction should I go to try make my desired rate supported would be greatly appreciated!
The device is queried for its supported sample rates during probe using class-specific commands. If it doesn't return all rates that are actually supported, we need to add a quirk and override this list.
The list of known sample rates is included in /proc/asound/card1/stream0. What does that show for you?
cat /proc/asound/card1/stream0 OmniVision Technologies, Inc. USB Camera-B4.09.24.1 at usb-0000:00:1a.0-1.2, hi : USB Audio
Capture: Status: Stop Interface 2 Altset 1 Format: S16_LE Channels: 4 Endpoint: 4 IN (ASYNC) Rates: 16000 Data packet interval: 1000 us
Daniel
I mention that while trying to record using arecord I see in /var/logs/messages: "kernel: [20914.414286] ALSA clock.c:242 current rate 177346 is different from the runtime rate 16000" The current rate reported here varies for each call of arecord. Eg it can be: 676371, 508390, 139882 etc. The values reported are too high to be real.
lsusb -v
Bus 001 Device 008: ID 1415:2000 Nam Tai E&E Products Ltd. or OmniVision Technologies, Inc. Sony Playstation Eye Device Descriptor: bLength 18 bDescriptorType 1 bcdUSB 2.00 bDeviceClass 0 (Defined at Interface level) bDeviceSubClass 0 bDeviceProtocol 0 bMaxPacketSize0 64 idVendor 0x1415 Nam Tai E&E Products Ltd. or OmniVision Technologies, Inc. idProduct 0x2000 Sony Playstation Eye bcdDevice 2.00 iManufacturer 1 OmniVision Technologies, Inc. iProduct 2 USB Camera-B4.09.24.1 iSerial 0 bNumConfigurations 1 Configuration Descriptor: bLength 9 bDescriptorType 2 wTotalLength 142 bNumInterfaces 3 bConfigurationValue 1 iConfiguration 0 bmAttributes 0x80 (Bus Powered) MaxPower 500mA Interface Descriptor: bLength 9 bDescriptorType 4 bInterfaceNumber 0 bAlternateSetting 0 bNumEndpoints 3 bInterfaceClass 255 Vendor Specific Class bInterfaceSubClass 0 bInterfaceProtocol 0 iInterface 0 Endpoint Descriptor: bLength 7 bDescriptorType 5 bEndpointAddress 0x81 EP 1 IN bmAttributes 2 Transfer Type Bulk Synch Type None Usage Type Data wMaxPacketSize 0x0200 1x 512 bytes bInterval 0 Endpoint Descriptor: bLength 7 bDescriptorType 5 bEndpointAddress 0x02 EP 2 OUT bmAttributes 2 Transfer Type Bulk Synch Type None Usage Type Data wMaxPacketSize 0x0200 1x 512 bytes bInterval 0 Endpoint Descriptor: bLength 7 bDescriptorType 5 bEndpointAddress 0x83 EP 3 IN bmAttributes 3 Transfer Type Interrupt Synch Type None Usage Type Data wMaxPacketSize 0x0040 1x 64 bytes bInterval 10 Interface Descriptor: bLength 9 bDescriptorType 4 bInterfaceNumber 1 bAlternateSetting 0 bNumEndpoints 0 bInterfaceClass 1 Audio bInterfaceSubClass 1 Control Device bInterfaceProtocol 0 iInterface 0 AudioControl Interface Descriptor: bLength 9 bDescriptorType 36 bDescriptorSubtype 1 (HEADER) bcdADC 1.00 wTotalLength 42 bInCollection 1 baInterfaceNr( 0) 2 AudioControl Interface Descriptor: bLength 12 bDescriptorType 36 bDescriptorSubtype 2 (INPUT_TERMINAL) bTerminalID 1 wTerminalType 0x0201 Microphone bAssocTerminal 2 bNrChannels 4 wChannelConfig 0x0000 iChannelNames 0 iTerminal 0 AudioControl Interface Descriptor: bLength 9 bDescriptorType 36 bDescriptorSubtype 3 (OUTPUT_TERMINAL) bTerminalID 2 wTerminalType 0x0101 USB Streaming bAssocTerminal 1 bSourceID 3 iTerminal 0 AudioControl Interface Descriptor: bLength 12 bDescriptorType 36 bDescriptorSubtype 6 (FEATURE_UNIT) bUnitID 3 bSourceID 1 bControlSize 1 bmaControls( 0) 0x00 bmaControls( 1) 0x02 Volume Control bmaControls( 2) 0x02 Volume Control bmaControls( 3) 0x02 Volume Control bmaControls( 4) 0x02 Volume Control iFeature 0 Interface Descriptor: bLength 9 bDescriptorType 4 bInterfaceNumber 2 bAlternateSetting 0 bNumEndpoints 0 bInterfaceClass 1 Audio bInterfaceSubClass 2 Streaming bInterfaceProtocol 0 iInterface 0 Interface Descriptor: bLength 9 bDescriptorType 4 bInterfaceNumber 2 bAlternateSetting 1 bNumEndpoints 1 bInterfaceClass 1 Audio bInterfaceSubClass 2 Streaming bInterfaceProtocol 0 iInterface 0 AudioStreaming Interface Descriptor: bLength 7 bDescriptorType 36 bDescriptorSubtype 1 (AS_GENERAL) bTerminalLink 2 bDelay 1 frames wFormatTag 1 PCM AudioStreaming Interface Descriptor: bLength 11 bDescriptorType 36 bDescriptorSubtype 2 (FORMAT_TYPE) bFormatType 1 (FORMAT_TYPE_I) bNrChannels 4 bSubframeSize 2 bBitResolution 16 bSamFreqType 1 Discrete tSamFreq[ 0] 16000 Endpoint Descriptor: bLength 9 bDescriptorType 5 bEndpointAddress 0x84 EP 4 IN bmAttributes 5 Transfer Type Isochronous Synch Type Asynchronous Usage Type Data wMaxPacketSize 0x0300 1x 768 bytes bInterval 4 bRefresh 0 bSynchAddress 0 AudioControl Endpoint Descriptor: bLength 7 bDescriptorType 37 bDescriptorSubtype 1 (EP_GENERAL) bmAttributes 0x01 Sampling Frequency bLockDelayUnits 0 Undefined wLockDelay 0 Undefined Device Qualifier (for other device speed): bLength 10 bDescriptorType 6 bcdUSB 2.00 bDeviceClass 0 (Defined at Interface level) bDeviceSubClass 0 bDeviceProtocol 0 bMaxPacketSize0 64 bNumConfigurations 1 Device Status: 0x0000 (Bus Powered)
Once again thank you, Gordon
Hi Gordon,
On 10.07.2012 20:57, Gordon Dilan wrote: 0
Interface Descriptor: bLength 9 bDescriptorType 4 bInterfaceNumber 2 bAlternateSetting 1 bNumEndpoints 1 bInterfaceClass 1 Audio bInterfaceSubClass 2 Streaming bInterfaceProtocol 0 iInterface 0 AudioStreaming Interface Descriptor: bLength 7 bDescriptorType 36 bDescriptorSubtype 1 (AS_GENERAL) bTerminalLink 2 bDelay 1 frames wFormatTag 1 PCM AudioStreaming Interface Descriptor: bLength 11 bDescriptorType 36 bDescriptorSubtype 2 (FORMAT_TYPE) bFormatType 1 (FORMAT_TYPE_I) bNrChannels 4 bSubframeSize 2 bBitResolution 16 bSamFreqType 1 Discrete tSamFreq[ 0] 16000
The interface only reports this single sample rate. If the vendor claims that there are in fact more, it would be good to know which ones.
Then we can add a quirk to parse_audio_format_rates_v1() in sound/usb/format.c - that shouldn't be too hard.
Daniel
On 10.07.2012 23:33, Daniel Mack wrote:
Hi Gordon,
On 10.07.2012 20:57, Gordon Dilan wrote: 0
Interface Descriptor: bLength 9 bDescriptorType 4 bInterfaceNumber 2 bAlternateSetting 1 bNumEndpoints 1 bInterfaceClass 1 Audio bInterfaceSubClass 2 Streaming bInterfaceProtocol 0 iInterface 0 AudioStreaming Interface Descriptor: bLength 7 bDescriptorType 36 bDescriptorSubtype 1 (AS_GENERAL) bTerminalLink 2 bDelay 1 frames wFormatTag 1 PCM AudioStreaming Interface Descriptor: bLength 11 bDescriptorType 36 bDescriptorSubtype 2 (FORMAT_TYPE) bFormatType 1 (FORMAT_TYPE_I) bNrChannels 4 bSubframeSize 2 bBitResolution 16 bSamFreqType 1 Discrete tSamFreq[ 0] 16000
The interface only reports this single sample rate. If the vendor claims that there are in fact more, it would be good to know which ones.
Then we can add a quirk to parse_audio_format_rates_v1() in sound/usb/format.c - that shouldn't be too hard.
Something like the patch below could help. Can you try this?
Daniel
Hello Daniel,
Thank you very much for your help and sorry for the late answer. I was without internet access for the last few days.
I have tried the patch that you sent me(with a minor modification: fp->rate_max(instead of min) = 48000; ). If I try to record using 48kHz and then playback, it will playback in "fast speed", voices being recorded as "chipmunks". Only at 16000Hz it records at "normal speed".
So it seems that the recording is still done in fact at 16kHz, even though now the driver appears to support sampling rates between 16000-48000Hz.
Dmesg is also showing me this everytime I try to record using the microphone(These messages appeared even without the driver modification): [ 165.364728] ALSA clock.c:242 current rate 175902 is different from the runtime rate 48000 [ 171.838509] ALSA clock.c:242 current rate 51816 is different from the runtime rate 48000 [ 206.950822] ALSA clock.c:242 current rate 281039 is different from the runtime rate 48000 [ 968.713856] ALSA clock.c:242 current rate 6096811 is different from the runtime rate 48000
Once again, thank you very much for your support!
Best Regards, Gordon
On Thu, Jul 12, 2012 at 3:44 AM, Daniel Mack zonque@gmail.com wrote:
On 10.07.2012 23:33, Daniel Mack wrote:
Hi Gordon,
On 10.07.2012 20:57, Gordon Dilan wrote: 0
Interface Descriptor: bLength 9 bDescriptorType 4 bInterfaceNumber 2 bAlternateSetting 1 bNumEndpoints 1 bInterfaceClass 1 Audio bInterfaceSubClass 2 Streaming bInterfaceProtocol 0 iInterface 0 AudioStreaming Interface Descriptor: bLength 7 bDescriptorType 36 bDescriptorSubtype 1 (AS_GENERAL) bTerminalLink 2 bDelay 1 frames wFormatTag 1 PCM AudioStreaming Interface Descriptor: bLength 11 bDescriptorType 36 bDescriptorSubtype 2 (FORMAT_TYPE) bFormatType 1 (FORMAT_TYPE_I) bNrChannels 4 bSubframeSize 2 bBitResolution 16 bSamFreqType 1 Discrete tSamFreq[ 0] 16000
The interface only reports this single sample rate. If the vendor claims that there are in fact more, it would be good to know which ones.
Then we can add a quirk to parse_audio_format_rates_v1() in sound/usb/format.c - that shouldn't be too hard.
Something like the patch below could help. Can you try this?
Daniel
Gordon Dilan <gordon.dilan <at> gmail.com> writes:
Hello Daniel,
Thank you very much for your help and sorry for the late answer. I was without internet access for the last few days.
I have tried the patch that you sent me(with a minor modification: fp->rate_max(instead of min) = 48000; ). If I try to record using 48kHz and then playback, it will playback in
"fast
speed", voices being recorded as "chipmunks". Only at 16000Hz it records at "normal speed".
Hi Daniel and Gordon,
Sorry for posting on such an old thread. I have recently started using the PlayStation Eye for audio processing and I have run into the same issue of ALSA only allowing the device to capture at 16khz sampling rate when it should be capable of 48khz. Your last post indicates that even with a patch, the device only sampled at 16khz and just played the samples faster. I am just wondering if either of you came up with a solution to this problem? Was it ever possible to record at a 48khz?
Any help or information would be greatly appreciated.
Thanks,
Jacobson.
participants (3)
-
Daniel Mack
-
Gordon Dilan
-
Jacobson