MOS
stream.hpp
1 #pragma once
2 
3 #include <array>
4 #include <atomic>
5 #include <memory>
6 #include <stb_vorbis.h>
7 #include <string>
8 
9 #include <mos/core/id.hpp>
10 
11 namespace mos::aud {
12 
13 class Stream;
14 using Shared_stream = std::shared_ptr<Stream>;
15 
17 class Stream final {
18 public:
19  explicit Stream(const std::string &path);
20  ~Stream();
21  Stream(const Stream &stream) = default;
22  Stream(Stream &&stream) = default;
23  Stream &operator=(const Stream &stream) = default;
24  Stream &operator=(Stream &&stream) = default;
25 
26  static const int buffer_size = 4096 * 8;
27 
29  auto read() -> std::array<short, buffer_size>;
30 
32  auto done() const -> bool;
33 
35  auto sample_rate() const -> unsigned int;
36 
38  auto channels() const -> unsigned int;
39 
41  auto duration() const -> float;
42 
44  auto size() const -> size_t;
45 
47  auto seek_start() -> void;
48 
50  auto id() const -> unsigned int;
51 
52 private:
53  Id<Stream> id_;
54  unsigned int samples_left_;
55  std::string file_name_;
56  stb_vorbis *vorbis_stream_;
57  stb_vorbis_info vorbis_info_;
58 };
59 } // namespace mos::aud
auto read() -> std::array< short, buffer_size >
Read a chunk of data from the stream.
Definition: id.hpp:8
Audio streaming from *.ogg file.
Definition: stream.hpp:17
auto duration() const -> float
Duration in seconds.
auto id() const -> unsigned int
Unique id.
auto done() const -> bool
Check if stream reached the end.
auto seek_start() -> void
Restart streaming.
auto channels() const -> unsigned int
Get number of channels.
auto size() const -> size_t
Size of stream in samples.
auto sample_rate() const -> unsigned int
Sample rate, eg 44100.
Definition: filter.hpp:13