LCOV - code coverage report
Current view: top level - muse/framework/audio/main - iplayback.h Coverage Total Hit
Test: filtered_coverage.info Lines: 100.0 % 2 2
Test Date: 2026-11-05 04:07:02

            Line data    Source code
       1              : /*
       2              :  * SPDX-License-Identifier: GPL-3.0-only
       3              :  * MuseScore-CLA-applies
       4              :  *
       5              :  * MuseScore Studio
       6              :  * Music Composition & Notation
       7              :  *
       8              :  * Copyright (C) 2021 MuseScore Limited and others
       9              :  *
      10              :  * This program is free software: you can redistribute it and/or modify
      11              :  * it under the terms of the GNU General Public License version 3 as
      12              :  * published by the Free Software Foundation.
      13              :  *
      14              :  * This program is distributed in the hope that it will be useful,
      15              :  * but WITHOUT ANY WARRANTY; without even the implied warranty of
      16              :  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
      17              :  * GNU General Public License for more details.
      18              :  *
      19              :  * You should have received a copy of the GNU General Public License
      20              :  * along with this program.  If not, see <https://www.gnu.org/licenses/>.
      21              :  */
      22              : 
      23              : #pragma once
      24              : 
      25              : #include "modularity/imoduleinterface.h"
      26              : #include "global/types/retval.h"
      27              : #include "global/async/channel.h"
      28              : #include "global/async/promise.h"
      29              : 
      30              : #include "../common/audiotypes.h"
      31              : 
      32              : namespace muse::io {
      33              : class IODevice;
      34              : }
      35              : 
      36              : namespace muse::audio {
      37              : class ITracks;
      38              : class IPlayer;
      39              : class IAudioOutput;
      40              : 
      41              : class IPlayback : MODULE_CONTEXT_INTERFACE
      42              : {
      43           36 :     INTERFACE_ID(IPlayback)
      44              : 
      45              : public:
      46           14 :     virtual ~IPlayback() = default;
      47              : 
      48              :     // Init
      49              :     virtual async::Promise<Ret> init() = 0;
      50              :     virtual bool isInited() const = 0;
      51              :     virtual async::Channel<bool> initedChanged() const = 0;
      52              :     virtual void deinit() = 0;
      53              : 
      54              :     // Resources
      55              :     virtual async::Promise<AudioResourceMetaList> availableInputResources() const = 0;
      56              :     virtual async::Promise<SoundPresetList> availableSoundPresets(const AudioResourceMeta& resourceMeta) const = 0;
      57              :     virtual async::Promise<AudioResourceMetaList> availableOutputResources() const = 0;
      58              : 
      59              :     // Setup tracks
      60              :     virtual async::Promise<TrackIdList> trackIdList() const = 0;
      61              :     virtual async::Promise<RetVal<TrackName> > trackName(const TrackId trackId) const = 0;
      62              : 
      63              :     virtual async::Promise<TrackId, TrackParams> addTrack(const TrackName& name, io::IODevice* data, const TrackParams& params) = 0;
      64              :     virtual async::Promise<TrackId, TrackParams> addTrack(const TrackName& name, const mpe::PlaybackData& data,
      65              :                                                           const TrackParams& params) = 0;
      66              : 
      67              :     virtual async::Promise<TrackId, TrackParams> addAuxTrack(const TrackName& trackName, const TrackParams& params) = 0;
      68              : 
      69              :     virtual void removeTrack(const TrackId trackId) = 0;
      70              :     virtual void removeAllTracks() = 0;
      71              : 
      72              :     virtual async::Channel<TrackId> trackAdded() const = 0;
      73              :     virtual async::Channel<TrackId> trackRemoved() const = 0;
      74              : 
      75              :     // Params
      76              :     // Get all params
      77              :     virtual async::Promise<TrackParams> params(const TrackId trackId) const = 0;
      78              : 
      79              :     // Set some params
      80              :     virtual void setSourceParams(const TrackId trackId, const AudioSourceParams& params) = 0;
      81              :     virtual void setControlParams(const TrackId trackId, const ControlParams& params) = 0;
      82              :     virtual void setFxChainParams(const TrackId trackId, const AudioFxChain& params) = 0;
      83              :     virtual void setAuxSendsParams(const TrackId trackId, const AuxSendsParams& params) = 0;
      84              : 
      85              :     // These parameters can be changed within the audio system.
      86              :     virtual async::Channel<TrackId, AudioSourceParams> sourceParamsChanged() const = 0;
      87              :     virtual async::Channel<TrackId, ControlParams> controlParamsChanged() const = 0;
      88              :     virtual async::Channel<TrackId, AudioFxChain> fxChainParamsChanged() const = 0;
      89              :     virtual async::Channel<TrackId, AuxSendsParams> auxSendsParamsChanged() const = 0;
      90              : 
      91              :     // Same for master
      92              :     virtual async::Promise<TrackParams> masterParams() const = 0;
      93              :     virtual void setMasterControlParams(const ControlParams& params) = 0;
      94              :     virtual void setMasterFxChainParams(const AudioFxChain& params) = 0;
      95              :     virtual void setMasterAuxSendsParams(const AuxSendsParams& params) = 0;
      96              :     virtual async::Channel<ControlParams> masterControlParamsChanged() const = 0;
      97              :     virtual async::Channel<AudioFxChain> masterFxChainParamsChanged() const = 0;
      98              :     virtual async::Channel<AuxSendsParams> masterAuxSendsParamsChanged() const = 0;
      99              : 
     100              :     // Input processing
     101              :     virtual void processInput(const TrackId trackId) const = 0;
     102              :     virtual async::Promise<InputProcessingProgress> inputProcessingProgress(const TrackId trackId) const = 0;
     103              : 
     104              :     virtual void clearCache(const TrackId trackId) const = 0;
     105              :     virtual void clearSources() = 0;
     106              :     virtual void clearMasterOutputParams() = 0;
     107              :     virtual void clearAllFx() = 0;
     108              : 
     109              :     // Play
     110              :     virtual std::shared_ptr<IPlayer> player() const = 0;
     111              : 
     112              :     // Signal changes
     113              :     virtual async::Promise<AudioSignalChanges> signalChanges(const TrackId trackId) const = 0;
     114              :     virtual async::Promise<AudioSignalChanges> masterSignalChanges() const = 0;
     115              : 
     116              :     // Automation
     117              :     virtual async::Promise<AutomatedControlParamsChanges> automatedControlParamsChanges(const TrackId trackId) const = 0;
     118              : 
     119              :     // Export
     120              :     virtual async::Promise<bool> saveSoundTrack(const SoundTrackFormat& format, io::IODevice& dstDevice) = 0;
     121              :     virtual void abortSavingAllSoundTracks() = 0;
     122              :     virtual SaveSoundTrackProgress saveSoundTrackProgressChanged() const = 0;
     123              : };
     124              : 
     125              : using IPlaybackPtr = std::shared_ptr<IPlayback>;
     126              : }
        

Generated by: LCOV version 2.0-1