* 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).