mirror of
https://github.com/ARMSX2/ARMSX2.git
synced 2026-08-24 16:50:16 -07:00
70 lines
1.6 KiB
C++
70 lines
1.6 KiB
C++
// SPDX-FileCopyrightText: 2002-2026 PCSX2 Dev Team
|
|
// SPDX-License-Identifier: GPL-3.0+
|
|
|
|
//
|
|
// Types to shared by platforms and config. dialog.
|
|
//
|
|
|
|
#pragma once
|
|
|
|
#include <memory>
|
|
#include <string>
|
|
#include <vector>
|
|
#include <utility>
|
|
|
|
enum MicMode
|
|
{
|
|
MIC_MODE_NONE,
|
|
MIC_MODE_SINGLE,
|
|
MIC_MODE_SEPARATE,
|
|
// Use same source for both player or
|
|
// left channel for P1 and right for P2 if stereo.
|
|
MIC_MODE_SHARED
|
|
};
|
|
|
|
enum AudioDir
|
|
{
|
|
AUDIODIR_SOURCE = 0,
|
|
AUDIODIR_SINK
|
|
};
|
|
|
|
class AudioDevice
|
|
{
|
|
public:
|
|
static constexpr s32 DEFAULT_LATENCY = 100;
|
|
static constexpr const char* DEFAULT_LATENCY_STR = "100";
|
|
|
|
AudioDevice(AudioDir dir, u32 channels)
|
|
: mAudioDir(dir)
|
|
, mChannels(channels)
|
|
{
|
|
}
|
|
|
|
protected:
|
|
s32 mSubDevice;
|
|
AudioDir mAudioDir;
|
|
u32 mChannels;
|
|
|
|
public:
|
|
virtual ~AudioDevice() = default;
|
|
|
|
//get buffer, converted to 16bit int format
|
|
virtual uint32_t GetBuffer(int16_t* buff, uint32_t len) = 0;
|
|
virtual uint32_t SetBuffer(int16_t* buff, uint32_t len) = 0;
|
|
/*
|
|
Get how many frames has been recorded so that caller knows
|
|
how much to allocated for 16-bit buffer.
|
|
*/
|
|
virtual bool GetFrames(uint32_t* size) = 0;
|
|
virtual void SetResampling(int samplerate) = 0;
|
|
uint32_t GetChannels() { return mChannels; }
|
|
|
|
virtual bool Start() = 0;
|
|
virtual void Stop() = 0;
|
|
|
|
static std::unique_ptr<AudioDevice> CreateDevice(AudioDir dir, u32 channels, std::string devname, s32 latency);
|
|
static std::unique_ptr<AudioDevice> CreateNoopDevice(AudioDir dir, u32 channels);
|
|
static std::vector<std::pair<std::string, std::string>> GetInputDeviceList();
|
|
static std::vector<std::pair<std::string, std::string>> GetOutputDeviceList();
|
|
};
|