11#include <promeki/config.h>
12#if PROMEKI_ENABLE_PROAV
21PROMEKI_NAMESPACE_BEGIN
51class AudioFileMediaIO :
public DedicatedThreadMediaIO {
52 PROMEKI_OBJECT(AudioFileMediaIO, DedicatedThreadMediaIO)
55 AudioFileMediaIO(ObjectBase *parent =
nullptr);
58 ~AudioFileMediaIO()
override;
60 Error proposeInput(
const MediaDesc &offered, MediaDesc *preferred)
const override;
63 Error executeCmd(MediaIOCommandOpen &cmd)
override;
64 Error executeCmd(MediaIOCommandClose &cmd)
override;
65 Error executeCmd(MediaIOCommandRead &cmd)
override;
66 Error executeCmd(MediaIOCommandWrite &cmd)
override;
67 Error executeCmd(MediaIOCommandSeek &cmd)
override;
75 AudioFormat::ID preferredWriterDataType(
const String &filename, AudioFormat::ID source)
const;
81 bool _isWrite =
false;
82 size_t _samplesPerFrame = 0;
83 FrameNumber _currentFrame{0};
84 FrameCount _totalFrames{0};
91class AudioFileFactory :
public MediaIOFactory {
93 AudioFileFactory() =
default;
95 String name()
const override {
return String(
"AudioFile"); }
96 String displayName()
const override {
return String(
"Audio File"); }
97 String description()
const override {
98 return String(
"Audio file formats via libsndfile (WAV, BWF, AIFF"
99#
if PROMEKI_ENABLE_VORBIS
102#
if PROMEKI_ENABLE_FLAC
105#
if PROMEKI_ENABLE_MP3
110 StringList extensions()
const override {
122 StringList exts{String(
"wav"), String(
"bwf"), String(
"aiff"), String(
"aif")};
123#if PROMEKI_ENABLE_VORBIS
124 exts.pushToBack(String(
"ogg"));
125 exts.pushToBack(String(
"oga"));
127#if PROMEKI_ENABLE_FLAC
128 exts.pushToBack(String(
"flac"));
130#if PROMEKI_ENABLE_MP3
131 exts.pushToBack(String(
"mp3"));
132 exts.pushToBack(String(
"mpeg"));
137 bool canBeSource()
const override {
return true; }
138 bool canBeSink()
const override {
return true; }
140 bool canHandleDevice(IODevice *device)
const override;
141 Config::SpecMap configSpecs()
const override;
142 Metadata defaultMetadata()
const override;
144 MediaIO *create(
const Config &config, ObjectBase *parent =
nullptr)
const override;