% AudioSignalProcessing-HA.tex
\begin{hcarentry}[updated]{Audio Signal Processing}
\label{audiosp}
\report{Henning Thielemann}%11/11
\status{experimental, active development}
\makeheader

This project covers many aspects of audio signal processing in Haskell.
It is based on the Numeric Prelude framework
(\url{http://haskell.org/communities/05-2009/html/report.html#sect5.6.2}).
Over the time the project has grown to a set of several packages:
\begin{compactitem}
\item \texttt{synthesizer-core}:
Raw implementations
of oscillators, noise generation, frequency filters, resampling,
pitch and time manipulation, Fourier transformation.
Support for several data structures
like lists, signal generators, storable vectors
and causal signal processing arrows
that allow you to balance between efficiency and flexibility.
\item \texttt{synthesizer-dimensional}:
Type-safe physical units in signal processing
and abstraction from sample rate.
\item \texttt{synthesizer-midi}:
Render audio streams from sequences of MIDI events.
\item \texttt{synthesizer-alsa}:
Everything that is needed for a real-time software synthesizer
within the Advanced Linux Sound Architecture ALSA.
\item \texttt{synthesizer-llvm}:
Highly efficient signal processing
by Just-In-Time compilation and vectorization
through the Low-Level Virtual Machine (\url{http://llvm.org/}),
including a real-time software synthesizer.
% \item \texttt{synthesizer-filter}: frozen
% \item \texttt{synthesizer-inference}: frozen
% \item \texttt{synthesizer-fusionlist}: frozen
% \item \texttt{synthesizer-harpy}: frozen
\item \texttt{sample-frame}, \texttt{sample-frame-np}:
Type classes shared between the packages
for various sample formats
(integer, float, logarithmic encoding, stereo).
\item \texttt{alsa-core}, \texttt{alsa-pcm}, \texttt{alsa-seq}, \texttt{jack}:
Bindings to audio input and output via ALSA and JACK.
\item \texttt{sox}, \texttt{soxlib}:
Reading and writing many audio file formats and play sounds
via \texttt{sox} shell command
or \texttt{libsox} binary interface.
% \item \texttt{storablevector}, \texttt{llvm-extra}:
% \item \texttt{morbus-meniere}, \texttt{split-record}:
% \item \texttt{midi}, \texttt{midi-alsa}:
% \item \texttt{reactive-balsa}, \texttt{alsa-gui}, \texttt{midimory}:
\end{compactitem}

\noindent
Recent advances are:
\begin{compactitem}
\item Extended and safer bindings to ALSA PCM and ALSA MIDI sequencer.
% \item New bindings to \texttt{libsox}
%  for reading and writing many audio file formats.
\item MIDI, ALSA and LLVM code is now cleanly separated.
\item Example program \texttt{split-record}
that divides an audio file according to pauses.
\end{compactitem}

\FurtherReading
\begin{compactitem}
\item \url{http://www.haskell.org/haskellwiki/Synthesizer}
\end{compactitem}
\end{hcarentry}
