aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLoek Le Blansch <loek@pipeframe.xyz>2024-09-18 16:52:40 +0200
committerLoek Le Blansch <loek@pipeframe.xyz>2024-09-18 16:52:40 +0200
commitc37f21e48f17abe9fb6bf1549f680e6f730aed8c (patch)
tree44233683bff95f98dbf9fee908bd8e3a6c8aab09
parent6b3fa9ceaf539b1bdcddf6284326a67c127d93a4 (diff)
WIP research
-rw-r--r--projdoc.cls3
-rw-r--r--reqs.toml16
-rw-r--r--research.tex34
-rwxr-xr-xscripts/reqs2tex.py3
-rw-r--r--sources.bib77
5 files changed, 92 insertions, 41 deletions
diff --git a/projdoc.cls b/projdoc.cls
index fccf8c1..05e401c 100644
--- a/projdoc.cls
+++ b/projdoc.cls
@@ -389,3 +389,6 @@
}
\makeatother
+% missing reference marker
+\def\mref{\textsuperscript{\textit{\,ref?}}}
+
diff --git a/reqs.toml b/reqs.toml
index 6645ea4..2da91ac 100644
--- a/reqs.toml
+++ b/reqs.toml
@@ -67,7 +67,9 @@ The public audio \gls{api} allows the game programmer to control the volume of
audio samples.
'''
-[aux.license]
+# TODO: audio encoding support?
+
+[lib.license]
type = 'system'
priority = 'must'
description = '''
@@ -75,3 +77,15 @@ External libraries must have a license that is MIT-compatible, or one that
allows linking against MIT code.
'''
+[lib.platform]
+type = 'system'
+priority = 'must'
+description = '''
+External libraries must have cross-platform support for at least Linux and
+Windows.
+'''
+
+# TODO: library popularity as quality factor?
+# TODO: library documentation as quality factor?
+# TODO: modularity over less libraries? (i.e. why don't we just SDL2 everything?)
+
diff --git a/research.tex b/research.tex
index ad33d10..abfde3b 100644
--- a/research.tex
+++ b/research.tex
@@ -201,44 +201,38 @@ for audio some options could be: FMOD, Wwise, or iirKlang
\subsection{Conclusion}
-% TODO: this entire section
\section{Audio}
-% should audio research be scoped down to SDL2 (if that's what we're going with) or
-% standalone libraries only (for modularity?).
-
-The game engine is required to have an audio system with support for playing multiple
-audio streams (i.e.~tracks or samples) simultaniously. Since writing a custom live
-audio mixing engine is outside the scope of this project, this section compares
+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 engines that could be used in the engine.
-% TODO: requirements first!
+\subsection{Libraries}
+
+\Cref{tab:audio-engines} compares several standalone audio engine libraries that fit
+\cref{req:audio,req:lib:license}.
-% REQ ~ is cross-platform
-% REQ ~ supports multiple audio formats (TODO: which)
-% REQ ~ supports simultanious playback / mixing
-% REQ ~ has an open-source license
\begin{table}
\centering
\begin{tabular}{llc}
\toprule
\textbf{Library} & \textbf{License} & \textbf{API}\\
\midrule
- miniaudio & MIT-0 & C\\
- YSE & EPL & C++\\
- SoLoud & Zlip/LibPng & C++\\
+ miniaudio \autocite{lib:miniaudio} & MIT-0 & C\\
+ YSE \autocite{lib:yse} & EPL & C++\\
+ SoLoud \autocite{lib:soloud} & Zlip/LibPng & C++\\
\bottomrule
\end{tabular}
\caption{Audio engine library comparison}
\label{tab:audio-engines}
\end{table}
-% TODO: ref https://miniaud.io/
-% TODO: ref https://www.attr-x.net/yse/
-Not considered further:
+Other popular libraries that were researched but are unsuitable for this project
+include:\noparbreak
\begin{description}
- \item[FMOD] is proprietary
- \item[PortAudio] requires manual mixing
+ \item[FMOD \autocite{lib:fmod}] Is proprietary (violates \cref{req:lib:license})
+ \item[PortAudio \autocite{lib:portaudio}] Does not handle mixing
\end{description}
\section{Physics}
diff --git a/scripts/reqs2tex.py b/scripts/reqs2tex.py
index e5f063d..6984466 100755
--- a/scripts/reqs2tex.py
+++ b/scripts/reqs2tex.py
@@ -94,6 +94,9 @@ def convert(data):
# skip deleted requirements (but process for make_id)
reqs = [item for item in reqs if item[KEY.DELETED] == False]
+ # sort by label
+ reqs = sorted(reqs, key=lambda item: item[KEY.LABEL])
+
return reqs
def fmt_aux(data):
diff --git a/sources.bib b/sources.bib
index 50f5ead..6f5ce0c 100644
--- a/sources.bib
+++ b/sources.bib
@@ -13,38 +13,75 @@
}
@misc{miro:scrum-board,
- author = {Loek Le Blansch and Wouter Boerenkamps and Jaro Rutjes and Max Smits and Niels Stunnebrink},
- title = {Scrum Board on Miro},
- url = {https://miro.com/app/board/uXjVKjtdM64=/?share_link_id=303851465474},
- date = {2024-09-10},
+ author = {Loek Le Blansch and Wouter Boerenkamps and Jaro Rutjes and Max Smits and Niels Stunnebrink},
+ title = {Scrum Board on Miro},
+ url = {https://miro.com/app/board/uXjVKjtdM64=/?share_link_id=303851465474},
+ date = {2024-09-10},
}
@misc{crepe:code-repo,
- author = {Loek Le Blansch and Wouter Boerenkamps and Jaro Rutjes and Max Smits and Niels Stunnebrink},
- title = {Crepe Code Repository},
- url = {https://github.com/lonkaars/crepe},
- date = {2024-09-10},
+ author = {Loek Le Blansch and Wouter Boerenkamps and Jaro Rutjes and Max Smits and Niels Stunnebrink},
+ title = {Crepe Code Repository},
+ url = {https://github.com/lonkaars/crepe},
+ date = {2024-09-10},
}
@misc{crepe:docs-repo,
- author = {Loek Le Blansch and Wouter Boerenkamps and Jaro Rutjes and Max Smits and Niels Stunnebrink},
- title = {Crepe Documentation Repository},
- url = {https://github.com/lonkaars},
- date = {2024-09-10},
+ author = {Loek Le Blansch and Wouter Boerenkamps and Jaro Rutjes and Max Smits and Niels Stunnebrink},
+ title = {Crepe Documentation Repository},
+ url = {https://github.com/lonkaars},
+ date = {2024-09-10},
}
@misc{crepe:docs-standard,
- author = {Loek Le Blansch and Wouter Boerenkamps and Jaro Rutjes and Max Smits and Niels Stunnebrink},
- title = {Crepe Documentation Standard},
- url = {https://github.com/lonkaars/crepe-docs/blob/master/contributing.md},
- date = {2024-09-10},
+ author = {Loek Le Blansch and Wouter Boerenkamps and Jaro Rutjes and Max Smits and Niels Stunnebrink},
+ title = {Crepe Documentation Standard},
+ url = {https://github.com/lonkaars/crepe-docs/blob/master/contributing.md},
+ date = {2024-09-10},
}
@misc{crepe:code-standard,
- author = {Loek Le Blansch and Wouter Boerenkamps and Jaro Rutjes and Max Smits and Niels Stunnebrink},
- title = {Crepe Code Standard},
- url = {https://github.com/lonkaars/crepe/blob/master/contributing.md},
- date = {2024-09-10},
+ author = {Loek Le Blansch and Wouter Boerenkamps and Jaro Rutjes and Max Smits and Niels Stunnebrink},
+ title = {Crepe Code Standard},
+ url = {https://github.com/lonkaars/crepe/blob/master/contributing.md},
+ date = {2024-09-10},
}
+@report{crepe:requirements,
+ author = {Loek Le Blansch and Wouter Boerenkamps and Jaro Rutjes and Max Smits and Niels Stunnebrink},
+ title = {Requirements},
+ date = {2024-09-18},
+}
+
+@online{lib:miniaudio,
+ title = {miniaudio - A single file audio playback and capture library.},
+ % author = {David Reid},
+ url = {https://miniaud.io},
+ urldate = {2024-09-18},
+}
+
+@online{lib:yse,
+ title = {YSE - cross-platform sound engine},
+ url = {https://www.attr-x.net/yse},
+ urldate = {2024-09-18},
+}
+
+@online{lib:soloud,
+ title = {SoLoud},
+ % author = {Jari Komppa},
+ url = {https://solhsa.com/soloud},
+ urldate = {2024-09-18},
+}
+
+@online{lib:fmod,
+ title = {FMOD},
+ url = {https://www.fmod.com},
+ urldate = {2024-09-18},
+}
+
+@online{lib:portaudio,
+ title = {PortAudio - an Open-Source Cross-Platform Audio API},
+ url = {https://www.portaudio.com},
+ urldate = {2024-09-18},
+}