MGL(Win32)
読み取り中…
検索中…
一致する文字列を見つけられません
mgl_audio_wave_loader.h
[詳解]
1// SPDX-License-Identifier: Zlib
2/* ------------------------------------------------------------------------- */
9/* ------------------------------------------------------------------------- */
10
11#ifndef INCGUARD_MGL_AUDIO_WAVE_LOADER_H_1611731366
12#define INCGUARD_MGL_AUDIO_WAVE_LOADER_H_1611731366
13
15
16namespace MGL::Audio
17{
18
21{
22public:
24 struct Format
25 {
26 uint16_t type;
27 uint16_t channelCount;
28 uint32_t samplesPerSec;
29 uint32_t bytesPerSec;
30 uint16_t blockSize;
31 uint16_t bitsPerSample;
32 };
33 static_assert(sizeof(Format) == 16);
34
35 /* ------------------------------------------------------------------------- */
41 /* ------------------------------------------------------------------------- */
42 [[nodiscard]] constexpr bool IsOpen() const noexcept
43 {
44 return _isOpen;
45 }
46
47 /* ------------------------------------------------------------------------- */
52 /* ------------------------------------------------------------------------- */
53 [[nodiscard]] constexpr const Format &GetFormat() const noexcept
54 {
55 return _format;
56 }
57
58 /* ------------------------------------------------------------------------- */
63 /* ------------------------------------------------------------------------- */
64 constexpr void Seek(uint32_t sampleFrame) noexcept
65 {
66 _currentDataOffset = static_cast<size_t>(sampleFrame) * _format.blockSize;
67 }
68
69 /* ------------------------------------------------------------------------- */
75 /* ------------------------------------------------------------------------- */
76 [[nodiscard]] constexpr bool IsFinished() const noexcept
77 {
78 return _currentDataOffset >= _dataSize;
79 }
80
81 /* ------------------------------------------------------------------------- */
86 /* ------------------------------------------------------------------------- */
87 [[nodiscard]] constexpr size_t GetDataSize() const noexcept
88 {
89 return _dataSize;
90 }
91
92 bool Open(const File::PathView &path) noexcept;
93 void Close() noexcept;
94
95 size_t GetSample(void *buffer, size_t bufferSize) noexcept;
96 size_t GetSampleWithConvert(float *buffer, size_t bufferSize) noexcept;
97
98private:
99 bool _isOpen{false};
100 Format _format{};
101 File::ThrowingHandle _file;
102 size_t _dataOffset{0};
103 size_t _dataSize{0};
104 size_t _currentDataOffset{0};
105};
106} // namespace MGL::Audio
107
108#endif // INCGUARD_MGL_AUDIO_WAVE_LOADER_H_1611731366
109
110// vim: et ts=4 sw=4 sts=4
WAVEローダークラス
Definition mgl_audio_wave_loader.h:21
constexpr bool IsOpen() const noexcept
WAVEファイルがオープンされているかを取得
Definition mgl_audio_wave_loader.h:42
constexpr void Seek(uint32_t sampleFrame) noexcept
読み込み位置を設定
Definition mgl_audio_wave_loader.h:64
constexpr size_t GetDataSize() const noexcept
データサイズを取得
Definition mgl_audio_wave_loader.h:87
size_t GetSampleWithConvert(float *buffer, size_t bufferSize) noexcept
サンプルをfloatに変換して取得
Definition mgl_audio_wave_loader.cc:200
size_t GetSample(void *buffer, size_t bufferSize) noexcept
サンプルの取得
Definition mgl_audio_wave_loader.cc:155
void Close() noexcept
WAVEファイルをクローズ
Definition mgl_audio_wave_loader.cc:137
bool Open(const File::PathView &path) noexcept
WAVEファイルをオープン
Definition mgl_audio_wave_loader.cc:34
constexpr bool IsFinished() const noexcept
読み込み位置が終端に達しているかを取得
Definition mgl_audio_wave_loader.h:76
constexpr const Format & GetFormat() const noexcept
フォーマットを取得
Definition mgl_audio_wave_loader.h:53
文字列の参照のみを行うファイルパスクラス
Definition mgl_file_path_view.h:20
MGL 例外を発生させるファイルハンドル
フォーマット
Definition mgl_audio_wave_loader.h:25
uint16_t type
データフォーマット(1でPCM)
Definition mgl_audio_wave_loader.h:26
uint16_t bitsPerSample
1サンプルあたりのビット数
Definition mgl_audio_wave_loader.h:31
uint32_t bytesPerSec
1秒あたりのバイト数
Definition mgl_audio_wave_loader.h:29
uint16_t blockSize
1サンプルのバイト数
Definition mgl_audio_wave_loader.h:30
uint32_t samplesPerSec
サンプリングレート
Definition mgl_audio_wave_loader.h:28
uint16_t channelCount
チャンネル数
Definition mgl_audio_wave_loader.h:27