Skip to content

Releases: Chronosauros/contour

Contour 1.3.3

Choose a tag to compare

@Chronosauros Chronosauros released this 04 Oct 20:43

Contour 1.3.3 makes the FiiO KA15 play exactly the curve and preamp you see.

  • Shelf filters. The KA15 plays LOW SHELF and HIGH SHELF with a Q 1.41 times (√2) lower than the value it stores. A shelf sent with Q 0.71 sounded like Q 0.50 - a wider, softer slope than the graph showed. Peak filters were already right. Contour now stores shelf Q x 1.41 and divides by 1.41 when it reads the KA15, so you hear the shelf on the graph - the one squig.link and AutoEQ profiles describe.
  • Preamp. Every USER preset on the KA15 plays 12 dB quieter than EQ off, on top of its own preamp: a profile with preamp -4 dB played 16 dB below EQ off. Contour now adds those 12 dB back when it writes the preamp, so PREAMP in Contour is the real level against EQ off. On the KA15 it goes from -24 to 0 dB. Leave it on AUTO, so the curve never goes above 0 dB.
  • Send your KA15 profiles again after updating. Profiles sent with 1.3.2 read back with the shelf Q and preamp the KA15 actually played, so they lose ON DAC until you send them again.
  • The FiiO app shows other numbers. The FiiO app and FiiO's EQ web page show the stored values, so there a shelf reads 1.41 times higher in Q and the preamp 12 dB higher than in Contour. That is expected.
  • Shelf Q up to 7.07 on the KA15, because the stored value stops at 10. Contour blocks sending a sharper shelf and says why.

Measured on a KA15: a sweep through the dongle into a PC line-in, each result compared with EQ off - four shelves at different frequencies, gains and Q values, and six preamp settings. After the change, a profile sent from a phone matched Contour's graph within 0.03 dB and its preamp within 0.01 dB. Details in PROTOCOL.md.

The shelf problem was measured and discussed on Audio Science Review. Thanks to u/bootymeister on Reddit for pointing it out.

Updating from 1.3.2 keeps your profiles.

SHA-256 of contour-1.3.3.apk: 1d918da9e79518e70f161335dcb319fcae8cd9f691326d3438743d111c6c1cea
Signed by CN=Chronosaur, certificate SHA-256 c8c8caea761628ed9d505ff07342ee5ea0d466a4ad718d0db077422ba3f7e601.

Contour advBeta 1.3.3-advbeta1

Pre-release

Choose a tag to compare

@Chronosauros Chronosauros released this 04 Oct 20:43

Contour advBeta is the experimental build for many more USB DACs and dongles. It installs alongside stable Contour as a separate app with its own library. This release updates an existing advBeta installation (versionCode 24, previous 23).

FiiO KA15: shelf filters and preamp play what the graph shows

The same change as in stable Contour 1.3.3:

  • Shelf filters. The KA15 plays LOW SHELF and HIGH SHELF with a Q 1.41 times (√2) lower than the value it stores, so a shelf sent with Q 0.71 sounded like Q 0.50. Contour now stores shelf Q x 1.41 and divides by 1.41 when it reads the KA15. Peak filters were already right.
  • Preamp. Every USER preset on the KA15 plays 12 dB quieter than EQ off, on top of its own preamp. Contour now adds those 12 dB back, so PREAMP is the real level against EQ off; on the KA15 it goes from -24 to 0 dB. Leave it on AUTO, so the curve never goes above 0 dB.
  • Send your KA15 profiles again after updating. Profiles sent with 1.3.2-advbeta1 read back with what the KA15 actually played and lose ON DAC until you send them again.
  • The FiiO app shows other numbers: shelf Q 1.41 times higher and preamp 12 dB higher than Contour, because it shows the stored values.
  • Shelf Q up to 7.07 on the KA15. Contour blocks a sharper shelf and says why.

Measured on a KA15 with a sweep into a PC line-in, against EQ off; details in PROTOCOL.md. The shelf problem was measured and discussed on Audio Science Review. Thanks to u/bootymeister on Reddit for pointing it out.

Only the KA15 changed. Other FiiO devices in advBeta still get the raw values. They may have the same shelf behaviour, but Contour changes a device only after it has been measured. A measurement or a listening report from another FiiO device is very welcome.

Which devices

The full list is on the website: https://contoureq.app/devices/ (DEVICES.md on this branch is the list as of the release and does not include the community reports).

  • Confirmed on hardware (10): CrinEar Protocol Micro 3302:C20F, Protocol Max 3302:43CC and FiiO KA15 2972:0104 (also in stable 1.3.3), plus 7 devices reported working in advBeta by a community tester.
  • Reported not working (7): listed on the devices page.
  • Implemented, needs a tester (395 rules): WalkPlay-based dongles (catalog by VID:PID plus name rules), other FiiO models and KT Micro. None of these has been seen on real hardware yet.
  • Read-only diagnostics (18): reads the current EQ, never writes.
  • Recognised but blocked (52): detected, then refused with a reason.

Report your device

Worked, half worked or did not work at all - every report helps: https://github.com/Chronosauros/contour/issues/new?template=device-report.yml. Each line on the device list has a "Report result" link that fills in the device for you.

Safety

Every write needs a HID descriptor check, a complete read of the device first and a hold-to-send gesture. No EQ writes on connect. Before writing to an untested device, read its current EQ and keep it as a profile so you can go back. Writing to a device outside the confirmed level is at your own risk; start testing at a low listening volume.

Verification

Core protocol tests pass. APK signed with the existing Chronosaur release key. Stable release 1.3.3 stays the latest release.

SHA-256 of contour-advbeta-1.3.3-advbeta1.apk:
dc620a7367b4c7a9c08312e5118b4c0a1f3316f97bdd83acc7017170b89101b7

Contour 1.3.2

Choose a tag to compare

@Chronosauros Chronosauros released this 04 Oct 00:27

Superseded by Contour 1.3.3, which makes the FiiO KA15 play the shelf filters and preamp you see. Updating keeps your profiles.

Contour 1.3.2 adds the FiiO KA15.

  • FiiO KA15 (USB 2972:0104), tested on the developer's own hardware: 10 bands, PEAK, LOW SHELF and HIGH SHELF, gain -12 to +12 dB. Contour reads the KA15 when you connect, and shows its three user slots above HOLD TO SEND with the name each one holds. Pick USER1, USER2 or USER3, hold HOLD TO SEND, and Contour writes the profile to that slot, checks it by reading it back and names the slot after the profile (up to 7 letters and digits). Long-press a slot to rename it without changing its EQ. The stock presets (Jazz, Pop and so on) are never written.
  • A silent stream while it talks to the KA15. The KA15 answers only while audio is streaming to it, so during a read or a write Contour plays silence to it. It does not take audio focus: music in other apps keeps playing.
  • If the KA15 stops answering. In testing, one save out of ten got no answer until the dongle was unplugged and plugged back in, and it did not happen again. If it does, unplug the KA15, plug it back in and send again.
  • Only tested devices. Contour now recognises exactly three dongles: CrinEar Protocol Micro, Protocol Max and FiiO KA15. Other FiiO models are not enabled until someone confirms one on real hardware - see the devices page.

Updating from 1.3.1 keeps your profiles.

SHA-256 of contour-1.3.2.apk: 66ca11d80916af43bc169ac144006e768d909813af8fc2d54d2cf7109170a858
Signed by CN=Chronosaur, certificate SHA-256 c8c8caea761628ed9d505ff07342ee5ea0d466a4ad718d0db077422ba3f7e601.

Contour advBeta 1.3.2-advbeta1

Pre-release

Choose a tag to compare

@Chronosauros Chronosauros released this 04 Oct 00:27

Superseded by 1.3.3-advbeta1.

Contour advBeta is the experimental build for many more USB DACs and dongles. It installs alongside stable Contour as a separate app with its own library. This release updates an existing advBeta installation (versionCode 23, previous 22).

FiiO KA15 confirmed on hardware

The FiiO KA15 (2972:0104) was tested on this beta line on 03-04.10.2026 and moves to Confirmed on hardware. The same code is in stable Contour 1.3.2.

  • Pick USER1, USER2 or USER3 above HOLD TO SEND; the row shows the name each slot holds. Contour writes the profile to that slot, reads it back and names the slot after the profile (up to 7 letters and digits).
  • Long-press a slot to rename it without changing its EQ.
  • During a read or a write Contour plays silence to the KA15, because it answers only while audio is streaming. No audio focus: other playback keeps going.
  • One save out of ten got no answer until a replug, and it did not happen again. If it does, unplug the KA15, plug it back in and send again.
  • The EQ page now fits on a Pixel with the slot row shown.

No other device changed level in this build.

Tested by the community

u/Master_Cartoonist_16 on Reddit tried advBeta 1.3.1-advbeta1 with their own dongles. Thank you!

  • Worked without problems (7): FiiO QX13, FiiO K13 R2R (desktop), SnowSky Melody, SnowSky Tiny A, TRN Black Pearl, Moondrop Dawn Pro 2, NiceHCK Octave. They are now listed under Confirmed on hardware as "Reported working in advBeta". They stay advBeta only for now.
  • Did not work (7): Onix Beta XI2, Onix Alpha XI1, Shanling UA4, Shanling UA7 and Hidizs S9 Pro Martha are not in the list, so Contour does not recognise them. Moondrop Moonriver 3 and Fosi DS3 are read-only in advBeta: Contour reads their EQ and never writes.

This build changed the shared FiiO code for the KA15, so a report from 1.3.2-advbeta1 on the QX13, K13 R2R, Melody or Tiny A is welcome. For the devices that did not work, a report with the VID:PID, the USB name and the log lets us look at them.

Which devices

The full list is on the website: https://chronosauros.github.io/contour/devices/ (DEVICES.md on this branch is the list as of the release and does not include the community reports).

  • Confirmed on hardware (10): CrinEar Protocol Micro 3302:C20F, Protocol Max 3302:43CC and FiiO KA15 2972:0104 (also in stable 1.3.2), plus the 7 devices reported working above (advBeta only).
  • Reported not working (7): the devices listed above.
  • Implemented, needs a tester (395 rules): WalkPlay-based dongles (catalog by VID:PID plus name rules), other FiiO models and KT Micro. None of these has been seen on real hardware yet.
  • Read-only diagnostics (18): reads the current EQ, never writes.
  • Recognised but blocked (52): detected, then refused with a reason.

Report your device

Worked, half worked or did not work at all - every report helps: https://github.com/Chronosauros/contour/issues/new?template=device-report.yml. Each line on the device list has a "Report result" link that fills in the device for you.

Safety

Every write needs a HID descriptor check, a complete read of the device first and a hold-to-send gesture. No EQ writes on connect. Before writing to an untested device, read its current EQ and keep it as a profile so you can go back. Writing to a device outside the confirmed level is at your own risk; start testing at a low listening volume.

Verification

Core protocol tests pass. APK signed with the existing Chronosaur release key. Stable release 1.3.2 stays the latest release.

SHA-256 of contour-advbeta-1.3.2-advbeta1.apk:
13008d962500bd20e1e0d08a11b70bb8c80611b9548c373937bebc02142b41db

Contour 1.3.1

Choose a tag to compare

@Chronosauros Chronosauros released this 03 Oct 17:02

Superseded by 1.3.2.

Contour 1.3.1 fixes the layout on narrow and zoomed phones.

  • Narrow and zoomed screens. On screens narrower than 411 dp - for example a phone with display size or font size turned up - the whole app now scales down evenly, so it looks the same as on a wider phone. Profile names, CONNECTED and the filter types (PEAK, LOW SHELF, HIGH SHELF) are no longer cut off. A system font size above 115% is shown at 115%, so the rows still fit.
  • ON DAC no longer takes the profile name's space. The profile that is on the DAC is marked with an orange bar on the left edge of its card and a small ON DAC under the curve.
  • Finer FREQ, GAIN and Q sliders. The value moves by the same amount for the same finger travel on every screen width. Slow moves are finer; normal and fast moves speed up gently.

Updating from 1.3.0 keeps your profiles.

SHA-256 of contour-1.3.1.apk: 2a9c8baaa489e2e481118940c8fbad57653f247842d022e409bf44e29767dd18
Signed by CN=Chronosaur, certificate SHA-256 c8c8caea761628ed9d505ff07342ee5ea0d466a4ad718d0db077422ba3f7e601.

Contour advBeta 1.3.1-advbeta1

Pre-release

Choose a tag to compare

@Chronosauros Chronosauros released this 03 Oct 17:19

Superseded by 1.3.2-advbeta1.

Contour advBeta is the experimental build for many more USB DACs and dongles. It installs alongside stable Contour as a separate app with its own library. This release updates an existing advBeta installation (versionCode 22, previous 19).

Which devices

The full list, with what each level means, is on the website: https://chronosauros.github.io/contour/devices/ (and in DEVICES.md on this branch).

  • Confirmed on hardware (2): CrinEar Protocol Micro 3302:C20F and Protocol Max 3302:43CC. Same code path as stable 1.3.1.
  • Implemented, needs a tester (403 rules): WalkPlay-based dongles (catalog by VID:PID plus name rules), TRN Black Pearl, FiiO and KT Micro. None of these has been seen on real hardware.
  • Read-only diagnostics (18): reads the current EQ, never writes.
  • Recognised but blocked (52): detected, then refused with a reason.

Report your device

Worked, half worked or did not work at all - every report helps: https://github.com/Chronosauros/contour/issues/new?template=device-report.yml. Each line on the device list has a "Report result" link that fills in the device for you.

Safety

Every write needs a HID descriptor check, a complete read of the device first and a hold-to-send gesture. No EQ writes on connect. Before writing to an untested device, read its current EQ and keep it as a profile so you can go back. Writing to a device outside the confirmed level is at your own risk; start testing at a low listening volume.

Also in this build

Everything from stable 1.3.1: layout for narrow and zoomed screens, the ON DAC edge bar, finer FREQ, GAIN and Q dragging.

Verification

Core protocol tests pass. APK signed with the existing Chronosaur release key. Stable release 1.3.1 stays the latest release.

SHA-256 of contour-advbeta-1.3.1-advbeta1.apk:
8707da8488e4289e85b745a9134e0a64799cc4ee13a6d6b37f541e16324249bc

Contour 1.3.0

Choose a tag to compare

@Chronosauros Chronosauros released this 03 Oct 11:09

Superseded by Contour 1.3.1, which fixes the layout on narrow and zoomed screens. Updating keeps your profiles.

Contour now works with the CrinEar Protocol Max as well as the Protocol Micro.

  • Protocol Max support. 10 bands with native low and high shelf filters, -10 to +10 dB. Contour computes the preamp itself, writes every band, reads it back and checks it matches. Tested by a community member on a real Protocol Max. A small pop when you send is normal - the dongle saves to its memory.
  • The Protocol Micro works as before. 8 bands, HIGH SHELF sent as a mirrored LOW SHELF plus preamp.
  • A/B is Protocol Micro only for now. I'll add it for the Max once I buy one and can test it myself.

Updating from 1.2.2 keeps your profiles.

If you installed Contour Max beta: it is a separate app with its own library and you no longer need it. To keep a profile from it, send it to your Max from the beta, then save it in Contour with FROM DAC. After that you can uninstall the beta.

SHA-256 of contour-1.3.0.apk: dabec092060f87e91a00fa8ec1c3aea8fbededcff3f970a6ddc6573a6c224b77
Signed by CN=Chronosaur, certificate SHA-256 c8c8caea761628ed9d505ff07342ee5ea0d466a4ad718d0db077422ba3f7e601.

Contour Max beta 1.2.2-maxbeta1

Pre-release

Choose a tag to compare

@Chronosauros Chronosauros released this 02 Oct 13:52

Superseded by Contour 1.3.0. Protocol Max support is now in the regular app, so you no longer need this beta. To keep a profile from it, send it to your Max from the beta, then save it in Contour with FROM DAC. After that you can uninstall the beta.

Contour Max beta is a test build with experimental support for the CrinEar Protocol Max. It installs next to stable Contour as a separate app with its own library, so your Contour library stays as it is.

New: experimental CrinEar Protocol Max support

  • Strict USB match: 3302:43CC (taken from the devicePEQ capture, not yet seen on real hardware).
  • Ten-band PEQ with native low and high shelves. Contour computes and writes the preamp itself.
  • DAC import and device-aware profile matching.
  • No EQ writes on connect; writes need an explicit tap.

Important limitations

This has NOT been tested on a physical Protocol Max. Protocol behaviour follows the devicePEQ reference. Start testing at a low listening volume.

  • Contour refuses to talk to the device if its USB layout differs from what it expects. If the Max shows up but does not connect, please report exactly that - it is the most likely first problem.
  • Without a Max plugged in, ten-band profiles show as invalid and clipboard import is cut to eight bands.
  • A/B is unavailable on the Protocol Max.
  • The Protocol Micro works exactly as in Contour 1.2.2.

If you have a Protocol Max, please try it and report what happens.

Verification

Core protocol tests: 17 passed, 3 skipped (they need a local EQ library). Both Max beta and stable variants compile. APK signed with the existing Chronosaur release key. Stable release v1.2.2 and main are unchanged.

SHA-256 of contour-maxbeta-1.2.2-maxbeta1.apk:
35b1bae99daf2c2bc3599242577f78156665398d896fe99b201c34bcabe48c9e

Contour advBeta 1.2.2-advbeta2

Pre-release

Choose a tag to compare

@Chronosauros Chronosauros released this 02 Oct 12:19

Superseded by 1.3.2-advbeta1.

Contour advBeta is the experimental build for advanced features. It installs alongside stable Contour as a separate app. This release updates an existing advBeta installation (versionCode 19); the stable Contour library is separate.

New: experimental TRN Black Pearl support

  • Strict USB match: 3302:43E8, WalkPlay SchemeNo16. Similar-looking HiFi188/other USB variants are not supported.
  • Ten-band PEQ, native low/high shelves, preamp, DAC import and device-aware profile matching.
  • Every send requires a complete device read first, then verifies all ten band registers, preamp and the bulk slot by read-back.
  • No EQ writes on connect; writes require an explicit user action.

Important limitations

This TRN implementation has NOT been tested on a physical Black Pearl. Protocol behavior follows the pinned permissively licensed devicePEQ reference. Audible DSP response, native shelf behavior, timing and persistence after unplugging still need hardware testing. Register read-back alone does not prove the audible result. Start testing at a low listening volume.

A/B and hardware volume are unavailable on the experimental TRN target. Protocol Micro retains its eight-band support and existing advBeta hardware volume.

Verification

19/19 core protocol/codec tests passed. Both advBeta and stable variants compile. APK signed with the existing Chronosaur release key. Stable release v1.2.2 and main are unchanged.

SHA-256 of contour-advbeta-1.2.2-advbeta2.apk:
1cfec303a6fd1c0aecc2431337a85b10d396dbfc938b0bf402c52f7e09d00ec1

Contour advBeta 1.2.2-advbeta1

Pre-release

Choose a tag to compare

@Chronosauros Chronosauros released this 01 Oct 17:44

Superseded by 1.3.2-advbeta1.

Contour advBeta is a test build for advanced features. It installs next to Contour as a separate app, so your Contour library stays as it is. advBeta starts with its own library.

New: HARDWARE VOLUME

On the EQ page, right of the graph. It sets the dongle's own volume - the one bit-perfect players such as HiBy or UAPP change in exclusive mode and Android cannot. If one of those apps left the volume low, drag the bar up to get it back.

  • Drag up or down: -60 to 0 dB in 0.5 dB steps, 0 dB is full volume.
  • It changes live while you drag and does not stop the music.

Tested on a Pixel 9 Pro with the CrinEar Protocol Micro. Everything else is the same as Contour 1.2.2.

SHA-256 of contour-advbeta-1.2.2-advbeta1.apk:
7b0f797665de73dd475812b3ae0b656f1abfb6814c461c2baf8441628548414e