capo-lite v2.1.0
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/stream.hpp>
5#include <capo/vec3.hpp>
6#include <chrono>
7#include <memory>
8
9namespace capo {
14class ISource : public Polymorphic {
15 public:
17 [[nodiscard]] virtual auto is_bound() const -> bool = 0;
18 auto bind_to(std::nullptr_t) = delete;
23 virtual auto bind_to(Buffer const* buffer) -> bool = 0;
27 virtual auto bind_to(std::shared_ptr<Buffer const> buffer) -> bool = 0;
32 virtual auto bind_to(IStream* custom_stream) -> bool = 0;
36 virtual auto bind_to(std::shared_ptr<IStream> custom_stream) -> bool = 0;
41 virtual auto open_file_stream(char const* path) -> bool = 0;
43 virtual void unbind() = 0;
44
45 [[nodiscard]] virtual auto is_playing() const -> bool = 0;
46 virtual void play() = 0;
47 virtual void stop() = 0;
48
51 [[nodiscard]] virtual auto at_end() const -> bool = 0;
54 [[nodiscard]] virtual auto can_wait_until_ended() const -> bool = 0;
58 virtual void wait_until_ended() = 0;
59
62 [[nodiscard]] virtual auto get_duration() const -> std::chrono::duration<float> = 0;
65 [[nodiscard]] virtual auto get_cursor() const -> std::chrono::duration<float> = 0;
67 virtual auto set_cursor(std::chrono::duration<float> position) -> bool = 0;
68
71 [[nodiscard]] virtual auto is_spatialized() const -> bool = 0;
74 virtual auto set_spatialized(bool spatialized) -> bool = 0;
75
80 virtual auto set_fade_in(std::chrono::duration<float> duration, float gain = -1.0f) -> bool = 0;
84 virtual auto set_fade_out(std::chrono::duration<float> duration) -> bool = 0;
85
86 [[nodiscard]] virtual auto is_looping() const -> bool = 0;
87 virtual void set_looping(bool looping) = 0;
88
89 [[nodiscard]] virtual auto get_gain() const -> float = 0;
90 virtual void set_gain(float gain) = 0;
91
92 [[nodiscard]] virtual auto get_position() const -> Vec3f = 0;
93 virtual void set_position(Vec3f const& pos) = 0;
94
95 [[nodiscard]] virtual auto get_pan() const -> float = 0;
96 virtual void set_pan(float pan) = 0;
97
98 [[nodiscard]] virtual auto get_pitch() const -> float = 0;
99 virtual void set_pitch(float pitch) = 0;
100};
101} // namespace capo
Audio Buffer: stores decoded PCM data in memory.
Definition buffer.hpp:13
Audio Source. API for audio playback. Open file for streaming or bind to existing Audio Buffer....
Definition source.hpp:14
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 auto open_file_stream(char const *path) -> bool=0
Open file stream and bind to it. The same encodings are supported as with capo::Buffer.
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 stream if bound.
Interface for custom audio stream (data source). Supports streaming data of indefinite length....
Definition stream.hpp:12
Base class for polymorphic types.
Definition polymorphic.hpp:5
Definition buffer.hpp:8
3D spatial vector.
Definition vec3.hpp:5