This repository has been archived on 2022-05-21. You can view files and clone it, but cannot push or open issues or pull requests.
glyphs-juke/src/AudioDevice.h

56 lines
1.1 KiB
C
Raw Normal View History

2021-08-27 04:12:26 +00:00
#pragma once
#include <atomic>
#include <cstdint>
#include <memory>
#include <mutex>
#include <string>
#define NOMINMAX /* miniaudio includes windows.h */
#include "thirdparty/miniaudio.h"
#undef NOMINMAX
#include "iAudioDevice.h"
#include "iClock.h"
namespace gj {
class AudioDevice : public iAudioDevice, public iClock {
public:
static constexpr auto kFormat = ma_format_f32;
static constexpr auto kChannel = 2;
static constexpr auto kSampleRate = 48000;
AudioDevice(AudioDevice&&) = default;
AudioDevice(const AudioDevice&) = default;
AudioDevice& operator=(AudioDevice&&) = default;
AudioDevice& operator=(const AudioDevice&) = default;
AudioDevice();
~AudioDevice();
void PlayMusic(const std::string& path) override;
void StopMusic() override;
uint64_t now() const override {
return time_.load() * 1000 / kSampleRate;
}
private:
std::mutex mtx_;
ma_device ma_{0};
bool playing_ = false;
ma_decoder dec_{0};
std::atomic<uint64_t> time_;
static void Callback_(ma_device* ma, void* out, const void* in, ma_uint32 framecnt);
};
}