capo-lite v2.0.1
Simple audio playback library
 
Loading...
Searching...
No Matches
source.hpp
Go to the documentation of this file.
1#pragma once
2#include <capo/buffer.hpp>
4#include <capo/vec3.hpp>
5#include <chrono>
6#include <memory>
7
8namespace capo {
13class ISource : public Polymorphic {
14 public:
16 [[nodiscard]] virtual auto is_bound() const -> bool = 0;
17 auto bind_to(std::nullptr_t) = delete;
22 virtual auto bind_to(Buffer const* buffer) -> bool = 0;
26 virtual auto bind_to(std::shared_ptr<Buffer const> buffer) -> bool = 0;
30 virtual auto open_stream(char const* path) -> bool = 0;
32 virtual void unbind() = 0;
33
34 [[nodiscard]] virtual auto is_playing() const -> bool = 0;
35 virtual void play() = 0;
36 virtual void stop() = 0;
37
40 [[nodiscard]] virtual auto at_end() const -> bool = 0;
43 [[nodiscard]] virtual auto can_wait_until_ended() const -> bool = 0;
47 virtual void wait_until_ended() = 0;
48
51 [[nodiscard]] virtual auto get_duration() const -> std::chrono::duration<float> = 0;
54 [[nodiscard]] virtual auto get_cursor() const -> std::chrono::duration<float> = 0;
56 virtual auto set_cursor(std::chrono::duration<float> position) -> bool = 0;
57
60 [[nodiscard]] virtual auto is_spatialized() const -> bool = 0;
63 virtual auto set_spatialized(bool spatialized) -> bool = 0;
64
69 virtual auto set_fade_in(std::chrono::duration<float> duration, float gain = -1.0f) -> bool = 0;
73 virtual auto set_fade_out(std::chrono::duration<float> duration) -> bool = 0;
74
75 [[nodiscard]] virtual auto is_looping() const -> bool = 0;
76 virtual void set_looping(bool looping) = 0;
77
78 [[nodiscard]] virtual auto get_gain() const -> float = 0;
79 virtual void set_gain(float gain) = 0;
80
81 [[nodiscard]] virtual auto get_position() const -> Vec3f = 0;
82 virtual void set_position(Vec3f const& pos) = 0;
83
84 [[nodiscard]] virtual auto get_pan() const -> float = 0;
85 virtual void set_pan(float pan) = 0;
86
87 [[nodiscard]] virtual auto get_pitch() const -> float = 0;
88 virtual void set_pitch(float pitch) = 0;
89};
90} // namespace capo
Audio Buffer: stores decoded PCM data in memory.
Definition buffer.hpp:12
Audio Source. API for audio playback. Open file for streaming or bind to existing Audio Buffer....
Definition source.hpp:13
virtual auto open_stream(char const *path) -> bool=0
Open file stream and bind to it.
virtual auto set_spatialized(bool spatialized) -> bool=0
Toggle spatialization.
virtual auto is_spatialized() const -> bool=0
Check if spatialization is enabled.
virtual auto set_fade_out(std::chrono::duration< float > duration) -> bool=0
Set fade out parameters. Target gain is implicitly 0.
virtual void set_looping(bool looping)=0
virtual auto get_duration() const -> std::chrono::duration< float >=0
Get duration of source.
virtual void play()=0
virtual void set_pitch(float pitch)=0
virtual auto get_pitch() const -> float=0
virtual void set_pan(float pan)=0
virtual auto set_cursor(std::chrono::duration< float > position) -> bool=0
Set position of playback cursor.
virtual void wait_until_ended()=0
Block until source is at end. The calling thread is blocked via atomic wait/notify (not spinlocking)....
virtual auto is_looping() const -> bool=0
virtual void set_gain(float gain)=0
virtual auto can_wait_until_ended() const -> bool=0
Check if feasible to block until source is at end.
virtual auto is_bound() const -> bool=0
Check if source is bound to a stream or buffer.
virtual auto get_pan() const -> float=0
virtual void set_position(Vec3f const &pos)=0
virtual void stop()=0
virtual auto is_playing() const -> bool=0
virtual auto get_cursor() const -> std::chrono::duration< float >=0
Get position of playback cursor.
virtual auto get_gain() const -> float=0
virtual auto get_position() const -> Vec3f=0
virtual auto set_fade_in(std::chrono::duration< float > duration, float gain=-1.0f) -> bool=0
Set fade in parameters.
auto bind_to(std::nullptr_t)=delete
virtual auto at_end() const -> bool=0
Check if source is at end.
virtual void unbind()=0
Detach buffer or file stream if bound.
Base class for polymorphic types.
Definition polymorphic.hpp:5
Definition buffer.hpp:7
3D spatial vector.
Definition vec3.hpp:5