36 lines
1.4 KiB
Markdown
36 lines
1.4 KiB
Markdown
**iolib**
|
|
==========
|
|
Classes for playing audio data.
|
|
|
|
## Abstract
|
|
(Oboe) **iolib** contains classes implementing streaming audio playback and mixing from multiple sources. It's purpose is to demonstrate best practices and provide reusable code.
|
|
|
|
Note: the more general name of "iolib" was chosen since it is presumed that this project will eventually implement audio capture capability.
|
|
|
|
**iolib** is written in C++ and is intended to be called from Android native code. It is implemented as a static library.
|
|
|
|
# **iolib** project structure
|
|
* player
|
|
Contains classes to support streaming playback from (potentially) multiple audio sources.
|
|
|
|
## player classes
|
|
### DataSource
|
|
Declares the basic interface for audio data sources.
|
|
|
|
### SampleSource
|
|
Extends the `DataSource` interface for audio data coming from SampleBuffer objects.
|
|
|
|
### OneShotSampleSource
|
|
Extends `SampleSource` to provide data that plays through it's `SampleBuffer` and then provides silence, (i.e. a non-looping sample)
|
|
|
|
### SampleBuffer
|
|
Loads and holds (in memory) audio sample data and provides read-only access to that data.
|
|
|
|
### SimpleMultiPlayer
|
|
Implements an Oboe audio stream into which it mixes audio from some number of `SampleSource`s.
|
|
|
|
This class demonstrates:
|
|
* Creation and lifetime management of an Oboe audio stream (`ManagedStream`)
|
|
* Logic for an Oboe `AudioStreamCallback` interface.
|
|
* Logic for handling streaming restart on error (i.e. playback device changes)
|