#
# vim:sw=2 ts=8:et sta:ft=unknown
#
                       +------------------------------+
                       |                              |
                       |   Whatsnew for FreeBSD 8.x   |
                       |                              |
                       +------------------------------+

1) Volume Per-Channel
   * Provides private / stand alove volume control unique per-stream
     pcm channel without touching master volume / pcm. Application
     can directly use SNDCTL_DSP_[GET|SET][PLAY|REC]VOL or for backward
     compatibility, SOUND_MIXER_PCM through opened dsp device instead
     of /dev/mixer. Special "bypass" mode is enabled through /dev/mixer which
     will automatically detect if the adjustment is made through /dev/mixer
     and forward its request to this private volume controller. Changes
     to this volume object will not interfere with other channels
   Requirements:
      - SNDCTL_DSP_[GET|SET][PLAY|REC]_VOL are newer ioctls (OSSv4) which
        require specific application modifications (prefered).
      - No modifications required for using bypass mode, so things like
        mplayer or xmms should work out of the box.
   Kernel hints:
      - hint.pcm.%d.vpc (0=disable vpc)
   Kernel sysctls:
      - hw.snd.vpc_mixer_bypass (default: 1)
        Enable or disable /dev/mixer bypass mode.
      - hw.snd.vpc_autoreset (default: 1)
        By default, closing/opening /dev/dsp will reset the volume back
        to 0 db gain/attenuation. Setting this to 0 will preserve its
        settings across device closing/opening.
      - hw.snd.vpc_reset
        Panic/reset button to reset all volume settings back to 0 db.
      - hw.snd.vpc_0db (default: 45)
        0 db relative to linear mixer value.

2) High quality fixed-point Bandlimited SINC sampling rate converter
   * Motivation:
     - FreeBSD lacks high-quality Sample Rate Converter (SRC).
     - Available SRCs are either too restrictive (licensing), floating
       point implementation (you can't do that in kernel!), lack definitive
       filter design program (those coefficients suddenly appear out of
       nowhere) or too convoluted to comprehend.
   * FreeBSD own implementation based on Julius O'Smith Digital Audio
     Resampling - http://ccrma.stanford.edu/~jos/resample/
   * Includes filter design program/script written using awk.
     (feeder_rate_mkfilter.awk)
   * 100% 32bit fixed-point, 64bit accumulator
   * Possibly among the fastest (if not fastest) of its kind.
   * Resampling quality is tunable, either runtime or during kernel
     compilation (FEEDER_RATE_PRESETS).
   * Quality can be further customized during kernel compilation by
     defining FEEDER_RATE_PRESETS in /etc/make.conf. At its simplest form,
     defining FEEDER_RATE_PRESETS="8 16 32 64 128" will create resampler
     that will filtered through 8, 16, 32, 64 or 128 taps FIR.
   * FEEDER_RATE_PRESETS
     - "8 16 ..." simplest form, define taps per-filter.
     - "100:32 ..." stopband-attenuation:taps
     - "100:32:0.95 .." stopband-attenuation:taps:rolloff/bandwidth
     CAVEAT: Defining too many presets, or preset with large taps will
             bloat the kernel!
     - Default presets:
       "100:8 100:16 100:32:0.7929 100:64:0.8990 100:128:0.9499"
   Kernel sysctls:
     - hw.snd.feeder_rate_quality
       0 - Zero-order Hold (ZOH). Fastest, bad quality
       1 - Linear Interpolation (LINEAR). Slightly slower than ZOH, better
           quality but still does not eliminate aliasing.
       2 (and above) - Sinc Interpolation (SINC). Best quality.
       * SINC quality always start from 2 and above.
   * Rough quality comparisons:
        http://people.freebsd.org/~ariff/zresampler/z.jpg

3) Bit-perfect (not finished)
   - bla bla to hell with whatever "COOKED" craps..
   ....

4) EQ (not finished)
   - bla bla room/acoustic correction for naive and unfortunates souls
     with damn cheap system
   ....