Measurement based equalization of HD650, HD700
Jul 21, 2016 at 3:51 PM Post #16 of 19
The use of an equilizer in foobar may not be the best option.  _gl showed that using a convolver with impulse curves can be extremely effective in "tweaking" Senn headphone SQ.  In his thread http://www.head-fi.org/t/797907/hd600-my-custom-bass-extension-curves he did this for the HD600 to great effect in my view.
 
Might be interesting to see folks here try the same approach.
 
Feb 28, 2018 at 4:05 PM Post #17 of 19
Very late to the party but hopefully this thread is still relevant.

A couple of naive generic EQ questions first if I may. What are you looking to achieve with EQ, it is mostly to fix issues with frequency response (i.e. get closer to neutral), or is it to tune to preference?

Secondly, do you exclusively use computer audio? I'm guessing it's much less practical/more expensive to do otherwise, e.g with CDP analogue -> amp or CDP digital -> DAC/amp. It slightly puts me off that I could spend an awful lot of time tweaking a computer setup then have to take a step back with the CDP.

On the question of software, does anyone know of a good package that will work system-wide on linux (debian), i.e. not a plug-in for a particular player?

Somewhat more on-topic, the HD700. The OP seems to have made a significant improvement by improving neutrality (naturality?) I'm very interested in the changes needed here. I find it difficult to believe that Sennheiser did not attain their goal for the sound of this HP, especially given the $1000 launch.

Is this a case of technologically capable but badly tuned? Is it a case of the tuning being too niche, i.e. excels at something (which would be what) but at the expense of many other things? How did the standard signature come about? I've seen nothing from Sennheiser beyond vague statements of 'a more fun sound', whatever that means.

It may well be that for many the EQ isn't needed, I'm simply going off some of the large EQ parameter values in a small number of targeted areas and the cited improvement this has brought.

I have some thoughts on this but as I've rambled on enough, I'd be very interested to read everyone else's views.
 
Mar 4, 2018 at 7:23 AM Post #18 of 19
Annoyingly I've lost the thread that put me onto this but I've been playing a little with the CIPIC HRTF sample data set. May be of interest, just search for CIPIC HRTF UCDavis.

(Edit: found it! https://www.head-fi.org/threads/hrt...50-hd700-akg-k550.641860/page-4#post-11660475)


Although their data is in (an older) MatLab format, it can be opened in Python with scipy.io.loadmat. There's a bit of faffing to understand the dimensionality and ordering but I think I can load the HRIR. It's provided as data over azimuth and elevation as the source moves around the head. I think it's then just a case of taking the FFT to get the HRTF but need to read the documentation more carefully to ensure the parameters are correct.

Whether I can take anything useful from the data is another matter!
 
Last edited:
Mar 6, 2018 at 3:08 PM Post #19 of 19
Very late to the party but hopefully this thread is still relevant.

A couple of naive generic EQ questions first if I may. What are you looking to achieve with EQ, it is mostly to fix issues with frequency response (i.e. get closer to neutral), or is it to tune to preference?

Secondly, do you exclusively use computer audio? I'm guessing it's much less practical/more expensive to do otherwise, e.g with CDP analogue -> amp or CDP digital -> DAC/amp. It slightly puts me off that I could spend an awful lot of time tweaking a computer setup then have to take a step back with the CDP.

On the question of software, does anyone know of a good package that will work system-wide on linux (debian), i.e. not a plug-in for a particular player?

Somewhat more on-topic, the HD700. The OP seems to have made a significant improvement by improving neutrality (naturality?) I'm very interested in the changes needed here. I find it difficult to believe that Sennheiser did not attain their goal for the sound of this HP, especially given the $1000 launch.

Is this a case of technologically capable but badly tuned? Is it a case of the tuning being too niche, i.e. excels at something (which would be what) but at the expense of many other things? How did the standard signature come about? I've seen nothing from Sennheiser beyond vague statements of 'a more fun sound', whatever that means.

It may well be that for many the EQ isn't needed, I'm simply going off some of the large EQ parameter values in a small number of targeted areas and the cited improvement this has brought.

I have some thoughts on this but as I've rambled on enough, I'd be very interested to read everyone else's views.

For system wide equalization on Linux you can use LADSPA plugins with ALSA. But this involves configuring ALSA with an .asoundrc config file in your home directory. I also disable PulseAudio on my system. Take a look here to get started: https://takla.wordpress.com/tag/bs2b/ (The article also uses crossfeed, but that's another kettle of fish!).

Here are some excerpts from my ALSA config (which may be helpful):

Code:
# Remember to disable PulseAudio

# Identify the card by name to avoid maintaining hardcoded numbers ("hw:2,0") that may
# change depending on what else is plugged into the PC
#
# Name: cat /proc/asound/cards or aplay -l
# http://alsa.opensrc.org/Proc_asound_documentation
#
# Use "alsa-capabilities" script to find info about supported formats etc.
#

defaults.pcm.rate_converter "speexrate_best"

pcm.INTEL_ANALOG {
  type hw
  card "Intel"
  device 0
}

pcm.INTEL_DIGITAL {
  type hw
  card "Intel"
  device 1
}

ctl.INTEL {
  type hw
  card "Intel"
}

pcm.GUMBY {
  type hw
  card "G5"
}

ctl.GUMBY {
  type hw
  card "G5"
}


# ALSA dmixer, use instead of PulseAudio
pcm.dmixer {
  type dmix
  ipc_key 1024
  slave {
    pcm "GUMBY"
    format "S24_3LE"
    rate 48000
    period_time 0
    period_size 1024
    buffer_size 8192
  }
     
  hint {
    show {
      @func refer
      name defaults.namehint.extended
    }
    description "DMixer Playback"
  }
}

pcm.dsnooper {
  type dsnoop
  ipc_key 1025
  slave {
    pcm "INTEL_ANALOG"
    format "S32_LE"
    rate 48000
    period_time 0
    period_size 1024
    buffer_size 8192
  }

  hint {
    show {
      @func refer
      name defaults.namehint.extended
    }
    description "DSnooper Capture"
  }
}

pcm.duplex {
  type asym
  playback.pcm "dmixer"
  capture.pcm "dsnooper"
}


# Bit Perfect Playback
# http://audiokarma.org/forums/index.php?threads/stop-resampling-under-linux.575308/
# http://www.audiomisc.co.uk/Linux/ALSA/NoMoreSilence.html

pcm.bit_perfect {
  type plug
  slave {
    pcm "GUMBY"
    format "S24_3LE"
    rate "unchanged"
  }

  hint {
    show {
      @func refer
      name defaults.namehint.extended
    }
    description "Bit Perfect Playback"  
  }
}


# Invert Right Channel with LADSPA
# http://nairobi-embedded.org/alsa_ladspa_example_usage.html
# http://plugin.org.uk/faq.php
# http://alsa.opensrc.org/Ladspa_%28plugin%29

pcm.invert {
  type ladspa
  slave.pcm "bit_perfect"
  path "/usr/lib/ladspa"
  channels 2
 
  plugins {
    0 {
      id 1181
      label "amp"
      policy "none"
      input.bindings.0 "Input"
      output.bindings.0 "Output"
      input {
        controls [ 0.0 ]
      }
    }
   
    1 {
      id 1429
      label "inv"
      policy "none"
      input.bindings.1 "Input"
      output.bindings.1 "Output"
    }
  }
}

pcm.invert_dmixer {
  type ladspa
  slave.pcm "plug:dmixer"
  path "/usr/lib/ladspa"
  channels 2
 
  plugins {
    0 {
      id 1181
      label "amp"
      policy "none"
      input.bindings.0 "Input"
      output.bindings.0 "Output"
      input {
        controls [ 0.0 ]
      }
    }
   
    1 {
      id 1429
      label "inv"
      policy "none"
      input.bindings.1 "Input"
      output.bindings.1 "Output"
    }
  }
}

pcm.invert_plug {
  type plug
  slave.pcm "invert"

  hint {
    show {
      @func refer
      name defaults.namehint.extended
    }
    description "Phase Invert Playback"
  }
}


# HD650 Equalizer and Invert Right Channel with LADSPA
# https://takla.wordpress.com/tag/bs2b/
# http://quitte.de/dsp/caps.html
# Use analyzeplugin command to determine control ports

# Uses CAPS plugin (based on fil-plugin)
pcm.equalizer {
  type ladspa
  slave.pcm "invert"
  path "/usr/lib/ladspa"
 
  plugins [
    {
      id 2609
      label "EqFA4p"
      input {
        controls [ 1 38 0.714 4.0  1 50 1.388 5.0  1 2500 1.388 1.0  0 0 0.00 0.0  -9.0 ]
      }
    }
  ]
}

# Alternatively use fil-plugin
#pcm.equalizer2 {
#  type ladspa
#  slave.pcm "invert"
#  path "/usr/lib/ladspa"
#
#  plugins [
#    {
#      id 1970
#      label "Parametric1"
#      input {  
#        controls [ 1  -9.0  1 38 0.714 4.0  1 50 1.388 5.0  1 2500 1.388 1.0  0 0 0.00 0.0 ]
#      }
#    }
#  ]
#}

pcm.equalizer_dmixer {
  type ladspa
  slave.pcm "invert_dmixer"
  path "/usr/lib/ladspa"
 
  plugins [
    {
      id 2609
      label "EqFA4p"
      input {
        controls [ 1 38 0.714 4.0  1 50 1.388 5.0  1 2500 1.388 1.0  0 0 0.00 0.0  -9.0 ]
      }
    }
  ]
}

pcm.equalizer_plug {
  type plug
  slave.pcm "equalizer"

  hint {
    show {
      @func refer
      name defaults.namehint.extended
    }
    description "HD650 Equalizer Playback"
  }
}

# Default sound chain
# https://unix.stackexchange.com/questions/106270/how-to-combine-dmix-with-ladspa-plugins-to-default-device

pcm.!default {
  type copy
#  slave.pcm "plug:dmixer"
#  slave.pcm "plug:duplex"
#  slave.pcm "bit_perfect"
#  slave.pcm "plug:invert"
#  slave.pcm "plug:invert_dmixer"
  slave.pcm "plug:equalizer"
#  slave.pcm "plug:equalizer_dmixer"

  hint {
    show {
      @func refer
      name defaults.namehint.extended
    }
    description "Default Playback"
  }
}

There are two principle pcm chains, one that uses the bit_perfect pcm and another uses the dmixer. I use the bit_perfect chain for listening with DeaDBeeF or VLC and the dmixer chain for general use. The bit_perfect chain takes exclusive control of ALSA whereas the dmixer chain allows other applications to mix in their sound.

The invert pcm is for inverting the phase of one channel, this is a trick for improving the performance of single-ended amps (the phase needs to be inverted back to its original phase after the sound leaves the amp).

We have:
equalizer->invert->bit_perfect->GUMBY
equalizer_dmixer->invert_dmixer->dmixer->GUMBY

You don't have to use the invert slave unless you want to, the equalizer pcm could call bit_perfect or dmixer directly.

The values for the equalizer controls are the HD650 values as stated in the first post of this thread (I converted Q to bandwidth in octaves).

I really ought to write a tutorial on this some day!
 
Last edited:

Users who are viewing this thread

Back
Top