MGL(Win32)
読み取り中…
検索中…
一致する文字列を見つけられません
mgl_audio_stream_queue.h
[詳解]
1// SPDX-License-Identifier: Zlib
2/* ------------------------------------------------------------------------- */
9/* ------------------------------------------------------------------------- */
10
11#ifndef INCGUARD_MGL_AUDIO_STREAM_QUEUE_H_1611908441
12#define INCGUARD_MGL_AUDIO_STREAM_QUEUE_H_1611908441
13
14#include <condition_variable>
15#include <mutex>
16
18
19namespace MGL::Audio
20{
23{
24public:
27 {
29 uint32_t channelCount{0};
30 size_t dataSize{0};
31 QueueBuffer *next{nullptr};
32 bool isActive{false};
33 };
34
35 StreamQueue(size_t bufferSize, uint32_t bufferCount) noexcept;
36
37 void Reset() noexcept;
38
39 QueueBuffer *GetFreeBuffer() noexcept;
40 bool AddBuffer(QueueBuffer *queueBuffer) noexcept;
41 bool GetSample(float &frameDataL, float &frameDataR) noexcept;
42
43 void Wait() noexcept;
44
45 /* ------------------------------------------------------------------------- */
50 /* ------------------------------------------------------------------------- */
51 [[nodiscard]] constexpr size_t GetBufferSize() const noexcept
52 {
53 return _bufferSize;
54 }
55
56
57private:
59 QueueBuffer *_top{nullptr};
60 QueueBuffer *_tail{nullptr};
61
62 size_t _bufferSize;
63 uint32_t _bufferCount;
64 uint32_t _activeBufferCount{0};
65 uint32_t _currentFrameOffset{0};
66
67 std::mutex _mutex;
68 std::condition_variable _condition;
69};
70} // namespace MGL::Audio
71
72#endif // INCGUARD_MGL_AUDIO_STREAM_QUEUE_H_1611908441
73
74// vim: et ts=4 sw=4 sts=4
オーディオストリームキュークラス
Definition mgl_audio_stream_queue.h:23
constexpr size_t GetBufferSize() const noexcept
バッファサイズを取得
Definition mgl_audio_stream_queue.h:51
bool GetSample(float &frameDataL, float &frameDataR) noexcept
サンプルデータの取得
Definition mgl_audio_stream_queue.cc:127
QueueBuffer * GetFreeBuffer() noexcept
空いているバッファを取得
Definition mgl_audio_stream_queue.cc:63
void Wait() noexcept
キューが操作可能になるまで待つ
Definition mgl_audio_stream_queue.cc:182
bool AddBuffer(QueueBuffer *queueBuffer) noexcept
バッファを追加
Definition mgl_audio_stream_queue.cc:87
StreamQueue(size_t bufferSize, uint32_t bufferCount) noexcept
コンストラクタ
Definition mgl_audio_stream_queue.cc:22
void Reset() noexcept
ストリームキューを初期状態に戻す
Definition mgl_audio_stream_queue.cc:39
MGL STLのメモリ関連の代替
std::unique_ptr< T, Deleter > unique_ptr
MGLのアロケータを利用するユニークポインタ
Definition mgl_stl_memory.h:247
キューバッファ情報
Definition mgl_audio_stream_queue.h:27
size_t dataSize
データのサイズ
Definition mgl_audio_stream_queue.h:30
QueueBuffer * next
次のバッファアドレス
Definition mgl_audio_stream_queue.h:31
uint32_t channelCount
1フレームのチャンネル数(1: モノラル,2: ステレオ)
Definition mgl_audio_stream_queue.h:29
STL::unique_ptr< float[]> data
バッファアドレス
Definition mgl_audio_stream_queue.h:28
bool isActive
使用中フラグ
Definition mgl_audio_stream_queue.h:32