Learn how easy it is to sync an existing GitHub or Google Code repo to a SourceForge project! See Demo

Close

#44 Allow use of 44,1kHz sample rate devices?

Next Release
open
None
3
2015-03-13
2014-02-21
Gronaz
No

Hi Volker
May I suggest if possible to allow Jamulus to use this 44,1kHz devices?
I can't use my Korg's Pandora PX5D:
Bellow is the sudo lsusb -v | grep -A230 "KORG" :
Bus 003 Device 015: ID 0944:0200 KORG, Inc.
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0 (Defined at Interface level)
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 8
idVendor 0x0944 KORG, Inc.
idProduct 0x0200
bcdDevice 1.00
iManufacturer 1 KORG INC.
iProduct 2 PANDORA PX5D
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 248
bNumInterfaces 4
bConfigurationValue 1
iConfiguration 0
bmAttributes 0x80
(Bus Powered)
MaxPower 250mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 0
bInterfaceClass 1 Audio
bInterfaceSubClass 1 Control Device
bInterfaceProtocol 0
iInterface 0
AudioControl Interface Descriptor:
bLength 10
bDescriptorType 36
bDescriptorSubtype 1 (HEADER)
bcdADC 1.00
wTotalLength 52
bInCollection 2
baInterfaceNr( 0) 1
baInterfaceNr( 1) 2
AudioControl Interface Descriptor:
bLength 12
bDescriptorType 36
bDescriptorSubtype 2 (INPUT_TERMINAL)
bTerminalID 1
wTerminalType 0x0101 USB Streaming
bAssocTerminal 0
bNrChannels 2
wChannelConfig 0x0003
Left Front (L)
Right Front (R)
iChannelNames 0
iTerminal 0
AudioControl Interface Descriptor:
bLength 9
bDescriptorType 36
bDescriptorSubtype 3 (OUTPUT_TERMINAL)
bTerminalID 2
wTerminalType 0x0302 Headphones
bAssocTerminal 0
bSourceID 1
iTerminal 0
AudioControl Interface Descriptor:
bLength 12
bDescriptorType 36
bDescriptorSubtype 2 (INPUT_TERMINAL)
bTerminalID 3
wTerminalType 0x0601 Analog Connector
bAssocTerminal 0
bNrChannels 2
wChannelConfig 0x0003
Left Front (L)
Right Front (R)
iChannelNames 0
iTerminal 0
AudioControl Interface Descriptor:
bLength 9
bDescriptorType 36
bDescriptorSubtype 3 (OUTPUT_TERMINAL)
bTerminalID 4
wTerminalType 0x0101 USB Streaming
bAssocTerminal 0
bSourceID 3
iTerminal 0
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 1
bAlternateSetting 0
bNumEndpoints 0
bInterfaceClass 1 Audio
bInterfaceSubClass 2 Streaming
bInterfaceProtocol 0
iInterface 0
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 1
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 1
bDelay 1 frames
wFormatTag 1 PCM
AudioStreaming Interface Descriptor:
bLength 11
bDescriptorType 36
bDescriptorSubtype 2 (FORMAT_TYPE)
bFormatType 1 (FORMAT_TYPE_I)
bNrChannels 2
bSubframeSize 2
bBitResolution 16
bSamFreqType 1 Discrete
tSamFreq[ 0] 44100
Endpoint Descriptor:
bLength 9
bDescriptorType 5
bEndpointAddress 0x01 EP 1 OUT
bmAttributes 9
Transfer Type Isochronous
Synch Type Adaptive
Usage Type Data
wMaxPacketSize 0x00c0 1x 192 bytes
bInterval 1
bRefresh 0
bSynchAddress 0
AudioControl Endpoint Descriptor:
bLength 7
bDescriptorType 37
bDescriptorSubtype 1 (EP_GENERAL)
bmAttributes 0x00
bLockDelayUnits 1 Milliseconds
wLockDelay 1 Milliseconds
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 4
bDelay 1 frames
wFormatTag 1 PCM
AudioStreaming Interface Descriptor:
bLength 11
bDescriptorType 36
bDescriptorSubtype 2 (FORMAT_TYPE)
bFormatType 1 (FORMAT_TYPE_I)
bNrChannels 2
bSubframeSize 2
bBitResolution 16
bSamFreqType 1 Discrete
tSamFreq[ 0] 44100
Endpoint Descriptor:
bLength 9
bDescriptorType 5
bEndpointAddress 0x82 EP 2 IN
bmAttributes 5
Transfer Type Isochronous
Synch Type Asynchronous
Usage Type Data
wMaxPacketSize 0x00c0 1x 192 bytes
bInterval 1
bRefresh 0
bSynchAddress 0
AudioControl Endpoint Descriptor:
bLength 7
bDescriptorType 37
bDescriptorSubtype 1 (EP_GENERAL)
bmAttributes 0x00
bLockDelayUnits 0 Undefined
wLockDelay 0 Undefined
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 3
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 255 Vendor Specific Class
bInterfaceSubClass 255 Vendor Specific Subclass
bInterfaceProtocol 0
iInterface 0
** UNRECOGNIZED: 07 24 01 00 01 25 00
** UNRECOGNIZED: 06 24 02 01 10 03
** UNRECOGNIZED: 09 24 03 02 40 01 10 01 00
** UNRECOGNIZED: 09 24 03 01 30 01 20 01 04
** UNRECOGNIZED: 06 24 02 02 20 00
Endpoint Descriptor:
bLength 9
bDescriptorType 5
bEndpointAddress 0x04 EP 4 OUT
bmAttributes 2
Transfer Type Bulk
Synch Type None
Usage Type Data
wMaxPacketSize 0x0040 1x 64 bytes
bInterval 0
bRefresh 0
bSynchAddress 0
Endpoint Descriptor:
bLength 9
bDescriptorType 5
bEndpointAddress 0x85 EP 5 IN
bmAttributes 2
Transfer Type Bulk
Synch Type None
Usage Type Data
wMaxPacketSize 0x0040 1x 64 bytes
bInterval 0
bRefresh 0
bSynchAddress 0
Device Status: 0x0001
Self Powered

Discussion

  • Volker Fischer
    Volker Fischer
    2014-02-22

    The conversion from 44.1 kHz to 48 kHz is not trivial. The resampler algorithm is a bit more difficult. But this is not the actual problem here. Internally, Jamulus works on a frame size of 128 samples. If you convert the size to 44.1 kHz, you do not get an integer number but 139.319... So we cannot simply plug in a resampler. It is even not enough to just insert a buffer which compensates for the different sizes. No, it is even more complicated since the fractional part must be considered by, e.g., using frame sizes which change peridically with time.
    Since you always will need additional buffers (which increases the latency) and the effort which must be spend is significantly, I have not done it and unfortunately, I have no plans to support it in the future. Because there is even one more significant issue with the support of 44.1 kHz. Imagine a user which is not experienced with PCs. If the sound card is set to 44.1 kHz by default the Jamulus would work with that rate but would introduce additional delay. The user would not even know about this loose in performance. If the software forces to use 48 kHz, even the unexperienced user must change the sound card rate and will benefit from a much better latency. Just in your case that you have a sound card which does not support 48 kHz, you unfortunately cannot use the Jamulus software with that sound card under Linux. But if I have understand correctly, the same sound card works fine with Jamulus under Windows?

     
    • Gronaz
      Gronaz
      2014-03-05

      Thank you Volker, I understand (a little). That's something I inkled here http://linuxmusicians.com/viewtopic.php?f=44&t=12209 . Ok, feel free to close/won't fix this request. I'll first try software resampling (if possible) to postpone a trial to buy/use another box (UCA200/202 ?) and a realworld wire from the Pandora, then wine then Windows. I won't abandon Linux until I try this, even if someone believe webjam is a per-se issue.
      I didn't tried Jamulus@Win[e|dows] yet, but I just checked with the bundled Ableton setting that: Korg ASIO driver shows a single 44k1 ~choice~ (so no need to try Jamulus this way, it won't work) and MME/DirectX driver offers 22k05 to 96k including 48k (would allow ~running~ a limping Jamulus if I understand well). The gentle guy @linuxmusicians link above gave me fine info about what to hope from this bad way to do, and I think my idea above about software resampling in Linux is something the same as SSE/DX in Win.

      Please go on your great effort and thank very much again for spendind time to reply.
      Bye Bye

       
  • Volker Fischer
    Volker Fischer
    2015-03-13

    • Priority: 5 --> 3