11#include <promeki/config.h>
12#if PROMEKI_ENABLE_PROAV
21PROMEKI_NAMESPACE_BEGIN
47class AudioFileMediaIO :
public DedicatedThreadMediaIO {
48 PROMEKI_OBJECT(AudioFileMediaIO, DedicatedThreadMediaIO)
51 AudioFileMediaIO(ObjectBase *parent =
nullptr);
54 ~AudioFileMediaIO()
override;
56 Error proposeInput(
const MediaDesc &offered, MediaDesc *preferred)
const override;
59 Error executeCmd(MediaIOCommandOpen &cmd)
override;
60 Error executeCmd(MediaIOCommandClose &cmd)
override;
61 Error executeCmd(MediaIOCommandRead &cmd)
override;
62 Error executeCmd(MediaIOCommandWrite &cmd)
override;
63 Error executeCmd(MediaIOCommandSeek &cmd)
override;
71 AudioFormat::ID preferredWriterDataType(
const String &filename, AudioFormat::ID source)
const;
77 bool _isWrite =
false;
78 size_t _samplesPerFrame = 0;
79 FrameNumber _currentFrame{0};
80 FrameCount _totalFrames{0};
87class AudioFileFactory :
public MediaIOFactory {
89 AudioFileFactory() =
default;
91 String name()
const override {
return String(
"AudioFile"); }
92 String displayName()
const override {
return String(
"Audio File"); }
93 String description()
const override {
94 return String(
"Audio file formats via libsndfile (WAV, BWF, AIFF, OGG)");
96 StringList extensions()
const override {
97 return {String(
"wav"), String(
"bwf"), String(
"aiff"), String(
"aif"), String(
"ogg")};
100 bool canBeSource()
const override {
return true; }
101 bool canBeSink()
const override {
return true; }
103 bool canHandleDevice(IODevice *device)
const override;
104 Config::SpecMap configSpecs()
const override;
105 Metadata defaultMetadata()
const override;
107 MediaIO *create(
const Config &config, ObjectBase *parent =
nullptr)
const override;