I have a USB sound device (Startech ICUSBAUDIO7D, which comes up as `ID 0d8c:0102 C-Media Electronics, Inc. CM106 Like Sound Device` through lsusb) which I'm trying to program the output of for 8 channels. The python code (outputs a 50Hz sine wave) I'm using is below (each channel gets a different amplitude so I can identify them with an oscilloscope). The sound card has 4 stereo jacks, to which I have a scope connected. The problem is that on different runs of the program, the output mappings are not consistent - each run of the program might have the order of the channels different to the previous. So running it one time might have amplitudes (0, 0.125) on the first jack, but the next run it might have those (0.75, 0.25) on the first jack (it doesn't appear to be 'paired' per jack) I initially discovered this when using portaudio, and decided to try using alsa-only and the issue persists. Is this likely to be a problem with the driver, alsa-lib, or is there something else going on here? ``` import numpy as np import alsaaudio def sine_wave(amplitude=1, freq=50, sample_rate=48000): wave_len = sample_rate/freq samples = (amplitude * 32767 * np.sin(2 * np.pi * np.arange(wave_len) * freq / sample_rate)).astype(np.int16) return samples def eightchan(freq=50, sample_rate=48000): wave_len = sample_rate//freq frames = np.zeros((wave_len, 8), dtype=np.int16) samples = sine_wave() for c in range(8): frames[:wave_len,c] = samples[:wave_len]*(c/8) return frames.tobytes() if __name__ == '__main__': pcm = alsaaudio.PCM(device='surround71:CARD=ICUSBAUDIO7D,DEV=0', format=alsaaudio.PCM_FORMAT_S16_LE, channels=8, rate=48000, type=alsaaudio.PCM_PLAYBACK, periodsize=960, periods=1) frames = eightchan() while True: pcm.write(frames) ``` alsa-info output is attached [alsa-info.txt](https://github.com/user-attachments/files/16277691/alsa-info.txt)