aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLoek Le Blansch <loek@pipeframe.xyz>2024-10-18 14:48:22 +0200
committerLoek Le Blansch <loek@pipeframe.xyz>2024-10-18 14:48:22 +0200
commiteb9e756b5f5435c0892e411576d5206b3f6f8f74 (patch)
tree08a01a6c2911beeba46f3463c8905c931eb160d9
parent69f8fcfb593641174b3a83049ad4acc1abf1a102 (diff)
move audio research to audio design
-rw-r--r--design.tex42
-rw-r--r--research.tex45
2 files changed, 40 insertions, 47 deletions
diff --git a/design.tex b/design.tex
index a89303a..08ea7cc 100644
--- a/design.tex
+++ b/design.tex
@@ -122,9 +122,47 @@ contains the following classes:\noparbreak
\subsection{Audio}
-\subsubsection{Library}
+Since writing a custom real-time audio mixing engine is outside the scope of this
+project\mref and C++ does not provide a built-in cross-platform audio \gls{api}, the
+audio system inside the cr\^epe engine is implemented as a fa\c{c}ade around an
+existing audio library.
+
+\subsubsection{Libraries}
+\label{sec:audio:libs}
+
+This subsection compares various standalone audio libraries for suitability. After
+searching for libraries (search terms: `dynamic/adaptive audio', `real-time audio',
+`audio library', `game audio engine'), several libraries were found. These libraries
+were checked against the audio engine requirements \autocite{crepe:requirements} and
+then tested by writing the same benchmark-style \gls{poc} using the remaining
+qualifying libraries:\noparbreak
+\begin{enumerate}
+ \item Load a background track (Ogg Vorbis)
+ \item Load three short samples (WAV)
+ \item Start the background track
+ \item Play each sample sequentially while pausing and resuming the background track
+ \item Play all samples simultaniously
+ \item Stop all audio and exit
+\end{enumerate}
+
+Of these libraries the following were determined to be unsuitable for use in this
+project:\noparbreak
+\begin{description}
+ \item[FMOD \autocite{lib:fmod}] Is proprietary (violates \cref{req:lib:license}).
+ \item[PortAudio \autocite{lib:portaudio}] Does not handle mixing.
+ \item[miniaudio \autocite{lib:miniaudio}] Tested by implementing a \gls{poc}, but
+ dropped due to very limited codec support (WAV, MP3 and FLAC only); Also does not
+ have an \gls{api} reference (only programming manual).
+ \item[YSE \autocite{lib:yse}] Attempted to write \gls{poc}, but CMake configuration
+ in repository is broken; This project seems to have been abandoned.
+\end{description}
-\subsubsection{Fa\c{c}ade}
+The only library that remained after these tests is SoLoud \autocite{lib:soloud}. It
+is Zlib/LibPng licensed and provides a high-level object-oriented C++ \gls{api}.
+\Cref{sec:audio:architecture} describes the fa\c{c}ade written for this library.
+
+\subsubsection{Architecture}
+\label{sec:audio:architecture}
\Cref{fig:class-audio-facade} shows a class diagram of the audio fa\c{c}ade. It
contains the following classes:
diff --git a/research.tex b/research.tex
index 1b8a5ab..f39e6f6 100644
--- a/research.tex
+++ b/research.tex
@@ -427,51 +427,6 @@ licensing flexibility.
\subsection{Conclusion}
-\section{Audio}
-
-The game engine is required to have an audio system
-\autocite[\ref{req:audio}]{crepe:requirements}. Since writing a custom real-time
-audio mixing engine is outside the scope of this project\mref, this section compares
-various standalone audio libraries for suitability in the engine.
-
-\subsection{Libraries}
-\label{sec:audio:libs}
-
-After searching for libraries (search terms: `dynamic/adaptive audio', `real-time
-audio', `audio library', `game audio engine'), several libraries were found. These
-libraries were checked against the audio engine requirements
-\autocite{crepe:requirements} and then tested by writing the same benchmark-style
-\gls{poc} using the remaining qualifying libraries:\noparbreak
-\begin{enumerate}
- \item Load a background track (Ogg Vorbis)
- \item Load three short samples (WAV)
- \item Start the background track
- \item Play each sample sequentially while pausing and resuming the background track
- \item Play all samples simultaniously
- \item Stop all audio and exit
-\end{enumerate}
-
-Of these libraries the following were determined to be unsuitable for use in this
-project due to various reasons:\noparbreak
-\begin{description}
- \item[FMOD \autocite{lib:fmod}] Is proprietary (violates \cref{req:lib:license})
- \item[PortAudio \autocite{lib:portaudio}] Does not handle mixing
- \item[miniaudio \autocite{lib:miniaudio}] With finished \gls{poc}, but dropped due
- to very limited codec support (WAV, MP3 and FLAC only); Also does not have an
- \gls{api} reference (only programming manual)
- \item[YSE \autocite{lib:yse}] Attempted to write \gls{poc}, but CMake configuration
- in repository is broken; This project seems to have been abandoned
-\end{description}
-
-The only library that remained after these tests is SoLoud \autocite{lib:soloud}. It
-is Zlib/LibPng licensed and provides a high-level object-oriented C++ \gls{api}.
-
-\subsection{Conclusion}
-\label{sec:audio:conclusion}
-
-Due to a severe shortage of libraries that fit our requirements, SoLoud appears to be
-the most suitable (and only) audio library for use in this project.
-
\section{Physics}
\subsection{Introduction}