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
- Device is correctly detected and recognized by ALSA
- 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)
- **PipeWire profiles**: Tried pro-audio, multichannel-duplex
- **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
- **Hardware configuration**:
- DIGITAL = OFF (vs AUTO)
- Factory reset via hardware buttons
- **Different audio paths**:
- Direct ALSA (hw:1,0)
- PipeWire
- All produce same static
## Test Command Used
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:
- 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
- Is there additional debugging we can enable to trace USB communication?
- Could vendor-specific initialization be missing?
- Would Roland device reverse engineering resources help?
- 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/CAOsVg8psuOkQRoccDs7AZ...
- LinuxMusicians thread: https://linuxmusicians.com/viewtopic.php?t=17423
## Contact
Best Regards Niklas Aldervall