NorskTransform.audioMixMatrix() method
Given an audio stream of N channels, mix it down to M channels through a matrix of NxM gains.
Signature:
audioMixMatrix(settings: AudioMixMatrixSettings): Promise<AudioMixMatrixNode>;Parameters
| Parameter | Type | Description | 
|---|---|---|
| settings | Settings for the mixer, including the gain matrix | 
Returns:
Promise<AudioMixMatrixNode>
Example [tutorials/11_matrix_mixer.ts]
Downmix a 5.1 layout received over RTP to stereo and vary the mix over time
// Matrix mixer, downmix a 5.1 layout to stereo
export async function main() {
  const norsk = await Norsk.connect();
  const input = await norsk.input.rtp(rtpInputSettings);
  const matrixMixer = await norsk.processor.transform.audioMixMatrix(
    initialMixerSettings
  );
  const audioOutput = await norsk.output.cmafAudio(hlsAudioSettings);
  matrixMixer.subscribe([{ source: input, sourceSelector: selectAudio }]);
  audioOutput.subscribe([{ source: matrixMixer, sourceSelector: selectAudio }]);
  void audioOutput.url().then((playlistUrl) => {
    console.log(`playlistUrl: ${playlistUrl}`);
  });
  // Update gains every 3s
  let wasPreviousA = true;
  setInterval(function() {
    let newMixerConfig: AudioMixMatrixSettingsUpdate;
    if (wasPreviousA) {
      newMixerConfig = { channelGains: mixB };
      wasPreviousA = false;
    } else {
      newMixerConfig = { channelGains: mixA };
      wasPreviousA = true;
    }
    console.log("Apply mixer config:", newMixerConfig);
    matrixMixer.updateConfig(newMixerConfig);
  }, 3000);
}
const mixA: Gain[][] = [
  [0.0, null, -6.0, null, -9.0, null],
  [null, 0.0, null, -6.0, null, -9.0],
];
const mixB: Gain[][] = [
  [null, 0.0, null, -6.0, null, -9.0],
  [0.0, null, -6.0, null, -9.0, null],
];
const initialMixerSettings: AudioMixMatrixSettings = {
  id: "mixer",
  outputChannelLayout: "stereo",
  channelGains: mixA,
};
const hlsAudioSettings: CmafOutputSettings = {
  id: "hls-audio",
  partDurationSeconds: 1.0,
  segmentDurationSeconds: 4.0,
  destinations: [{ type: "local", retentionPeriodSeconds: 60, id: "local" }],
};
const rtpInputSettings: RtpInputSettings = {
  id: "rtp",
  onError: (err) => console.log("RTP INGEST ERR", err),
  sourceName: "rtp1",
  streams: [
    {
      ip: "0.0.0.0",
      rtpPort: 5001,
      rtcpPort: 5002,
      interface: "any",
      streamId: 1,
      streamType: {
        kind: "linearpcm",
        bitDepth: 24,
        sampleRate: 48000,
        channelLayout: "5.1",
      },
    },
  ],
};Run the following command to generate example input at url rtp://127.0.0.1:5001:
ffmpeg -v error -re -f lavfi -i "testsrc[out0];sine=frequency=220:sample_rate=48000[out1]" -re -f lavfi -i "testsrc[out0];sine=frequency=275:sample_rate=48000[out1]" -re -f lavfi -i "testsrc[out0];sine=frequency=660:sample_rate=48000[out1]" -re -f lavfi -i "testsrc[out0];sine=frequency=440:sample_rate=48000[out1]" -re -f lavfi -i "testsrc[out0];sine=frequency=550:sample_rate=48000[out1]" -re -f lavfi -i "testsrc[out0];sine=frequency=1320:sample_rate=48000[out1]"  -filter_complex "[0:a][1:a][2:a][3:a][4:a][5:a]join=inputs=6:channel_layout=5.1:map=0.0-FL|1.0-FR|2.0-FC|3.0-LFE|4.0-BL|5.0-BR[a]" -map "[a]" -c:a pcm_s24be -f rtp 'rtp://127.0.0.1:5001'Find Examples
Search for examples using audioMixMatrix in our examples repo.