MIDI implementation on CQ series needs to be completed

Attempted to automate my CQ20 & EchoVerb to dynamically set the delay remotely via MIDI. Unfortunately I ran into all sorts of issues and MIDI limitations with the CQ series that was unexpected.

  1. The delay can only be set via Tap Tempo. And only if assigned to a soft-key.
  2. To get back to a fixed delay I needed to reload a FX or Scene.
  3. Unable to load saved FX via MIDI; only the entire Scene available.
  4. When loading a Scene, unable to mask Main output or anything. So I have to reset rig volume and gain settings for show.
  5. Unable to turn Mute groups ON/Off via MIDI. Forces use of limited softkeys.

Didn’t expect to run into all these issues & limitations, as a half baked MIDI implementation was not on my Bingo card.

Actually it can be set directly but not via midi, via TCP frame.

I will need to investigate this as a possible solution to one of my issues. TY. I have my PI already connected via WIFI & MIDI both isolated to my CQ20. If there is anything that can help when I prompt AI please share. :smile:

Not sure but ask something about converting incoming midi (from the app that send the tempo) into TCP frame that will be send to the CQ.
i am not at home now but will provide the TCP frame for the delay tempo asap.

Got it, thanks for any help with prompts. I have a basic softkeys python script working via TCP, but setting the tap tempo is being elusive. Need to find the specific NRPN LSB parameter address byte assigned to EchoVerb’s (FX slot 2) delay

Found you post here, and my test code is working.

Yep, I forgot I posted that, great job :innocent:

FX1 ECHOVERB Delay Time 5ms = f7 5b 20 0c 00 09 05 00, 2500ms = f7 5b 20 0c 00 09 c4 09

Note the little endian format, 2500ms is encoded c409 and not 09c4.

Should you need a convertor ms to hex here it is (open in note pad and save as an html):slight_smile:

<html lang="fr">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Convertisseur ms -> Hex (Little-Endian)</title>
    <style>
        body {
            font-family: Arial, sans-serif;
            background-color: #1a1a1a;
            color: #ffffff;
            display: flex;
            justify-content: center;
            align-items: center;
            min-height: 100vh;
            margin: 0;
        }
        .container {
            background-color: #2a2a2a;
            padding: 30px;
            border-radius: 8px;
            box-shadow: 0 4px 15px rgba(0,0,0,0.5);
            width: 350px;
        }
        h2 {
            margin-top: 0;
            color: #00d1b2;
            text-align: center;
        }
        .input-group {
            margin-bottom: 20px;
        }
        label {
            display: block;
            margin-bottom: 8px;
            font-weight: bold;
        }
        input[type="number"] {
            width: 100%;
            padding: 10px;
            border-radius: 4px;
            border: 1px solid #4a4a4a;
            background-color: #333;
            color: #fff;
            font-size: 16px;
            box-sizing: border-box;
        }
        .result-box {
            background-color: #1e1e1e;
            padding: 15px;
            border-radius: 6px;
            border-left: 4px solid #00d1b2;
            margin-top: 15px;
        }
        .result-item {
            margin-bottom: 10px;
        }
        .result-item:last-child {
            margin-bottom: 0;
        }
        .label-res {
            font-size: 12px;
            color: #aaa;
            text-transform: uppercase;
        }
        .val-res {
            font-family: 'Courier New', Courier, monospace;
            font-size: 18px;
            font-weight: bold;
            color: #00ff88;
        }
    </style>
</head>
<body>

<div class="container">
    <h2>Convertor SysEx</h2>

<div class="input-group">
    <label for="msInput">Time in millisecondes (ms) :</label>
    <input type="number" id="msInput" placeholder="Ex: 2500" min="0" max="65535" value="2500" oninput="convertir()">
</div>

<div class="result-box">
    <div class="result-item">
        <div class="label-res">Hexadécimal (16 bits)</div>
        <div class="val-res" id="hexStandard">0x09C4</div>
    </div>
    <hr style="border-color: #333; margin: 10px 0;">
    <div class="result-item">
        <div class="label-res">Big-Endian (MSB LSB)</div>
        <div class="val-res" id="bigEndian">09 C4</div>
    </div>
    <div class="result-item" style="margin-top: 10px;">
        <div class="label-res" style="color: #00d1b2;">Little-Endian (LSB MSB)</div>
        <div class="val-res" id="littleEndian" style="color: #00d1b2;">C4 09</div>
    </div>
</div>

</div>

<script>
    function convertir() {
        const valInput = document.getElementById('msInput').value;
        let ms = parseInt(valInput, 10);
        // Gestion des erreurs / limites
        if (isNaN(ms) || ms < 0) {
            document.getElementById('hexStandard').innerText = '0x0000';
            document.getElementById('bigEndian').innerText = '00 00';
            document.getElementById('littleEndian').innerText = '00 00';
            return;
        }
        // Limite max sur 16 bits (65535 ms)
        if (ms > 65535) {
            ms = 65535;
        }
        // Conversion en hexadécimal sur 4 caractères (16 bits)
        let hex = ms.toString(16).toUpperCase().padStart(4, '0');
        // Séparation des octets MSB (poids fort) et LSB (poids faible)
        let msb = hex.substring(0, 2);
        let lsb = hex.substring(2, 4);
        // Mise Ă  jour de l'affichage
        document.getElementById('hexStandard').innerText = '0x' + hex;
        document.getElementById('bigEndian').innerText = msb + ' ' + lsb;
        document.getElementById('littleEndian').innerText = lsb + ' ' + msb;
    }
    // Calcul initial au chargement de la page
    convertir();
</script>

</body>
</html>


100% completed and implemented. Now why didn’t A&H enable this in MIDI or and API?

In order for people like you and I to have fun :rofl:

3 Likes