Skip to content

Instantly share code, notes, and snippets.

@d630
Last active April 4, 2026 11:53
Show Gist options
  • Select an option

  • Save d630/d332d3fd454b811a47429a16bdd4b050 to your computer and use it in GitHub Desktop.

Select an option

Save d630/d332d3fd454b811a47429a16bdd4b050 to your computer and use it in GitHub Desktop.
Topping M62 "Pro Audio Mode"
Topping M62 at usb-0000:2d:00.3-1.1.2.3, high speed : USB Audio
Playback:
Status: Running
Interface = 1
Altset = 1
Packet Size = 520
Momentary freq = 96000 Hz (0xc.0000)
Feedback Format = 16.16
Interface 1
Altset 1
Format: S32_LE
Channels: 10
Endpoint: 0x01 (1 OUT) (ASYNC)
Rates: 44100, 48000, 88200, 96000
Data packet interval: 125 us
Bits: 24
Channel map: FL FR FC LFE RL RR FLC FRC RC SL
Sync Endpoint: 0x81 (1 IN)
Sync EP Interface: 1
Sync EP Altset: 1
Implicit Feedback Mode: No
Interface 1
Altset 2
Format: S32_LE
Channels: 10
Endpoint: 0x01 (1 OUT) (ASYNC)
Rates: 44100, 48000, 88200, 96000
Data packet interval: 125 us
Bits: 24
Channel map: FL FR FC LFE RL RR FLC FRC RC SL
Sync Endpoint: 0x81 (1 IN)
Sync EP Interface: 1
Sync EP Altset: 2
Implicit Feedback Mode: No
Capture:
Status: Running
Interface = 2
Altset = 1
Packet Size = 832
Momentary freq = 96000 Hz (0xc.0000)
Interface 2
Altset 1
Format: S32_LE
Channels: 16
Endpoint: 0x82 (2 IN) (ASYNC)
Rates: 44100, 48000, 88200, 96000
Data packet interval: 125 us
Bits: 24
Capture channel map:
AUX0/1 -> Analog 1/2 (IN 1 [MIC 1; MIC 3.5; MIC-HP]; IN2 [MIC2]; dry)
AUX2/3 -> AUX IN
AUX4/5 -> Bluetooh IN
AUX6/7 -> Mobile (OTG IN)
AUX8/9 -> Loopback 1/2
AUX10/11 -> Loopback 3/4
AUX12/13 -> Loopback 5/6
AUX14/15 -> Loopback 7/8
USB driver by Thesycon Systemsoftware & Consulting GmbH
Disables builtin "FX" functionality (NC, Ducking,
Comporessor, Reverb [Studio, Live, Hall]).
The "scene" feature is just a combination of these
and is therefore also disabled.
Topping's "M Control Center" software should be used at
least once for initial configuration (usb charging settings;
auto-power-on/-off; bluetooth; setting up mixers and
loopbacks etc). It's also very useful to update the device
easily. Needed if PEQ for mic input (4 bands) and/or headphone
output (10 bands) is wanted.
Otherwise, the remote control is more than sufficient. It
has 31 buttons, which is very unusual for Topping.
M62 is intended more or less for mobile use by musicians, streamers, podcasters, but
I currently only use it in a minimal home office setup for Zoom meetings:
- Headphones with external microphone on the HP input (TRRS), which acts as IN1
- USB-C for data transmission and USB-C for charging connected to a USB hub
that is connected to a KVM switch, which in turn is connected to a laptop and
a desktop computer.
- In M Control Center, all inputs are muted, except IN1 and IN2 (the latter
is only switched on because otherwise an LED on the M62 would flash
unnecessarily)
- All mixers removed
- All loopbacks output an empty mixer and are also muted
- Bluetooth off
- No charging or discharging for the OTG USB-C port and the normal USB-C port,
so only the third USB-C port is used for this
- The OTG output is still set to IN1, otherwise no level meters are displayed
for the input on the M62 display.
- HP output configured with 10-band PEQ (oratory1990) because the laptop and desktop are
running different versions of Pipewire and I have configured filter chains
only on the desktop. Nevertheless, I have a wireplumber config on all systems to use the 96000
rate with M62.
- Zoom thus receives the dry input signal; I leave the DSP to Zoom
- I actually use the remote control to turn M62 on and off, adjust the volume
on the headphones and mute the microphone.
What I actually like the most is that M62 doesn't take up much desk space and
installation is super easy to remove. So far I only use a USB isolator for the normal
USB-C port. I have been thinking about an external LPS for the power usb-c
port. However, that might be a bad idea since M62 is running all day long ...
Create two virtual devices to reduce channel usage:
{
name = libpipewire-module-loopback
flags = [ nofail ]
args = {
node.name = "sink.topping_m62_stereo"
node.description = "Topping M62 Stereo Output"
media.name = "Topping M62 Stereo Output"
audio.position = [ FL FR ]
capture.props = {
media.class = Audio/Sink
}
playback.props = {
stream.dont-remix = true
node.passive = true
target.object = "alsa_output.usb-Topping_M62-00.multichannel-output"
}
}
}
{
name = libpipewire-module-loopback
flags = [ nofail ]
args = {
node.name = "source.topping_m62_mono"
node.description = "Topping M62 Mic (Mono)"
media.name = "Topping M62 Mic (Mono)"
capture.props = {
audio.position = [ AUX0 ]
stream.dont-remix = true
node.passive = true
target.object = "alsa_input.usb-Topping_M62-00.multichannel-input"
}
playback.props = {
media.class = Audio/Source
audio.position = [ MONO ]
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment