Skip to content

🚧 Working on V2 #14

Description

@mrparmesan01

Goals for getting audio-cpp V2 are to move from experimental changes to officially documenting the audio-cpp APIs.

This involves basic device management and enumeration operations. Making sure the only dependency for this project is miniaudio.

These are changes for v2:

  • audio::context
  • audio::device
  • audio::sound
  • audio::listener
  • audio::engine

Brief Details

audio::context

  • Primarily for enumerating audio devices (playback and capture)
  • Configuration for audio device priorities
  • Setting systemwide thread priorities

audio::device

  • Primarily for streaming data to either playback/capture devices.
  • Can be configured as playback, capture, or full duplex devices.
  • Configuring resampling in gigahertz.

audio::sound

  • Primarily to represent 3D sound sources.
  • Streaming audio files as a kind of audio::sound.
  • External API's for playback, spatialization, and other operations to perform on the sound.
  • Has API's for dynamic configuration for real-time audio.

audio::listener

  • Represent locations of your sound in a 3D world.
  • Can set the position/direction of where your sounds are located.
  • Works with audio::sound to perform panning and attenuation on multiple sound sources.

audio::engine

  • Used to manage resources (ref-counting, etc).
  • Manage multiple listeners through indices to specify which listener to retrieve.
  • Tracks both audio::listener and audio::sound resources.
  • Provide API's to provide routines to execute multiple sub-mixes of audio sources altogether.

At Completion -- Expected Behavior

Once this task is completed. This would mean that we have enough capabilities to manage not just multiple listeners. Rather, we could also successfully perform base audio operations.

Whether this is playing multiple sounds, we would be able to integrate into TheAtlasEngine to manage where sounds could be located.

Should be able to create multiple listeners on multiple threads that play different sounds and signal each other when one of the sounds is finished. To indicate a transitioning period.

[listener1] -> play sound1.wav (thread 1
[listener2] -> play sound2.wav (thread 2)

--- workflow ---

[ Listener 1 ]
      |
      v
 [ Play Sound 1 ]
      |
      v
 [ Stop/Signal ] --------------------
      |                             |
      v                             v
 [ Listener 2 ] --> [ Pause Listener 1 ]
      |
      v
 [ Play Sound 2 ]
      |
      v
 [ sound2.wav ]

Metadata

Metadata

Assignees

No one assigned

    Labels

    💳 Tech Debt📐designTasks that involve the core systems. Highly involve in API design.

    Type

    No type

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions