highly efficient sound library for the Gameboy Advance

Overview

Apex Audio System

The Apex Audio System (AAS) is a sound library for the GBA. It includes a highly efficient mixer, MOD playing routines and support for up to 16 channels. It is designed for developers using a GCC-based development environment. AAS uses RAW, WAV or *tracker 1-16 channel MOD files as input.

Documentation

AAS is fairly well documented. From building the library to a starter guide to an extensive description of the api. See /docs/index.html

History

Apex Audio System was made by James Daniels of Apex Systems back in 2003 for the GBA version of Payback. The library underwent several revisions, the latest of which was v1.11. At the beginning of 2021, James was so kind to donate the sources to the community, hence this Git repo.

Latest release

The current release is v1.12. See the documentation for a list of changes.

Contact

Github project page: https://github.com/stuij/apex-audio-system

Pull requests are welcome, as are forks of course. If you want to report issues, open an issue on the Github project issue tracker.

For a more realtime interactive experience, join gbadev on Discord. There's a good chance there's one or two people there that have used AAS before.

License

AAS is now distributed under the MIT license. For licensing terms, see the LICENSE file in the root of this repo or go to http://opensource.org/licenses/MIT

James only had one request when handing over the sources: that users of the library include a credit to Apex Designs. In essence this is now covered by the MIT license. It's up to you how you want to fill this in, but please be respectful of this requirement.

You might also like...
A simple C++ library for reading and writing audio files.

AudioFile A simple header-only C++ library for reading and writing audio files. Current supported formats: WAV AIFF Author AudioFile is written and ma

C library for cross-platform real-time audio input and output

libsoundio C library providing cross-platform audio input and output. The API is suitable for real-time software such as digital audio workstations as

C++ Audio and Music DSP Library

_____ _____ ___ __ _ _____ __ __ __ ____ ____ / \\_ \\ \/ / |/ \| | | | \_ \/ \ | Y Y \/ /_ \ | | Y Y \ | |_|

Single file audio playback and capture library written in C.
Single file audio playback and capture library written in C.

A single file library for audio playback and capture. Example - Documentation - Supported Platforms - Backends - Major Features - Building - Unofficia

Minimalistic MP3 decoder single header library

minimp3 Minimalistic, single-header library for decoding MP3. minimp3 is designed to be small, fast (with SSE and NEON support), and accurate (ISO con

🎵 Music notation engraving library for MEI with MusicXML and Humdrum support and various toolkits (JavaScript, Python)
🎵 Music notation engraving library for MEI with MusicXML and Humdrum support and various toolkits (JavaScript, Python)

Verovio is a fast, portable and lightweight library for engraving Music Encoding Initiative (MEI) digital scores into SVG images. Verovio also contain

A lightweight music DSP library.

Soundpipe Soundpipe is a lightweight music DSP library written in C. It aims to provide a set of high-quality DSP modules for composers, sound designe

PortAudio is a portable audio I/O library designed for cross-platform support of audio

PortAudio is a cross-platform, open-source C language library for real-time audio input and output.

LibMEI is a C++ library for reading and writing MEI files

C++ library and Python bindings for the Music Encoding Initiative format

Comments
  • example wav file doesn't produce sound

    example wav file doesn't produce sound

    The examples use the Ambulance.wav file to test SFX. But when playing it in the produced .gba file you can only hear a faint click at the beginning of the file.

    When playing the file on my PC, it sounds fine, and the output of soxi shows it's in the right format:

    $ soxi Ambulance.wav
    
    Input File     : 'Ambulance.wav'
    Channels       : 1
    Sample Rate    : 16000
    Precision      : 8-bit
    Duration       : 00:00:00.97 = 15564 samples ~ 72.9562 CDDA sectors
    File Size      : 15.6k
    Bit Rate       : 128k
    Sample Encoding: 8-bit Unsigned Integer PCM
    

    So we need to do some investigation on what is going on here.

    When converting to signed raw, the file plays fine in a GBA: ffmpeg -i Ambulance.wav -f s8 -ar 16000 -acodec pcm_s8 AAS_Data/Ambulance.raw

    I haven't tested this yet, but I'm betting this is a problem with all WAV files. This is happening both on Linux and Windows.

    opened by stuij 1
Releases(v1.13)
  • v1.13(Jul 28, 2021)

    The biggest reason for this release is that there was a major bug in the original code where converting wav files (converting raw files worked fine) to the AAS internal format would cause a single value to be used for all the samples.

    Besides that, the other major change is that the examples now use libtonc for interrupt handling, which makes the examples much more clear and makes the examples much more idiomatic of how AAS will normally be used in GBA projects.

    Releases from now on will include the source. The library, conv2aas and example binaries are now found in the build subdirectory. The directory will be deleted when you run make clean, and the artifacts in build will be overwritten when you run make.

    The last thing to mention is that the top level Makefile now includes an extra variable to configure: $TOOLS. This variable should point to the directory which contains gbafix, which is not included in AAS. In devkitPro this would be the tools/bin subdirectory.

    full list of the changes in v1.13:

    • fixed bug in conv2aas which broke converting wav files to the internal format
    • because of above fix, playing the ambulance wav sound in the examples will now work correctly
    • modernized and simplified interrupt handling code in examples by basing them on libtonc interrupt routines
    • added $TOOLS var at top of top-level Makefile to resolve GBA tools folder to find gbafix
    • minor cleanup of licensing messages
    • updated documentation
    • the release package now also includes the source
    • in the release package moved library code+headers, example GBA binaries and conv2aas for both Linux and Windows to the build folder
    • cleaned up code a bit to squash error messages, make the code more readable and to fix obvious issues
    Source code(tar.gz)
    Source code(zip)
    apex-audio-system-v1.13.zip(998.76 KB)
  • v1.12(Jan 15, 2021)

    This is the first release of apex-audio-system in about 15 years, thanks to Apex Designs who have gracefully gifted the sources to the community. Hopefully you'll have some use for it.

    Changes since v1.11:

    • AAS is now open source under a MIT license and is hosted on Github
    • code was updated to work with current devkitPro
    • examples and code are driven by toplevel makefile
    • when building from source, library and example roms are to be found under ‹root›/build
    • updated documentation
    Source code(tar.gz)
    Source code(zip)
    apex-audio-system-v1.12.zip(504.41 KB)
Owner
Ties Stuij
Ties Stuij
The latest and greatest version of my Gameboy Audio Player program!

GBAudioPlayerV3 Version 3.0 of the incredible Gameboy Audio Player, rebuilt from the ground up in C as a command line program, along with heavily impr

null 9 Oct 2, 2022
A C library for reading and writing sound files containing sampled audio data.

libsndfile libsndfile is a C library for reading and writing files containing sampled audio data. Authors The libsndfile project was originally develo

null 1.1k Jan 2, 2023
SSMLSDL - Simple Sound Manipulation Library, Based on SDL and LIBWAV.

SSM-lib SSMLSDL - Simple Sound Manipulation Library, Based on SDL and LIBWAV. This library is open source and free software. It's aims to provide YOU,

UtoECat 1 Jan 20, 2022
Scream - Virtual network sound card for Microsoft Windows

Scream is a virtual device driver for Windows that provides a discrete sound device. Audio played through this device is published on your local network as a PCM multicast stream.

Tom Kistner 1.5k Jan 6, 2023
Automatic Volume Adjuster for TVs and Sound Systems

Automatic Volume Adjuster Recently Great Scott built his version of an automatic volume adjuster. In this project he solved one of the biggest problem

Stefan Wagner 23 Dec 30, 2022
straightforward CLI tool for spectral analysis of sound files

dowser dowser is (presently) a quick and simple low-level utility for performing spectral analysis of sound files. usage dowser

ezra buchla 14 Oct 26, 2022
Open source digital sound effects based on JACK audio connection kit.

Noiseworks Digital Audio Effects Repository Open source digital sound effects based on JACK audio connection kit. This repository is intended to provi

null 5 Jul 29, 2022
OBS Plugin with image that reacts to sound source.

OBS Image Reaction Plugin Image that reacts to sound source. Installing binaries Download binaries from Releases. For Windows, Move the contents of pl

null 39 Jan 4, 2023
A tiny, header only, easy to use, cross-platform, portaudio wrapper, sound and notation manager, tailored for the demo scene.

TDAW A tiny, header only, easy to use, cross-platform, portaudio wrapper, sound and notation manager, tailored for the demo scene. This header enables

kbx 13 Dec 2, 2022
Easy and efficient audio synthesis in C++

Tonic Fast and easy audio synthesis in C++. Prefer coding to patching? Love clean syntax? Care about performance? That's how we feel too, and why we m

null 482 Dec 26, 2022