LMMS
Loading...
Searching...
No Matches
juce_ARADocumentController.h
Go to the documentation of this file.
1/*
2 ==============================================================================
3
4 This file is part of the JUCE library.
5 Copyright (c) 2022 - Raw Material Software Limited
6
7 JUCE is an open source library subject to commercial or open-source
8 licensing.
9
10 By using JUCE, you agree to the terms of both the JUCE 7 End-User License
11 Agreement and JUCE Privacy Policy.
12
13 End User License Agreement: www.juce.com/juce-7-licence
14 Privacy Policy: www.juce.com/juce-privacy-policy
15
16 Or: You may also use this code under the terms of the GPL v3 (see
17 www.gnu.org/licenses).
18
19 JUCE IS PROVIDED "AS IS" WITHOUT ANY WARRANTY, AND ALL WARRANTIES, WHETHER
20 EXPRESSED OR IMPLIED, INCLUDING MERCHANTABILITY AND FITNESS FOR PURPOSE, ARE
21 DISCLAIMED.
22
23 ==============================================================================
24*/
25
26#pragma once
27
28namespace juce
29{
30
31class ARAPlaybackRenderer;
32class ARAEditorRenderer;
33class ARAEditorView;
34class ARAInputStream;
35class ARAOutputStream;
36
92{
93public:
94 //==============================================================================
97 ARADocumentControllerSpecialisation (const ARA::PlugIn::PlugInEntry* entry,
98 const ARA::ARADocumentControllerHostInstance* instance);
99
102
105 ARA::PlugIn::DocumentController* getDocumentController() noexcept;
106
123 template <typename SpecialisationType>
124 static const ARA::ARAFactory* createARAFactory()
125 {
126 static_assert (std::is_base_of<ARADocumentControllerSpecialisation, SpecialisationType>::value,
127 "DocumentController specialization types must inherit from ARADocumentControllerSpecialisation");
128 return ARA::PlugIn::PlugInEntry::getPlugInEntry<FactoryConfig<SpecialisationType>>()->getFactory();
129 }
130
135 template <typename Specialisation = ARADocumentControllerSpecialisation>
136 static Specialisation* getSpecialisedDocumentController (ARA::PlugIn::DocumentController* dc)
137 {
138 return static_cast<Specialisation*> (getSpecialisedDocumentControllerImpl (dc));
139 }
140
142 template <typename DocumentType = ARADocument>
143 DocumentType* getDocument()
144 {
145 return static_cast<DocumentType*> (getDocumentImpl());
146 }
147
148protected:
149 //==============================================================================
159 virtual bool doRestoreObjectsFromStream (ARAInputStream& input, const ARARestoreObjectsFilter* filter) = 0;
160
170 virtual bool doStoreObjectsToStream (ARAOutputStream& output, const ARAStoreObjectsFilter* filter) = 0;
171
172 //==============================================================================
175
178
181
182 //==============================================================================
183 // ARAAudioSource content access
184
192 virtual bool doIsAudioSourceContentAvailable (const ARA::PlugIn::AudioSource* audioSource,
193 ARA::ARAContentType type);
194
200 virtual ARA::ARAContentGrade doGetAudioSourceContentGrade (const ARA::PlugIn::AudioSource* audioSource,
201 ARA::ARAContentType type);
202
209 virtual ARA::PlugIn::ContentReader* doCreateAudioSourceContentReader (ARA::PlugIn::AudioSource* audioSource,
210 ARA::ARAContentType type,
211 const ARA::ARAContentTimeRange* range);
212
213 //==============================================================================
214 // ARAAudioModification content access
215
224 virtual bool doIsAudioModificationContentAvailable (const ARA::PlugIn::AudioModification* audioModification,
225 ARA::ARAContentType type);
226
234 virtual ARA::ARAContentGrade doGetAudioModificationContentGrade (const ARA::PlugIn::AudioModification* audioModification,
235 ARA::ARAContentType type);
236
245 virtual ARA::PlugIn::ContentReader* doCreateAudioModificationContentReader (ARA::PlugIn::AudioModification* audioModification,
246 ARA::ARAContentType type,
247 const ARA::ARAContentTimeRange* range);
248
249 //==============================================================================
250 // ARAPlaybackRegion content access
251
261 virtual bool doIsPlaybackRegionContentAvailable (const ARA::PlugIn::PlaybackRegion* playbackRegion,
262 ARA::ARAContentType type);
263
272 virtual ARA::ARAContentGrade doGetPlaybackRegionContentGrade (const ARA::PlugIn::PlaybackRegion* playbackRegion,
273 ARA::ARAContentType type);
274
281 virtual ARA::PlugIn::ContentReader* doCreatePlaybackRegionContentReader (ARA::PlugIn::PlaybackRegion* playbackRegion,
282 ARA::ARAContentType type,
283 const ARA::ARAContentTimeRange* range);
284
285 //==============================================================================
286 // ARAAudioSource analysis
287
293 virtual bool doIsAudioSourceContentAnalysisIncomplete (const ARA::PlugIn::AudioSource* audioSource,
294 ARA::ARAContentType type);
295
301 virtual void doRequestAudioSourceContentAnalysis (ARA::PlugIn::AudioSource* audioSource,
302 std::vector<ARA::ARAContentType> const& contentTypes);
303
304 //==============================================================================
305 // Analysis Algorithm selection
306
312 virtual ARA::ARAInt32 doGetProcessingAlgorithmsCount ();
313
319 virtual const ARA::ARAProcessingAlgorithmProperties*
320 doGetProcessingAlgorithmProperties (ARA::ARAInt32 algorithmIndex);
321
327 virtual ARA::ARAInt32 doGetProcessingAlgorithmForAudioSource (const ARA::PlugIn::AudioSource* audioSource);
328
334 virtual void doRequestProcessingAlgorithmForAudioSource (ARA::PlugIn::AudioSource* audioSource, ARA::ARAInt32 algorithmIndex);
335
336 //==============================================================================
338 virtual ARADocument* doCreateDocument();
339
342 ARA::ARAMusicalContextHostRef hostRef);
343
346 ARA::ARARegionSequenceHostRef hostRef);
347
350 ARA::ARAAudioSourceHostRef hostRef);
351
354 ARA::ARAAudioModificationHostRef hostRef,
355 const ARAAudioModification* optionalModificationToClone);
356
359 ARA::ARAPlaybackRegionHostRef hostRef);
360
361private:
362 //==============================================================================
363 template <typename SpecialisationType>
364 class FactoryConfig : public ARA::PlugIn::FactoryConfig
365 {
366 public:
368 {
369 const juce::String compatibleDocumentArchiveIDString = JucePlugin_ARACompatibleArchiveIDs;
370
371 if (compatibleDocumentArchiveIDString.isNotEmpty())
372 {
373 compatibleDocumentArchiveIDStrings = juce::StringArray::fromLines (compatibleDocumentArchiveIDString);
374 for (const auto& compatibleID : compatibleDocumentArchiveIDStrings)
375 compatibleDocumentArchiveIDs.push_back (compatibleID.toRawUTF8());
376 }
377
378 // Update analyzeable content types
379 static constexpr std::array<ARA::ARAContentType, 6> contentTypes {
380 ARA::kARAContentTypeNotes,
381 ARA::kARAContentTypeTempoEntries,
382 ARA::kARAContentTypeBarSignatures,
383 ARA::kARAContentTypeStaticTuning,
384 ARA::kARAContentTypeKeySignatures,
385 ARA::kARAContentTypeSheetChords
386 };
387
389
390 for (size_t i = 0; i < contentTypes.size(); ++i)
391 if (JucePlugin_ARAContentTypes & (1 << i))
392 analyzeableContentTypes.push_back (contentTypes[i]);
393
395
396 // Update playback transformation flags
397 static constexpr std::array<ARA::ARAPlaybackTransformationFlags, 4> playbackTransformationFlags {
398 ARA::kARAPlaybackTransformationTimestretch,
399 ARA::kARAPlaybackTransformationTimestretchReflectingTempo,
400 ARA::kARAPlaybackTransformationContentBasedFadeAtTail,
401 ARA::kARAPlaybackTransformationContentBasedFadeAtHead
402 };
403
405
407
408 for (size_t i = 0; i < playbackTransformationFlags.size(); ++i)
409 if (JucePlugin_ARATransformationFlags & (1 << i))
410 supportedPlaybackTransformationFlags |= playbackTransformationFlags[i];
411
413 }
414
415 const char* getFactoryID() const noexcept override { return JucePlugin_ARAFactoryID; }
416 const char* getPlugInName() const noexcept override { return JucePlugin_Name; }
417 const char* getManufacturerName() const noexcept override { return JucePlugin_Manufacturer; }
418 const char* getInformationURL() const noexcept override { return JucePlugin_ManufacturerWebsite; }
419 const char* getVersion() const noexcept override { return JucePlugin_VersionString; }
420 const char* getDocumentArchiveID() const noexcept override { return JucePlugin_ARADocumentArchiveID; }
421
423 {
424 return compatibleDocumentArchiveIDs.size();
425 }
426
427 const ARA::ARAPersistentID* getCompatibleDocumentArchiveIDs() const noexcept override
428 {
430 }
431
433 {
434 return analyzeableContentTypes.size();
435 }
436
437 const ARA::ARAContentType* getAnalyzeableContentTypes() const noexcept override
438 {
440 }
441
442 ARA::ARAPlaybackTransformationFlags getSupportedPlaybackTransformationFlags() const noexcept override
443 {
445 }
446
447 ARA::PlugIn::DocumentController* createDocumentController (const ARA::PlugIn::PlugInEntry* entry,
448 const ARA::ARADocumentControllerHostInstance* instance) const noexcept override
449 {
450 auto* spec = new SpecialisationType (entry, instance);
451 return spec->getDocumentController();
452 }
453
454 void destroyDocumentController (ARA::PlugIn::DocumentController* controller) const noexcept override
455 {
457 }
458
459 private:
461 std::vector<ARA::ARAPersistentID> compatibleDocumentArchiveIDs;
462 std::vector<ARA::ARAContentType> analyzeableContentTypes;
463 ARA::ARAPlaybackTransformationFlags supportedPlaybackTransformationFlags;
464 };
465
466 //==============================================================================
467 static ARADocumentControllerSpecialisation* getSpecialisedDocumentControllerImpl (ARA::PlugIn::DocumentController*);
468
470
471 //==============================================================================
473 std::unique_ptr<ARADocumentControllerImpl> documentController;
474};
475
481{
482public:
483 explicit ARAInputStream (ARA::PlugIn::HostArchiveReader*);
484
485 int64 getPosition() override { return position; }
486 int64 getTotalLength() override { return size; }
487
488 int read (void*, int) override;
489 bool setPosition (int64) override;
490 bool isExhausted() override;
491
492 bool failed() const { return failure; }
493
494private:
495 ARA::PlugIn::HostArchiveReader* archiveReader;
498 bool failure = false;
499};
500
506{
507public:
508 explicit ARAOutputStream (ARA::PlugIn::HostArchiveWriter*);
509
510 int64 getPosition() override { return position; }
511 void flush() override {}
512
513 bool write (const void*, size_t) override;
514 bool setPosition (int64) override;
515
516private:
517 ARA::PlugIn::HostArchiveWriter* archiveWriter;
519};
520} // namespace juce
Controller controller
Definition main.C:5
#define noexcept
Definition DistrhoDefines.h:72
#define nullptr
Definition DistrhoDefines.h:75
CAdPlugDatabase::CRecord::RecordType type
Definition adplugdb.cpp:93
Definition juce_ARAModelObjects.h:1093
ARAAudioModificationListener Listener
Definition juce_ARAModelObjects.h:1096
Definition juce_ARAModelObjects.h:919
ARAAudioSourceListener Listener
Definition juce_ARAModelObjects.h:923
std::vector< ARA::ARAPersistentID > compatibleDocumentArchiveIDs
Definition juce_ARADocumentController.h:461
const char * getManufacturerName() const noexcept override
Definition juce_ARADocumentController.h:417
ARA::PlugIn::DocumentController * createDocumentController(const ARA::PlugIn::PlugInEntry *entry, const ARA::ARADocumentControllerHostInstance *instance) const noexcept override
Definition juce_ARADocumentController.h:447
const char * getPlugInName() const noexcept override
Definition juce_ARADocumentController.h:416
FactoryConfig() noexcept
Definition juce_ARADocumentController.h:367
const ARA::ARAPersistentID * getCompatibleDocumentArchiveIDs() const noexcept override
Definition juce_ARADocumentController.h:427
const char * getFactoryID() const noexcept override
Definition juce_ARADocumentController.h:415
void destroyDocumentController(ARA::PlugIn::DocumentController *controller) const noexcept override
Definition juce_ARADocumentController.h:454
std::vector< ARA::ARAContentType > analyzeableContentTypes
Definition juce_ARADocumentController.h:462
const char * getInformationURL() const noexcept override
Definition juce_ARADocumentController.h:418
const char * getVersion() const noexcept override
Definition juce_ARADocumentController.h:419
ARA::ARAPlaybackTransformationFlags supportedPlaybackTransformationFlags
Definition juce_ARADocumentController.h:463
ARA::ARASize getCompatibleDocumentArchiveIDsCount() const noexcept override
Definition juce_ARADocumentController.h:422
const ARA::ARAContentType * getAnalyzeableContentTypes() const noexcept override
Definition juce_ARADocumentController.h:437
juce::StringArray compatibleDocumentArchiveIDStrings
Definition juce_ARADocumentController.h:460
ARA::ARAPlaybackTransformationFlags getSupportedPlaybackTransformationFlags() const noexcept override
Definition juce_ARADocumentController.h:442
const char * getDocumentArchiveID() const noexcept override
Definition juce_ARADocumentController.h:420
ARA::ARASize getAnalyzeableContentTypesCount() const noexcept override
Definition juce_ARADocumentController.h:432
ARA::PlugIn::DocumentController * getDocumentController() noexcept
Definition juce_ARADocumentController.cpp:269
virtual ARAEditorRenderer * doCreateEditorRenderer()
Definition juce_ARADocumentController.cpp:827
virtual ARA::PlugIn::ContentReader * doCreateAudioSourceContentReader(ARA::PlugIn::AudioSource *audioSource, ARA::ARAContentType type, const ARA::ARAContentTimeRange *range)
Definition juce_ARADocumentController.cpp:855
virtual void doRequestAudioSourceContentAnalysis(ARA::PlugIn::AudioSource *audioSource, std::vector< ARA::ARAContentType > const &contentTypes)
Definition juce_ARADocumentController.cpp:934
virtual ARAMusicalContext * doCreateMusicalContext(ARADocument *document, ARA::ARAMusicalContextHostRef hostRef)
Definition juce_ARADocumentController.cpp:553
virtual bool doStoreObjectsToStream(ARAOutputStream &output, const ARAStoreObjectsFilter *filter)=0
static Specialisation * getSpecialisedDocumentController(ARA::PlugIn::DocumentController *dc)
Definition juce_ARADocumentController.h:136
std::unique_ptr< ARADocumentControllerImpl > documentController
Definition juce_ARADocumentController.h:473
virtual ARARegionSequence * doCreateRegionSequence(ARADocument *document, ARA::ARARegionSequenceHostRef hostRef)
Definition juce_ARADocumentController.cpp:559
virtual ARAAudioModification * doCreateAudioModification(ARAAudioSource *audioSource, ARA::ARAAudioModificationHostRef hostRef, const ARAAudioModification *optionalModificationToClone)
Definition juce_ARADocumentController.cpp:571
static const ARA::ARAFactory * createARAFactory()
Definition juce_ARADocumentController.h:124
ARADocumentControllerSpecialisation(const ARA::PlugIn::PlugInEntry *entry, const ARA::ARADocumentControllerHostInstance *instance)
Definition juce_ARADocumentController.cpp:813
virtual bool doRestoreObjectsFromStream(ARAInputStream &input, const ARARestoreObjectsFilter *filter)=0
virtual bool doIsPlaybackRegionContentAvailable(const ARA::PlugIn::PlaybackRegion *playbackRegion, ARA::ARAContentType type)
Definition juce_ARADocumentController.cpp:897
virtual ARA::ARAInt32 doGetProcessingAlgorithmsCount()
Definition juce_ARADocumentController.cpp:940
virtual ARAAudioSource * doCreateAudioSource(ARADocument *document, ARA::ARAAudioSourceHostRef hostRef)
Definition juce_ARADocumentController.cpp:565
virtual ARADocument * doCreateDocument()
Definition juce_ARADocumentController.cpp:548
DocumentType * getDocument()
Definition juce_ARADocumentController.h:143
virtual bool doIsAudioSourceContentAvailable(const ARA::PlugIn::AudioSource *audioSource, ARA::ARAContentType type)
Definition juce_ARADocumentController.cpp:837
virtual ARA::PlugIn::ContentReader * doCreateAudioModificationContentReader(ARA::PlugIn::AudioModification *audioModification, ARA::ARAContentType type, const ARA::ARAContentTimeRange *range)
Definition juce_ARADocumentController.cpp:885
virtual bool doIsAudioModificationContentAvailable(const ARA::PlugIn::AudioModification *audioModification, ARA::ARAContentType type)
Definition juce_ARADocumentController.cpp:867
virtual ARA::ARAContentGrade doGetAudioSourceContentGrade(const ARA::PlugIn::AudioSource *audioSource, ARA::ARAContentType type)
Definition juce_ARADocumentController.cpp:844
virtual ARA::PlugIn::ContentReader * doCreatePlaybackRegionContentReader(ARA::PlugIn::PlaybackRegion *playbackRegion, ARA::ARAContentType type, const ARA::ARAContentTimeRange *range)
Definition juce_ARADocumentController.cpp:915
static ARADocumentControllerSpecialisation * getSpecialisedDocumentControllerImpl(ARA::PlugIn::DocumentController *)
Definition juce_ARADocumentController.cpp:308
virtual const ARA::ARAProcessingAlgorithmProperties * doGetProcessingAlgorithmProperties(ARA::ARAInt32 algorithmIndex)
Definition juce_ARADocumentController.cpp:943
virtual ARA::ARAContentGrade doGetPlaybackRegionContentGrade(const ARA::PlugIn::PlaybackRegion *playbackRegion, ARA::ARAContentType type)
Definition juce_ARADocumentController.cpp:904
virtual ARAPlaybackRegion * doCreatePlaybackRegion(ARAAudioModification *modification, ARA::ARAPlaybackRegionHostRef hostRef)
Definition juce_ARADocumentController.cpp:582
virtual ARAPlaybackRenderer * doCreatePlaybackRenderer()
Definition juce_ARADocumentController.cpp:822
virtual ARA::ARAInt32 doGetProcessingAlgorithmForAudioSource(const ARA::PlugIn::AudioSource *audioSource)
Definition juce_ARADocumentController.cpp:949
ARADocument * getDocumentImpl()
Definition juce_ARADocumentController.cpp:313
virtual bool doIsAudioSourceContentAnalysisIncomplete(const ARA::PlugIn::AudioSource *audioSource, ARA::ARAContentType type)
Definition juce_ARADocumentController.cpp:927
virtual ARAEditorView * doCreateEditorView()
Definition juce_ARADocumentController.cpp:832
virtual ARA::ARAContentGrade doGetAudioModificationContentGrade(const ARA::PlugIn::AudioModification *audioModification, ARA::ARAContentType type)
Definition juce_ARADocumentController.cpp:874
virtual void doRequestProcessingAlgorithmForAudioSource(ARA::PlugIn::AudioSource *audioSource, ARA::ARAInt32 algorithmIndex)
Definition juce_ARADocumentController.cpp:960
Definition juce_ARAModelObjects.h:335
ARADocumentListener Listener
Definition juce_ARAModelObjects.h:338
Definition juce_ARAPlugInInstanceRoles.h:170
Definition juce_ARAPlugInInstanceRoles.h:211
Definition juce_ARADocumentController.h:481
bool failure
Definition juce_ARADocumentController.h:498
ARAInputStream(ARA::PlugIn::HostArchiveReader *)
Definition juce_ARADocumentController.cpp:762
int64 getPosition() override
Definition juce_ARADocumentController.h:485
int64 position
Definition juce_ARADocumentController.h:496
int64 size
Definition juce_ARADocumentController.h:497
bool failed() const
Definition juce_ARADocumentController.h:492
int64 getTotalLength() override
Definition juce_ARADocumentController.h:486
ARA::PlugIn::HostArchiveReader * archiveReader
Definition juce_ARADocumentController.h:495
Definition juce_ARAModelObjects.h:479
ARAMusicalContextListener Listener
Definition juce_ARAModelObjects.h:482
Definition juce_ARADocumentController.h:506
ARA::PlugIn::HostArchiveWriter * archiveWriter
Definition juce_ARADocumentController.h:517
ARAOutputStream(ARA::PlugIn::HostArchiveWriter *)
Definition juce_ARADocumentController.cpp:793
int64 position
Definition juce_ARADocumentController.h:518
int64 getPosition() override
Definition juce_ARADocumentController.h:510
void flush() override
Definition juce_ARADocumentController.h:511
Definition juce_ARAModelObjects.h:580
ARAPlaybackRegionListener Listener
Definition juce_ARAModelObjects.h:583
Definition juce_ARAPlugInInstanceRoles.h:125
Definition juce_ARAModelObjects.h:727
ARARegionSequenceListener Listener
Definition juce_ARAModelObjects.h:730
InputStream()=default
OutputStream()
Definition juce_OutputStream.cpp:59
bool isNotEmpty() const noexcept
Definition juce_String.h:316
register unsigned i
Definition inflate.c:1575
#define JUCE_BEGIN_IGNORE_WARNINGS_MSVC(warnings)
Definition juce_CompilerWarnings.h:198
#define JUCE_END_IGNORE_WARNINGS_MSVC
Definition juce_CompilerWarnings.h:199
Definition juce_ARACommon.h:29
Definition carla_juce.cpp:31
long long int64
Definition juce_MathsFunctions.h:54
read(f, &c, 1)
#define const
Definition zconf.h:137