- Joined
- Jan 11, 2026
- Messages
- 343
- Likes
- 173
I have attached a javascript converter between FiiO's (Undocumented) XML format for PEQ filters, and Equalizer APO's txt format. Which is very useful if you want to try Amir's PEQ settings on a FiiO device, or for making a custom EQ using the very helpful squig.link web app.
Note: I've only got a 10-band FiiO Tiny A and Melody to test this on; and others have tested it on the KA15; but it should hopefully work with other FiiO devices.
(currently, this bug is known to occur on the Tiny A, Tiny B, and Jeizi)
Note: I've only got a 10-band FiiO Tiny A and Melody to test this on; and others have tested it on the KA15; but it should hopefully work with other FiiO devices.
Features
- Converting from FiiO to Equalizer APO is very simple, and supports all FiiO PEQ features supported by my Tiny A.
- To get the correct
Preampvalue, you may need to change themax_global_gainfunction at the top of the file according to your device (the script assumes the value is +12, unless you have a Tiny, in which case it uses +5). Specifically, this returns the value of the master/global gain slider that gives you the same volume as with EQ off. If you do need to change this function, please let me know, so I can make it happen automatically for other people. - Q values of shelve filters are divided by √2 due to a bug. You can turn this off by making the
shelf_q_fixfunction returnfalseat the top of the file. - The name and description of your FiiO profile are saved as comments at the start of the file
- To get the correct
- Converting from Equalizer APO to FiiO only supports the following features:
- YOU MUST change set
device_modelvariable at the top of the script file (the generated xml file will then only work with the selected device; however you can manually modify the specifiedmodelat the top of an xml file to a different device). - Preamps (as above, this is adjusted based on the
max_global_gainvariable)
BiQuad Filters (Peaking, low/high/band/all-pass, low/high-shelf),- Supported, via conversion to FiiO supported filters:
- bandwidth (BW) values instead of Q. (This uses the value of the
sample_ratevariable at the top of the file) - slope values (only used in shelf filters)
- corner-frequency shelf filters (LS/HS): these are converted to centre-frequency ones (LSC/HSC)
- bandwidth (BW) values instead of Q. (This uses the value of the
- Similarly to the above, this multiplies Q values by √2, unless you make
shelf_q_fixreturn false. - (Some devices don't support the low/high/all/band-pass filters, in which case you will get an error).
- NOT SUPPORTED:
- Notch (NO) filters
- Filters with custom coefficients (IIR)
- Supported, via conversion to FiiO supported filters:
- Comments
- if the first line of the Equalizer APO file starts with a "
#" the rest of the line is used as the name of the FiiO filter - any subsequent "
#" lines are used as the description. - If the above are absent, the script will try to generate them based on the input and output file names.
- if the first line of the Equalizer APO file starts with a "
- YOU MUST change set
WARNING: If you are using high-shelf (HS/HSC) filters, your FiiO device may output crazy loud & distorted stuff, even at low volume or preamp values!
The Melody and QX13 should be safe though. I do not know how to detect or fix this bug.(currently, this bug is known to occur on the Tiny A, Tiny B, and Jeizi)
Instructions
- To obtain a FiiO XML file: go to fiiocontrol.fiio.com (even if you are on a mobile), go to the personal tab on the left, click the
...on the profile you want, and then clickexport:- Exporting is not supported on the mobile app, but you can use the download/upload buttons to sync with the data on the website:
-
- WARNING: pressing "upload" will delete anything on the website that is not on your mobile app; and pressing "download" will undelete anything you've locally deleted.
- Run this script on the commandline
node convert.js.txt --<model> <input filename> <output filename>(the filenames default to stdin/stdout).- Where
<model>is the (case-insensitive) model name of your device (you can use-'s instead of spaces, and you don't need to include the brand name, e.g. FIIO or SNOWSKY). - If you are converting from a FiiO XML to Equalizer APO, the --<model> part is unnecessary and simply ignored (as the FiiO xml file contains this information)
- Instead of providing
--<model>, you can modify thedevice_modelvariable at the top of theconvert.js.txtfile.
- Where
- Or use this version in an online interpreter
- If you are converting from Equalizer APO to FiiO, remember to modify the
device_modelvariable at the top of the script - On the top right, click the
Input/Outputtab. - Make sure the
Interactive Modecheckbox is unchecked - Paste your input file in the big white
Stdin Inputstext box below (it will auto-detect whether this is a FiiO XML file or an Equalizer APO file) - Press the big orange
Executebutton at the top-right - Copy the results from the big black box at the bottom right, and save it a file (the filename you use should end in
.xmlif you are generating a FiiO file)
- If you are converting from Equalizer APO to FiiO, remember to modify the
- If you are converting to a FIio XML file: go to fiiocontrol.fiio.com (even if you are on a mobile device), click the
Importbutton at the top right, clickUpload File, select your.xmlfile, then clickConfirm.
The loaded profile will be at the bottom of the list, and might not have any name or description, but you can easily fix this:
- If you are converting to Equalizer APO, paste the contents of the file into
C:\Program Files\EqualizerAPO\config\config.txt
<?, otherwise it is assumed to be an Equalizer APO file. The output file format is the opposite of the input format.)Supported Devices
The following list of devices were extracted from the fiiocontrol.fiio.com source code (namely, the index-DcKjLhLc.js script file included by it):- Bluetooth Transmitters: FIIO Air Link, FIIO BT11
- Head/earphones: FIIO FP3, FIIO FX17
- CD Player: FIIO DM15 R2R
- Cable: FIIO LS-TC2
- Desktop DAC: FIIO K13 R2R, FIIO K15, FIIO K17, FIIO K19
- Portable DAC (without Bluetooth): FIIO KA15, FIIO KA17, FIIO QX13, SNOWSKY Melody
- Dongle DAC: JadeAudio JA11, JadeAudio JIEZI, SNOWSKY TINY A, SNOWSKY TINY B
- Bluetooth receiver / DAC: FIIO BR15 R2R, FIIO BTR13, FIIO BTR17, RETRO NANO
- Unreleased products: FIIO FG3, FIIO OAK NANO
device_model variable).Please let me know if you have any question or feature requests. I'd especially like to know if it doesn't work correctly with a specific device.
Last edited: