alsa-devel.alsa-project.org archive mirror
 help / color / mirror / Atom feed
* Roland OCTA-CAPTURE (0582:0120) - White Noise/Static on Playback
@ 2025-11-29 11:44 Niklas Aldervall
  2025-11-29 18:07 ` Lucas
  0 siblings, 1 reply; 2+ messages in thread
From: Niklas Aldervall @ 2025-11-29 11:44 UTC (permalink / raw)
  To: alsa-devel

[-- Attachment #1: Type: text/plain, Size: 4819 bytes --]

# ALSA Bug Report: Roland OCTA-CAPTURE (0582:0120) - White Noise/Static 
on Playback

## Summary
Roland OCTA-CAPTURE USB audio interface produces white noise/static 
instead of clean audio on Linux, despite being detected and initialized 
by snd_usb_audio driver.

## Device Information
- **Model**: Roland OCTA-CAPTURE (UA-1010)
- **USB ID**: 0582:0120
- **Manufacturer**: Roland Corporation
- **Device Class**: Vendor Specific (0xFF) - NOT USB Audio Class compliant
- **Serial**: ISRL4B236F81

## System Information
- **Kernel**: 6.17.9-2-cachyos
- **Distribution**: Arch Linux (CachyOS)
- **Audio Server**: PipeWire 1.2.7
- **ALSA Driver**: snd_usb_audio (built as module)

## Symptoms
1. Device is correctly detected and recognized by ALSA
2. ALSA shows proper capabilities: S32_LE, 10ch playback, 12ch capture, 
44100Hz
3. Audio streams can be sent to device without errors
4. **OUTPUT**: Only white noise/static is produced instead of clean audio
5. Issue occurs with both direct ALSA (speaker-test) and PipeWire
6. Issue persists across all available profiles (multichannel, pro-audio)

## Device Detection (lsusb)
```
Bus 001 Device 008: ID 0582:0120 Roland Corp. OCTA-CAPTURE
   bDeviceClass          255 Vendor Specific Class
   bDeviceSubClass         0
   bDeviceProtocol       255
   idVendor           0x0582 Roland Corp.
   idProduct          0x0120 OCTA-CAPTURE
```

## ALSA Stream Configuration
```
Roland OCTA-CAPTURE at usb-0000:00:14.0-3, high speed : USB Audio

Playback:
   Status: Stop
   Interface 0
     Altset 1
     Format: S32_LE
     Channels: 10
     Endpoint: 0x05 (5 OUT) (ASYNC)
     Rates: 44100
     Data packet interval: 125 us
     Bits: 0
     Sync Endpoint: 0x85 (5 IN)
     Sync EP Interface: 1
     Sync EP Altset: 1
     Implicit Feedback Mode: Yes

Capture:
   Status: Stop
   Interface 1
     Altset 1
     Format: S32_LE
     Channels: 12
     Endpoint: 0x85 (5 IN) (ASYNC)
     Rates: 44100
     Data packet interval: 125 us
     Bits: 0
     Sync Endpoint: 0x05 (5 OUT)
     Sync EP Interface: 0
     Sync EP Altset: 1
     Implicit Feedback Mode: Yes
```

## Hardware Configuration
- **Digital Input**: OFF (changed from AUTO - no effect)
- **Sample Rate**: 44.1kHz (hardware configured)
- **Output**: Connected to OUT 1/2 (analog)
- **Routing**: Factory reset performed - no effect

## Workarounds Attempted (All Failed)
1. **PipeWire profiles**: Tried pro-audio, multichannel-duplex
2. **Module parameters** (all individually and in combination):
    - `lowlatency=0` - Disable low-latency mode
    - `autoclock=0` - Force manual clock
    - `implicit_fb=0` - Disable implicit feedback
    - `device_setup=0,1` - Different device modes
    - `quirk_flags=0x8,0x20` - Various quirk flags
3. **Hardware configuration**:
    - DIGITAL = OFF (vs AUTO)
    - Factory reset via hardware buttons
4. **Different audio paths**:
    - Direct ALSA (hw:1,0)
    - PipeWire
    - All produce same static

## Test Command Used
```bash
speaker-test -D hw:1,0 -c 10 -t sine -f 440 -r 44100 -F S32_LE -l 3
```
**Result**: White noise/static instead of clean 440Hz tone

## Kernel Support Status
- Device added to implicit feedback skip list in kernel 5.11.9 (March 2021)
- Patch: `IMPLICIT_FB_SKIP_DEV(0x0582, 0x0120)`
- No additional patches found for kernels 6.x

## Related Devices
- Roland Quad-Capture (0582:0118) - Similar architecture, better Linux 
support
- Roland U-8 (older device) - Has third-party Linux tools (u8ctl)

## Known Issues from Community
- LinuxMusicians forum: "loud white noise sounds generated along with audio"
- Multiple users report same symptom since 2013
- No documented solution exists

## Hypothesis
The OCTA-CAPTURE uses Roland's proprietary USB protocol (vendor-specific 
class 0xFF).
The device likely requires:
1. Proprietary initialization sequence not performed by generic 
snd_usb_audio
2. SysEx MIDI configuration for internal DSP/routing/clock
3. Vendor-specific control messages for proper operation

Without Roland's cooperation or reverse engineering of Windows driver, 
proper support may be impossible.

## Request
1. Is there additional debugging we can enable to trace USB communication?
2. Could vendor-specific initialization be missing?
3. Would Roland device reverse engineering resources help?
4. Should this device be blacklisted if it cannot work properly?

## Additional Resources
- Device manual: 
https://static.roland.com/assets/media/pdf/OCTA-CAPTURE_v1.6_OM.pdf
- Kernel patch (2021): 
https://patchwork.kernel.org/project/alsa-devel/patch/CAOsVg8psuOkQRoccDs7AZzUO=4ffOm=XfXoY_G0iTqRXHtqu4A@mail.gmail.com/
- LinuxMusicians thread: https://linuxmusicians.com/viewtopic.php?t=17423

## Contact

Best Regards
Niklas Aldervall

[-- Attachment #2: octa-capture-debug-data.tar.gz --]
[-- Type: application/gzip, Size: 3918 bytes --]

^ permalink raw reply	[flat|nested] 2+ messages in thread

* Re: Roland OCTA-CAPTURE (0582:0120) - White Noise/Static on Playback
  2025-11-29 11:44 Roland OCTA-CAPTURE (0582:0120) - White Noise/Static on Playback Niklas Aldervall
@ 2025-11-29 18:07 ` Lucas
  0 siblings, 0 replies; 2+ messages in thread
From: Lucas @ 2025-11-29 18:07 UTC (permalink / raw)
  To: Niklas Aldervall; +Cc: alsa-devel

I don't know if this will help, as I don't have an OCTA-CAPTURE, but for my
STUDIO-CAPTURE, I like it set in 96 KHz (Internal) sampling frequency mode,
so I've made these changes to /etc/pipewire/pipewire-pulse.conf for it to
work perfectly for me (I don't know if it would be static otherwise,
though):

# PulseAudio config file for PipeWire version "1.0.0" #
#
# Copy and edit this file in /etc/pipewire for system-wide changes
# or in ~/.config/pipewire for local changes.
#
# It is also possible to place a file with an updated section in
# /etc/pipewire/pipewire-pulse.conf.d/ for system-wide changes or in
# ~/.config/pipewire/pipewire-pulse.conf.d/ for local changes.
#

context.properties = {
    ## Configure properties in the system.
    #mem.warn-mlock  = false
    #mem.allow-mlock = true
    #mem.mlock-all   = false
    #log.level       = 2

    #default.clock.quantum-limit = 8192
}

context.spa-libs = {
    audio.convert.* = audioconvert/libspa-audioconvert
    support.*       = support/libspa-support
}

context.modules = [
    { name = libpipewire-module-rt
        args = {
            nice.level   = -11
            #rt.prio      = 88
            rt.prio      = 65
            #rt.time.soft = -1
            #rt.time.hard = -1
            #uclamp.min = 0
            #uclamp.max = 1024
        }
        flags = [ ifexists nofail ]
    }
    { name = libpipewire-module-protocol-native }
    { name = libpipewire-module-client-node }
    { name = libpipewire-module-adapter }
    { name = libpipewire-module-metadata }

    { name = libpipewire-module-protocol-pulse
        args = {
   # contents of pulse.properties can also be placed here
   # to have config per server.
        }
    }
]

# Extra scripts can be started here. Setup in default.pa can be moved in
# a script or in pulse.cmd below
context.exec = [
    #{ path = "pactl"        args = "load-module module-always-sink" }
    #{ path = "pactl"        args = "upload-sample my-sample.wav my-sample"
}
    #{ path = "/usr/bin/sh"  args = "~/.config/pipewire/default.pw" }
]

# Extra commands can be executed here.
#   load-module : loads a module with args and flags
#      args = "<module-name> <module-args>"
#      ( flags = [ nofail ] )
pulse.cmd = [
    { cmd = "load-module" args = "module-always-sink" flags = [ ] }
    #{ cmd = "load-module" args = "module-switch-on-connect" }
    #{ cmd = "load-module" args = "module-gsettings" flags = [ nofail ] }
]

stream.properties = {
    # I changed this from /48000
    node.latency          = 1024/96000
    #node.autoconnect      = true
    #resample.quality      = 4
    #channelmix.normalize  = false
    #channelmix.mix-lfe    = true
    #channelmix.upmix      = true
    #channelmix.upmix-method = psd  # none, simple
    #channelmix.lfe-cutoff = 150
    #channelmix.fc-cutoff  = 12000
    #channelmix.rear-delay = 12.0
    #channelmix.stereo-widen = 0.0
    #channelmix.hilbert-taps = 0
    #dither.noise = 0
}

pulse.properties = {
    # the addresses this server listens on
    server.address = [
        "unix:native"
        #"unix:/tmp/something"              # absolute paths may be used
        #"tcp:4713"                         # IPv4 and IPv6 on all addresses
        #"tcp:[::]:9999"                    # IPv6 on all addresses
        #"tcp:127.0.0.1:8888"               # IPv4 on a single address
        #
        #{ address = "tcp:4713"             # address
        #  max-clients = 64                 # maximum number of clients
        #  listen-backlog = 32              # backlog in the server listen
queue
        #  client.access = "restricted"     # permissions for clients
        #}
    ]
    #server.dbus-name       = "org.pulseaudio.Server"
    # I changed all of these from /48000
    pulse.min.req          = 128/96000     # 1.35ms
    pulse.min.req          = 128/96000     # 1.35ms
    pulse.default.req      = 960/96000     # 10 milliseconds
    pulse.min.frag         = 128/96000     # 1.35ms
    pulse.default.frag     = 96000/96000   # 1 seconds
    pulse.default.tlength  = 96000/96000   # 1 seconds
    #pulse.min.quantum      = 128/48000     # 2.7ms
    #pulse.default.req      = 960/48000     # 20 milliseconds
    #pulse.min.frag         = 128/48000     # 2.7ms
    #pulse.default.frag     = 96000/48000   # 2 seconds
    #pulse.default.tlength  = 96000/48000   # 2 seconds
    #pulse.min.quantum      = 128/48000     # 2.7ms
    #pulse.idle.timeout     = 0             # don't pause after underruns
    #pulse.default.format   = F32
    #pulse.default.position = [ FL FR ]
    # These overrides are only applied when running in a vm.
    vm.overrides = {
# I changed this (which was uncommented originally) from /48000
        pulse.min.quantum = 1024/96000      # 11ms
        #pulse.min.quantum = 1024/48000      # 22ms
    }
}

# client/stream specific properties
pulse.rules = [
    {
        matches = [
            {
                # all keys must match the value. ! negates. ~ starts regex.
                #client.name                = "Firefox"
                #application.process.binary = "teams"
                #application.name           = "~speech-dispatcher.*"
            }
        ]
        actions = {
            update-props = {
# I changed this from /48000
                node.latency = 512/96000
                #node.latency = 512/48000
            }
            # Possible quirks:"
            #    force-s16-info                 forces sink and source info
as S16 format
            #    remove-capture-dont-move       removes the capture
DONT_MOVE flag
            #    block-source-volume            blocks updates to source
volume
            #    block-sink-volume              blocks updates to sink
volume
            #quirks = [ ]
        }
    }
    {
        # skype does not want to use devices that don't have an S16 sample
format.
        matches = [
             { application.process.binary = "teams" }
             { application.process.binary = "teams-insiders" }
             { application.process.binary = "skypeforlinux" }
        ]
        actions = { quirks = [ force-s16-info ] }
    }
    {
        # firefox marks the capture streams as don't move and then they
        # can't be moved with pavucontrol or other tools.
        matches = [ { application.process.binary = "firefox" } ]
        actions = { quirks = [ remove-capture-dont-move ] }
    }
    {
        # speech dispatcher asks for too small latency and then underruns.
        matches = [ { application.name = "~speech-dispatcher.*" } ]
        actions = {
            update-props = {
# I changed these (now commented lines from /48000 to these)
                pulse.min.req          = 512/96000      # 5.3ms
                pulse.min.req          = 512/96000      # 5.3ms
                #pulse.min.quantum      = 512/48000      # 10.6ms
                #pulse.min.quantum      = 512/48000      # 10.6ms
                pulse.idle.timeout     = 5              # pause after 5
seconds of underrun
            }
        }
    }
    #{
    #    matches = [ { application.process.binary = "Discord" } ]
    #    actions = { quirks = [ block-source-volume ] }
    #}
]

Although I'm not the best person to help with your troubleshooting this
occurred to me.

Thanks,

  Lucas

On Sat, Nov 29, 2025 at 5:47 AM Niklas Aldervall <niklas@aldervall.se>
wrote:

> # ALSA Bug Report: Roland OCTA-CAPTURE (0582:0120) - White Noise/Static
> on Playback
>
> ## Summary
> Roland OCTA-CAPTURE USB audio interface produces white noise/static
> instead of clean audio on Linux, despite being detected and initialized
> by snd_usb_audio driver.
>
> ## Device Information
> - **Model**: Roland OCTA-CAPTURE (UA-1010)
> - **USB ID**: 0582:0120
> - **Manufacturer**: Roland Corporation
> - **Device Class**: Vendor Specific (0xFF) - NOT USB Audio Class compliant
> - **Serial**: ISRL4B236F81
>
> ## System Information
> - **Kernel**: 6.17.9-2-cachyos
> - **Distribution**: Arch Linux (CachyOS)
> - **Audio Server**: PipeWire 1.2.7
> - **ALSA Driver**: snd_usb_audio (built as module)
>
> ## Symptoms
> 1. Device is correctly detected and recognized by ALSA
> 2. ALSA shows proper capabilities: S32_LE, 10ch playback, 12ch capture,
> 44100Hz
> 3. Audio streams can be sent to device without errors
> 4. **OUTPUT**: Only white noise/static is produced instead of clean audio
> 5. Issue occurs with both direct ALSA (speaker-test) and PipeWire
> 6. Issue persists across all available profiles (multichannel, pro-audio)
>
> ## Device Detection (lsusb)
> ```
> Bus 001 Device 008: ID 0582:0120 Roland Corp. OCTA-CAPTURE
>    bDeviceClass          255 Vendor Specific Class
>    bDeviceSubClass         0
>    bDeviceProtocol       255
>    idVendor           0x0582 Roland Corp.
>    idProduct          0x0120 OCTA-CAPTURE
> ```
>
> ## ALSA Stream Configuration
> ```
> Roland OCTA-CAPTURE at usb-0000:00:14.0-3, high speed : USB Audio
>
> Playback:
>    Status: Stop
>    Interface 0
>      Altset 1
>      Format: S32_LE
>      Channels: 10
>      Endpoint: 0x05 (5 OUT) (ASYNC)
>      Rates: 44100
>      Data packet interval: 125 us
>      Bits: 0
>      Sync Endpoint: 0x85 (5 IN)
>      Sync EP Interface: 1
>      Sync EP Altset: 1
>      Implicit Feedback Mode: Yes
>
> Capture:
>    Status: Stop
>    Interface 1
>      Altset 1
>      Format: S32_LE
>      Channels: 12
>      Endpoint: 0x85 (5 IN) (ASYNC)
>      Rates: 44100
>      Data packet interval: 125 us
>      Bits: 0
>      Sync Endpoint: 0x05 (5 OUT)
>      Sync EP Interface: 0
>      Sync EP Altset: 1
>      Implicit Feedback Mode: Yes
> ```
>
> ## Hardware Configuration
> - **Digital Input**: OFF (changed from AUTO - no effect)
> - **Sample Rate**: 44.1kHz (hardware configured)
> - **Output**: Connected to OUT 1/2 (analog)
> - **Routing**: Factory reset performed - no effect
>
> ## Workarounds Attempted (All Failed)
> 1. **PipeWire profiles**: Tried pro-audio, multichannel-duplex
> 2. **Module parameters** (all individually and in combination):
>     - `lowlatency=0` - Disable low-latency mode
>     - `autoclock=0` - Force manual clock
>     - `implicit_fb=0` - Disable implicit feedback
>     - `device_setup=0,1` - Different device modes
>     - `quirk_flags=0x8,0x20` - Various quirk flags
> 3. **Hardware configuration**:
>     - DIGITAL = OFF (vs AUTO)
>     - Factory reset via hardware buttons
> 4. **Different audio paths**:
>     - Direct ALSA (hw:1,0)
>     - PipeWire
>     - All produce same static
>
> ## Test Command Used
> ```bash
> speaker-test -D hw:1,0 -c 10 -t sine -f 440 -r 44100 -F S32_LE -l 3
> ```
> **Result**: White noise/static instead of clean 440Hz tone
>
> ## Kernel Support Status
> - Device added to implicit feedback skip list in kernel 5.11.9 (March 2021)
> - Patch: `IMPLICIT_FB_SKIP_DEV(0x0582, 0x0120)`
> - No additional patches found for kernels 6.x
>
> ## Related Devices
> - Roland Quad-Capture (0582:0118) - Similar architecture, better Linux
> support
> - Roland U-8 (older device) - Has third-party Linux tools (u8ctl)
>
> ## Known Issues from Community
> - LinuxMusicians forum: "loud white noise sounds generated along with
> audio"
> - Multiple users report same symptom since 2013
> - No documented solution exists
>
> ## Hypothesis
> The OCTA-CAPTURE uses Roland's proprietary USB protocol (vendor-specific
> class 0xFF).
> The device likely requires:
> 1. Proprietary initialization sequence not performed by generic
> snd_usb_audio
> 2. SysEx MIDI configuration for internal DSP/routing/clock
> 3. Vendor-specific control messages for proper operation
>
> Without Roland's cooperation or reverse engineering of Windows driver,
> proper support may be impossible.
>
> ## Request
> 1. Is there additional debugging we can enable to trace USB communication?
> 2. Could vendor-specific initialization be missing?
> 3. Would Roland device reverse engineering resources help?
> 4. Should this device be blacklisted if it cannot work properly?
>
> ## Additional Resources
> - Device manual:
> https://static.roland.com/assets/media/pdf/OCTA-CAPTURE_v1.6_OM.pdf
> - Kernel patch (2021):
>
> https://patchwork.kernel.org/project/alsa-devel/patch/CAOsVg8psuOkQRoccDs7AZzUO=4ffOm=XfXoY_G0iTqRXHtqu4A@mail.gmail.com/
> - LinuxMusicians thread: https://linuxmusicians.com/viewtopic.php?t=17423
>
> ## Contact
>
> Best Regards
> Niklas Aldervall



-- 
Protect your digital freedom and privacy, eliminate DRM, learn more at
http://www.defectivebydesign.org/what_is_drm
On a related note, also see https://www.fsf.org/campaigns/surveillance

^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2025-11-29 18:08 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-11-29 11:44 Roland OCTA-CAPTURE (0582:0120) - White Noise/Static on Playback Niklas Aldervall
2025-11-29 18:07 ` Lucas

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).