LCOV - code coverage report
Current view: top level - muse/framework/audio/main/internal - playback.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              : #pragma once
      23              : 
      24              : #include "../iplayback.h"
      25              : #include "global/async/asyncable.h"
      26              : #include "global/types/retval.h"
      27              : 
      28              : #include "modularity/ioc.h"
      29              : #include "audio/common/rpc/irpcchannel.h"
      30              : #include "../istartaudiocontroller.h"
      31              : 
      32              : #include "../iplayer.h"
      33              : 
      34              : namespace muse::audio {
      35              : class Player;
      36              : 
      37              : //! NOTE It may not use contextual services,
      38              : // but the playback itself is contextual,
      39              : // because each context (window) has its own playback.
      40              : class Playback : public IPlayback, public async::Asyncable, public Contextable
      41              : {
      42              :     GlobalInject<IStartAudioController> startAudioController;
      43              :     GlobalInject<rpc::IRpcChannel> channel;
      44              : 
      45              : public:
      46            5 :     Playback(const muse::modularity::ContextPtr& ctx)
      47            5 :         : Contextable(ctx) {}
      48              :     ~Playback() override;
      49              : 
      50              :     // Init
      51              :     async::Promise<Ret> init() override;
      52              :     bool isInited() const override;
      53              :     async::Channel<bool> initedChanged() const override;
      54              :     void deinit() override;
      55              : 
      56              :     // Resources
      57              :     async::Promise<AudioResourceMetaList> availableInputResources() const override;
      58              :     async::Promise<SoundPresetList> availableSoundPresets(const AudioResourceMeta& resourceMeta) const override;
      59              :     async::Promise<AudioResourceMetaList> availableOutputResources() const override;
      60              : 
      61              :     // Setup tracks
      62              :     async::Promise<TrackIdList> trackIdList() const override;
      63              :     async::Promise<RetVal<TrackName> > trackName(const TrackId trackId) const override;
      64              : 
      65              :     async::Promise<TrackId, TrackParams> addTrack(const TrackName& name, io::IODevice* data, const TrackParams& params) override;
      66              :     async::Promise<TrackId, TrackParams> addTrack(const TrackName& name, const mpe::PlaybackData& data, const TrackParams& params) override;
      67              :     async::Promise<TrackId, TrackParams> addAuxTrack(const TrackName& name, const TrackParams& params) override;
      68              : 
      69              :     void removeTrack(const TrackId trackId) override;
      70              :     void removeAllTracks() override;
      71              : 
      72              :     async::Channel<TrackId> trackAdded() const override;
      73              :     async::Channel<TrackId> trackRemoved() const override;
      74              : 
      75              :     // Params
      76              :     // Get all params
      77              :     async::Promise<TrackParams> params(const TrackId trackId) const override;
      78              : 
      79              :     // Set some params
      80              :     void setSourceParams(const TrackId trackId, const AudioSourceParams& params) override;
      81              :     void setControlParams(const TrackId trackId, const ControlParams& params) override;
      82              :     void setFxChainParams(const TrackId trackId, const AudioFxChain& params) override;
      83              :     void setAuxSendsParams(const TrackId trackId, const AuxSendsParams& params) override;
      84              : 
      85              :     // These parameters can be changed within the audio system.
      86              :     async::Channel<TrackId, AudioSourceParams> sourceParamsChanged() const override;
      87              :     async::Channel<TrackId, ControlParams> controlParamsChanged() const override;
      88              :     async::Channel<TrackId, AudioFxChain> fxChainParamsChanged() const override;
      89              :     async::Channel<TrackId, AuxSendsParams> auxSendsParamsChanged() const override;
      90              : 
      91              :     // Same for master
      92              :     async::Promise<TrackParams> masterParams() const override;
      93              :     void setMasterControlParams(const ControlParams& params) override;
      94              :     void setMasterFxChainParams(const AudioFxChain& params) override;
      95              :     void setMasterAuxSendsParams(const AuxSendsParams& params) override;
      96              :     async::Channel<ControlParams> masterControlParamsChanged() const override;
      97              :     async::Channel<AudioFxChain> masterFxChainParamsChanged() const override;
      98              :     async::Channel<AuxSendsParams> masterAuxSendsParamsChanged() const override;
      99              : 
     100              :     // Input processing
     101              :     void processInput(const TrackId trackId) const override;
     102              :     async::Promise<InputProcessingProgress> inputProcessingProgress(const TrackId trackId) const override;
     103              : 
     104              :     // Clear cache
     105              :     void clearCache(const TrackId trackId) const override;
     106              :     void clearSources() override;
     107              :     void clearMasterOutputParams() override;
     108              :     void clearAllFx() override;
     109              : 
     110              :     // Play
     111              :     IPlayerPtr player() const override;
     112              : 
     113              :     // Signal changes
     114              :     async::Promise<AudioSignalChanges> signalChanges(const TrackId trackId) const override;
     115              :     async::Promise<AudioSignalChanges> masterSignalChanges() const override;
     116              : 
     117              :     // Automation
     118              :     async::Promise<AutomatedControlParamsChanges> automatedControlParamsChanges(const TrackId trackId) const override;
     119              : 
     120              :     // Export
     121              :     async::Promise<bool> saveSoundTrack(const SoundTrackFormat& format, io::IODevice& dstDevice) override;
     122              :     void abortSavingAllSoundTracks() override;
     123              :     SaveSoundTrackProgress saveSoundTrackProgressChanged() const override;
     124              : 
     125              : private:
     126              : 
     127              :     rpc::CtxId ctxId() const;
     128              : 
     129              :     void addTrackStream(TrackId trackId, rpc::StreamId streamId) const;
     130              :     void removeTrackStreams(TrackId trackId) const;
     131              : 
     132              :     ValCh<bool> m_inited;
     133              : 
     134              :     async::Channel<TrackId> m_trackAdded;
     135              :     async::Channel<TrackId> m_trackRemoved;
     136              :     async::Channel<TrackId, AudioSourceParams> m_sourceParamsChanged;
     137              :     async::Channel<TrackId, ControlParams> m_controlParamsChanged;
     138              :     async::Channel<TrackId, AudioFxChain> m_fxChainParamsChanged;
     139              :     async::Channel<TrackId, AuxSendsParams> m_auxSendsParamsChanged;
     140              :     async::Channel<ControlParams> m_masterControlParamsChanged;
     141              :     async::Channel<AudioFxChain> m_masterFxChainParamsChanged;
     142              :     async::Channel<AuxSendsParams> m_masterAuxSendsParamsChanged;
     143              : 
     144              :     mutable bool m_saveSoundTrackProgressStreamInited = false;
     145              :     async::Channel<int64_t, int64_t, SaveSoundTrackStage> m_saveSoundTrackProgressStream;
     146              :     mutable rpc::StreamId m_saveSoundTrackProgressStreamId = 0;
     147              : 
     148              :     mutable std::shared_ptr<Player> m_player;
     149              : 
     150              :     //! NOTE The receive streams are removed on the track removal, on the deinit all streams of the context are removed by the channel
     151              :     mutable std::map<TrackId, std::vector<rpc::StreamId> > m_trackStreams;
     152              : };
     153              : }
        

Generated by: LCOV version 2.0-1