• Welcome to ASR. There are many reviews of audio hardware and expert members to help answer your questions. Click here to have your audio equipment measured for free!

FIIO KA15 Portable DAC & Headphone Amp Review

Rate this DAC & HP amp:

  • Poor

    Votes: 2 5.6%
  • Not terrible

    Votes: 3 8.3%
  • Fine

    Votes: 15 41.7%
  • Great

    Votes: 16 44.4%

  • Total voters
    36
I think it is an area where FiiO is definitely lacking. They appear to make very good hardware, but that’s their problem: they focus too much on the HW, struggle to support it with good SW, and end up with poor implementations or sloppy details.
Would make me think twice before buying expensive FiiO devices…
The sad thing is that Fiio is still somehow ahead of other Chinese audio manufacturers in this regard with software experience.

Thanks for the answers, everyone!
 
In fact, I just confirmed that the device volume control on KA15 is applied in DSP before DAC. In this case NO global preamp cut is necessary! A user's volume adjustment would serve as a preamp cut, and at the same time could increase volume for softly recorded tracks.

Are you certain that is the case? I do recall hearing distortion when using EQ with a preamp that's too high, and it didn't go away when reducing the volume. I'll try to make a recording of this for confirmation.
 
hey guys, is this the best USB/dongle Dac/AMP under $150? I saw with the firmware update it has gotten better. Looking for something with the best soundstage
 
In fact, I just confirmed that the device volume control on KA15 is applied in DSP before DAC. In this case NO global preamp cut is necessary! A user's volume adjustment would serve as a preamp cut, and at the same time could increase volume for softly recorded tracks. The design would have been same as the excellent Qudelix or RME design (despite KA15's volume control being fully digital unlike Qudelix or RME). But FiiO must not have thought about this consequence...
Are you certain that is the case? I do recall hearing distortion when using EQ with a preamp that's too high, and it didn't go away when reducing the volume. I'll try to make a recording of this for confirmation.
I checked it again. I was mistaken. You're right. The volume control on KA15 does not play the role of a preamp cut. It must adjust either the DAC chip's volume register or the signal after conversion to DAC-ready data on [-1. 1] in DSP (most likely the former). But at least the preamp slider works although it's only in 1 dB steps. Still, the -12 dB cut for whatever PEQ is a bad decision as it is not intuitive...

Crossed out the incorrect information in my original post.
 
I checked it again. I was mistaken. You're right. The volume control on KA15 does not play the role of a preamp cut. It must adjust either the DAC chip's volume register or the signal after conversion to DAC-ready data on [-1. 1] in DSP (most likely the former). But at least the preamp slider works although it's only in 1 dB steps. Still, the -12 dB cut for whatever PEQ is a bad decision as it is not intuitive...

Crossed out the incorrect information in my original post.
I usually keep the DAC volume at max, and adjust volume in the host device. So it's before the DAC, I don't need this "considerate" 12dB attenuation. In my opinion, this is a foolproof measure that shows a lack of trust in users.
 
I usually keep the DAC volume at max, and adjust volume in the host device. So it's before the DAC, I don't need this "considerate" 12dB attenuation. In my opinion, this is a foolproof measure that shows a lack of trust in users.
I also keep the volume of KA15 at maximum (as I usually do for DACs as well), but it gives me an audible distortion for the balanced output and poor channel separation. It doesn't happen when I use the 3.5mm unbalanced out. I described my issue in a separate thread. Maybe someone else has the same behaviour. If the device is defective, I still have a chance to replace it.
 
I couldn't hear it with FAST-PC filter and C-Major sample file.
But, I couldn't hear it with DRE enabled as well this time (previously I could), so maybe it's always disabled now?

@jkim do you still have the KA15? If yes, could you check if the DRE switch is working as expected under 1.0.5 firmware?

Hi, I’m new to audio and just received the KA15 today. I'm reading through this thread and stumbled upon your comment which intrigued me.

Are you able to say more about this distortion and how I can listen out for it?

For the C-Major chord, is it a specific instrument or sample file that you’re using? Is there a way for me to try listening out for it on my end?
 
I recently got a KA15 and an ADCiso. In an attempt to learn how to take measurements using the ADCiso, here are my results.

Setup:
- ADCiso in stereo mode. KA15 balanced L-ch output connected to L-ch input of ADCiso only (since I don't have a splitter to properly use mono mode).


Results:
1 KHz sine tone at -1dBFs. DAC volume set to max. Voltage reading from meter is 4.35 Vrms. Equivalent SINAD seen here is ~94.4dB. Left channel output only.

KA15.png


Jitter test. Settings are automatically set by REW, which is a few dB below max. DAC and ADC settings are the same. 44100KHz sample rate. I probably should have set sample rate to 48000KHz for 12Khz tone.

ka15 Jitter.png

Do let me know if my results make sense or if I'm doing something wrongly!
 
Last edited:
I didn't measure this earlier. Just confirmed this is true. FiiO made a really bad decision---as usual their design is not thoughtful. Why on earth block the precious upper gain range by a whopping 12 dB? Sure, the KA15 is relatively powerful but still some users have chosen it to drive relatively insensitive headphones. In that case some softly recorded material may require near-max device volume when EQ is applied.

In fact, I just confirmed that the device volume control on KA15 is applied in DSP before DAC. In this case NO global preamp cut is necessary! A user's volume adjustment would serve as a preamp cut, and at the same time could increase volume for softly recorded tracks. The design would have been same as the excellent Qudelix or RME design (despite KA15's volume control being fully digital unlike Qudelix or RME). But FiiO must not have thought about this consequence...
EDIT. The above information has been corrected in another post.


You're right. It was my mistake in calling their implemented parameter "shelf slope (S)". In fact, it is not. Their parameter simply = sqrt(2) x Q. That is, their implemented "Q" parameter is proportional to actual Q by a constant factor of sqrt(2). I verified it.

I'm a bit confused. I'm not really a measurements expert or anything. I just want to get my EQ settings correctly configured. Would you please explain how could I set the Q value correctly to match the real value intended?
 
I'm a bit confused. I'm not really a measurements expert or anything. I just want to get my EQ settings correctly configured. Would you please explain how could I set the Q value correctly to match the real value intended?

For shelf filters, multiply the value you want to get by 1.414 (square root of two). For example, to get the Q=0.71 as often stated in Oratory1990's settings, enter Q=1 in the FiiO App or website.

The preview in the app / website will show the curve of the values displayed in the UI, not the "real" values.

For peak filters, Q is working OK.

The preamp gain value in the app/website is also incorrect. The displayed value is is larger by 12 dB.

For example, when FiiO shows gain of +9 dB, real gain value is +9 - 12 = -3 dB.

Also it appears that thr fractional part of the preamp gain is dropped - +3.5dB is same as +3 dB.

The gain in the individual filters works correctly.
 
Balanced output can have loud pops with active speakers
- The balanced output works generally works with a 4.4mm to 2x XLR adapter (tested with Kali IN-8 V2), but there are issues.
- After stopping playback, after few seconds there is a very loud pop. It is not affected by volume setting. I think it goes from 0 to full output voltage an back in an instant. My Kalis are ~1m away from me and it was a bit scary.
- One can disable sleep mode (hold volume down before connecting to USB) to disable this effect.

Am currently on the latest firmware and was also having the pops with active speakers. Was very annoying, and it occurs before and after audio playback.

The tip on disabling sleep mode seems to have helped for now, so thank you for that! Hopefully it can persist through multiple PC boot/shutdown cycles.
 
Am currently on the latest firmware and was also having the pops with active speakers. Was very annoying, and it occurs before and after audio playback.

The tip on disabling sleep mode seems to have helped for now, so thank you for that! Hopefully it can persist through multiple PC boot/shutdown cycles.

I think once no-sleep-mode is set it works until reset or firmware update.

There's also a program called SoundKeeper that allows playing back for example noise at -100 dB, preventing device from entering sleep.

On my work laptop, I can't use that but I'm using an online tone generator with level further reduced by browser plug-ins and Windows mixer.

This helps with part of playback being cut-off when starting it after silence.
 
  • Suggested fix: Revise the code to use an appropriate formula. The easiest fix would be simply converting user input of Q to S = sqrt(2) x Q.
Thanks for this!

EDIT: Please ignore this post, it was all wrong (I thought Fiio's LS/HS filters were equivalent to Equalizer APO's LS/HS filters, but they are actually LSC/HSC filters)
I've tested my Fiio Tiny A using Room EQ Wizard and a cable from the Tiny to my motherboards Line-In, here are my results:

Tiny.png

The graph will need some explaining:
  • I ran a sweep at -40 dbFS (this was needed to prevent the blue line from clipping), so the lines aren't very smooth.
  • The Green line is with the Tiny A's PEQ disabled but with Equalizer APO running using the same filter file as the "Complex 1 PEQ" graph used here, however I changed the LSC/HSC filters to LS/HS ones as Fiio doesn't support the 'C' versions (thus making it a fairer comparison).
  • The Red Line is the same PEQ but converted to Fiio's XML format, and the Master Gain set to -3 instead of -8 (This is strange because based on the above discussion, I thought the correct master gain would be the APO one +12dB, I will need more testing to work out the correct way to adjust it)
  • The Magenta Line is the same as the Red line, but the first HS and the LS filter having their Q factors multiplied by √2 (and then rounded to 2 decimal points); this means the other shelf filter (the second HS) was not modified. (Note that the first HS filter results do not line up perfectly with the Green line, but increasing the master volume for both tests them to get closer, this suggests to me that it is simply a rounding error)
  • The Blue line is the same as the Magenta line, but the second HS has had it's Q factor increased by a minimal 0.01
  • The Indigo Line is the same as the Magenta line, but the second HS is also multiplied by √2
Bassically, the Fiio Tiny A has same issue as the Melody, and multiplying the shelf Q factors by √2 partially fixed it. But for some reason, any increase to the middle shelf Q factor causes the volume to drastically increase (causing horrendous clipping at reasonable volume levels).

(Ironically, when I applied the √2 fix to a PEQ I've been using for my headphones, music sounds ever so slightly worse, so I'm going to stick to the "buggy" version).
Code:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<FiiO_DSP model="SNOWSKY TINY A" version="0.0.1">
  <module name="EQ">
    <eqGroup>
      <param name="masterGain">4</param>
      <eqList>
        <eq index="0">
          <param name="type">1</param>
          <param name="freq">105</param>
          <param name="gain">8</param>
          <param name="q">0.7</param>
        </eq>
        <eq index="1">
          <param name="type">0</param>
          <param name="freq">125</param>
          <param name="gain">6.3</param>
          <param name="q">3.23</param>
        </eq>
        <eq index="2">
          <param name="type">0</param>
          <param name="freq">125</param>
          <param name="gain">-6.3</param>
          <param name="q">3.23</param>
        </eq>
        <eq index="3">
          <param name="type">0</param>
          <param name="freq">800</param>
          <param name="gain">-1.5</param>
          <param name="q">1.55</param>
        </eq>
        <eq index="4">
          <param name="type">0</param>
          <param name="freq">800</param>
          <param name="gain">-1</param>
          <param name="q">1.55</param>
        </eq>
        <eq index="5">
          <param name="type">0</param>
          <param name="freq">1524</param>
          <param name="gain">4</param>
          <param name="q">0.78</param>
        </eq>
        <eq index="6">
          <param name="type">0</param>
          <param name="freq">2921</param>
          <param name="gain">2.2</param>
          <param name="q">2</param>
        </eq>
        <eq index="7">
          <param name="type">2</param>
          <param name="freq">6000</param>
          <param name="gain">4.6</param>
          <param name="q">0.54</param>
        </eq>
        <eq index="8">
          <param name="type">0</param>
          <param name="freq">9200</param>
          <param name="gain">-4.3</param>
          <param name="q">5.97</param>
        </eq>
        <eq index="9">
          <param name="type">2</param>
          <param name="freq">15000</param>
          <param name="gain">2.2</param>
          <param name="q">0.7</param>
        </eq>
      </eqList>
    </eqGroup>
  </module>
  <styleName>Complex PEQ Test</styleName>
  <description>The LS/HS filter Q factors have not yet been multiplied by √2</description>
</FiiO_DSP>
 
Last edited:
Bassically, the Fiio Tiny A has same issue as the Melody
Not really surprising since they both use SPVxx chips. FiiO DSP code must be very similar.
Disclaimer: I have not open a Tiny-A, but Tiny-B uses a SPV4040 SoC and I assume it’s the same for Tiny-A. Melody uses a SPV5048, same as the KA15.
 
Disclaimer: I have not open a Tiny-A, but Tiny-B uses a SPV4040 SoC and I assume it’s the same for Tiny-A.
Curiously, unlike the B, the Tiny A does not have a screw so I can't open it without damaging it...
 
Curiously, unlike the B, the Tiny A does not have a screw so I can't open it without damaging it...
Yes, that’s why I opened up Tiny-B (I have both)! :D
Besides the screw, there is some glue and the PCB+USB-C plug is inserted very tightly in the half housing, so I ended up doing some damage…

I”ll be curious to see if Tiny-A has another chip to manage the PD pass through or it just repeats the necessary power and PD handshake wires…
 
I checked it again. I was mistaken. You're right. The volume control on KA15 does not play the role of a preamp cut. It must adjust either the DAC chip's volume register or the signal after conversion to DAC-ready data on [-1. 1] in DSP (most likely the former). But at least the preamp slider works although it's only in 1 dB steps. Still, the -12 dB cut for whatever PEQ is a bad decision as it is not intuitive...

Crossed out the incorrect information in my original post.
The FAQ for the X5 DAP says this:
The equalizer is implemented in the digital processing stage, and includes a filter stage and a digital gain stage. Volume is controlled after digital-analog conversion. The equalizer filter can effect a maximum increase of 6dB in a frequency band; if this is done without lowering the digital gain, it could cause the digital signal to clip at 0dBFS and cause audible distortion. Lowering the analog volume afterwards has no effect on the distortion. Thus to preserve signal integrity, a digital gain of -6dB is added when equalizer settings are enabled to avoid clipping. This does not affect audio quality except in so far as you need to turn up the volume afterwards.
So it's saying there's a 6dB cut (not a 12dB one).

I've done some testing on my Tiny A, and I consistently get a level-match when I set the Fiio Master Gain to +5dB higher than the Equalizer APO Preamp. Moreover, any Master Gain above +5dB is treated the same a +5dB (as these would be equivalent to a positive Equalizer APO Preamp).

Strange that the KA15 and Melody apparently use a +12dB offset..
 

TLDR: I have the same problems with the Tiny A, but +5dB to the master gain, and multiplying shelf Q values by √2 seems to fix it.​

I've redone my tests from above as they were wrong. Specifically, here is a comparison of Equalizer APO and the Fiio Tiny A's PEQ function:
New 2.png

All lines were played at -15dBFS and 48kHz, which my ADC reports at -5.8 dBr (instead of 0dBr, I do not know how to fix this).
  1. The black line is simply to show what I want 0dBr to be, and as a reference to how accurate the measurements are. (Please ignore any squiggles at the top left, they were not deterministic)
  2. The grayline shows my previous mistake: it is Equalizer APO using LS/HS filters instead of LSC/HSC ones (as I thought Fiio's "LS" and "HS" filters where the same, but they are actually the "C" variants).
  3. The green line is Equalizer APO implementing 2 LS + 2 HS filters.
  4. The red line is the same filters as above, but done by the Fiio Tiny, and adding +5dB to the preamp/master gain (as explained in my previous post)
  5. The purple line is the same as above, but the Q value of each shelf filter is multiplied by √2. It differs from the green line in the bottom right corner. EDIT: as pointed out to me here, this is likely due to the Tiny A calculating things at a different sampling rate; I suspect I could get the two to line up if I could somehow get my REW setup to do the tests at 384kHz.
  6. The blue line is the same as above, but the last shelf filter has +0.06 added to it's Q value (so the Q value is = 0.63 × √2 + 0.06 = 0.89 + 0.06 = 0.95). This is the most I could do to get it to line up with the green line (but it is slightly off as you can see in the bottom right corner).
Similarly to what I observed in my incorrect test, using a gain that is too high for one of the shelf filters caused the Tiny A to massively increase the gain on all frequencies (and produce the wrong shape). So I'm guessing there's some internal overflow error.

Here is the filter used by the green line:
Code:
Preamp: -10 dB
Filter 1: ON LSC Fc   105 Hz Gain  8.0 dB  Q 0.89
Filter 2: ON LSC Fc  1500 Hz Gain  1.7 dB  Q 4.24
Filter 3: ON HSC Fc  4000 Hz Gain  1.0 dB  Q 0.77
Filter 4: ON HSC Fc 10000 Hz Gain -2.8 dB  Q 0.63

If anyone wants to test my results on another Fiio device (in case they aren't all the same), you can import this file into https://fiiocontrol.fiio.com/ to reproduce the Blue line:
Code:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<FiiO_DSP model="SNOWSKY TINY A" version="0.0.1">
  <module name="EQ">
    <eqGroup>
      <param name="masterGain">-5</param>
      <eqList>
        <eq index="0">
          <param name="type">1</param>
          <param name="freq">105</param>
          <param name="gain">8</param>
          <param name="q">1.26</param>
        </eq>
        <eq index="1">
          <param name="type">1</param>
          <param name="freq">1500</param>
          <param name="gain">1.7</param>
          <param name="q">6</param>
        </eq>
        <eq index="2">
          <param name="type">2</param>
          <param name="freq">4000</param>
          <param name="gain">1</param>
          <param name="q">1.09</param>
        </eq>
        <eq index="3">
          <param name="type">2</param>
          <param name="freq">10000</param>
          <param name="gain">-2.7</param>
          <param name="q">0.95</param>
        </eq>
        <eq index="4">
          <param name="type">0</param>
          <param name="freq">20000</param>
          <param name="gain">0</param>
          <param name="q">0.25</param>
        </eq>
        <eq index="5">
          <param name="type">0</param>
          <param name="freq">20000</param>
          <param name="gain">0</param>
          <param name="q">0.25</param>
        </eq>
        <eq index="6">
          <param name="type">0</param>
          <param name="freq">20000</param>
          <param name="gain">0</param>
          <param name="q">0.25</param>
        </eq>
        <eq index="7">
          <param name="type">0</param>
          <param name="freq">20000</param>
          <param name="gain">0</param>
          <param name="q">0.25</param>
        </eq>
        <eq index="8">
          <param name="type">0</param>
          <param name="freq">20000</param>
          <param name="gain">0</param>
          <param name="q">0.25</param>
        </eq>
        <eq index="9">
          <param name="type">0</param>
          <param name="freq">20000</param>
          <param name="gain">0</param>
          <param name="q">0.25</param>
        </eq>
      </eqList>
    </eqGroup>
  </module>
  <styleName>Fiio +5dB &amp; √2 &amp; +0.06</styleName>
  <description/>
</FiiO_DSP>
 
Last edited:
Back
Top Bottom