shithub: sox

ref: 100706dd3b9ddc73fc46fc3da414d50a17a11f83
dir: /TODO/

View raw version
People are encouraged to pick some of these and implement it.  Send
all patches to cbagwell@users.sourceforge.net.

  o Document how to play to audio device in man pages.

  o Fix comment memory leaks and other issues.

  o Use valgrind and fix reported errors.

  o Have sox.c auto remove an resample effects when rates are the same
    (allows scripts to be dumper).

  o Add MP3 support to WAV handler. Can copy most work from mp3.c.

  o Allow to trim beginning of audio file using file handler's
    seek() function to speed up operation.  Not sure if
    it should be done with command line option or intercepting
    the "trim" effect.

  o Document how the synth effect is meant to be used (with nul file
    handler).

  o Fixe warnings generated by gcc's -W option (not -Wall).

  o Implement FLAC (http://flac.sf.net) and speex (http://www.speex.org).
  
  o Support 24-bit formats... Difficult because sometimes that means
    24-bits in a 32-bit integer and sometimes it means packed 24-bits
    (read 3-bytes at a time).

  o Modify .dat handler to support stereo data... Probably should remove
    time offset column since its not real useful (could be added by
    a simple post-processor).  Also, should store information in
    header related to original data so that it can be converted back
    to similar percision easier.  Another idea is to normalize the
    data relative to original percision to reduce value ranges
    (might result in a smaller text file since percision will
    be smaller).

  o Detect support for -D_FILE_OFFSET_BITS=64 and -D_LARGEFILE_SOURCE
    and auto add to CFLAGS so that large files can be accessed.

  o Don't force -no-cygwin under cygwin since it now contains
    support for /dev/dsp. Some people might want to use that
    to play audio files under windows.

  o Add command line options that specify a specific endian
    (as apposed to -x which just reverses it from current
    machines endian).  This would be useful for cdr.c
    since some formats like to keep the data in little-endien
    (CDDA?).

  o Add alias -1 (for -b), -2 (for -w), -4 (for -d).

  o Add a fifo/buffer to audio drivers to prevent losing audio data.
    Perhaps mpg123 could be used as an example.

  o Add new PRC format in to auto.c

  o Still passing some options using CFLAGS instead of stconfig.h.

  o Lots of effects are using "double" to prevent overflow of
    st_sample_t math.  With ststdint.h we now have a portable way
    of detecting uint64_t...  Use that when possible to speed up
    math (won't have to convert back and forth from int to float).

  o Several files are using hard-coded #'s instead of ST_SAMPLE_MIN/MAX.
    Change these.

  o Make a global version of MIN/MAX instead of sprinkled min/max/MIN/MAX

  o Make a global version of clip() instead of sprinked in all files.

  o Add support to all file handlers to handle 32-bit and float
    data types since raw functions can handle them.

  o All comment code has a memory leak.  They must malloc memory to
    store comment but its never free()'d.

  o Comment strings.  Some file formats have space for embedded comments.
    These are currently thrown away.  Printing them out, carrying them
    forward, and an option to add new ones would be handy.

  o Add support for .TXT format as Cooledit supports.  Not really fit for
    graphing since it is only a stream of ascii sample values but some
    program appear to like it.  Also has a much nicer header.
    http://lab.chass.utoronto.ca/damion/audio/coolwav.htm

  o Keep sox from using "fail" on errors.  Sox was supposed to be
    a sound library called "ST" but libraries shouldn't exit a program,
    they should return error codes for users to handle.  Initial support
    for this has been added.  Needs to be completed.

  o Enhance general robustness... For instance, malloc is called in
    lots of places without checking its return value.  See last option
    as well.

SOX includes skeleton format files to assist you in supporting new 
formats, sound effect loops, and special-purpose programs.
The full skeleton format, skel.c, helps you write a driver 
for a new format which has data structures.  Skeleff.c is
a starting point for writing a sound effect loop.  Sox.c is
a good starting point for new programs.  (Someone finally
did this and told me what was wrong...)

In handlers.c, note that many formats set up the header and then
use the raw driver for reading and writing.