diff --git a/src/framework/audio/devtools/audioenginedevtools.cpp b/src/framework/audio/devtools/audioenginedevtools.cpp index 6c99ad35f729..1c75b36f60bf 100644 --- a/src/framework/audio/devtools/audioenginedevtools.cpp +++ b/src/framework/audio/devtools/audioenginedevtools.cpp @@ -163,14 +163,12 @@ void AudioEngineDevTools::stopSequencerMidi() void AudioEngineDevTools::playPlayerMidi() { makeArpeggio(); - m_threadMIDIPlayer = sequencer()->instantlyPlayMidi(m_midiStream->initData); + sequencer()->instantlyPlayMidi(m_midiStream->initData); } void AudioEngineDevTools::stopPlayerMidi() { - if (auto player = m_threadMIDIPlayer.lock()) { - player->stop(); - } + NOT_IMPLEMENTED; } void AudioEngineDevTools::play() diff --git a/src/framework/audio/internal/rpc/rpcsequencer.cpp b/src/framework/audio/internal/rpc/rpcsequencer.cpp index 389abc35d57b..82d2d61f9218 100644 --- a/src/framework/audio/internal/rpc/rpcsequencer.cpp +++ b/src/framework/audio/internal/rpc/rpcsequencer.cpp @@ -177,20 +177,11 @@ float RpcSequencer::playbackPosition() const return m_playbackPosition; } -ISequencer::MidiTrack RpcSequencer::instantlyPlayMidi(const midi::MidiData& data) +void RpcSequencer::instantlyPlayMidi(const midi::MidiData& data) { if (rpcChannel()->isSerialized()) { NOT_IMPLEMENTED; } else { rpcChannel()->send(Msg(m_target, "instantlyPlayMidi", Args::make_arg1(data))); } - - //! TODO It is necessary to remove the return of the pointer to the player object. - //! This is thread-unsafe code, see https://github.com/musescore/MuseScore/pull/6848#discussion_r558445611 - //! If we need to control this playback, then we need to - //! add the generation of the ID, - //! transfer it to the real sequencer, - //! return this ID from the method, - //! and add methods for control by passing this ID to them. - return nullptr; } diff --git a/src/framework/audio/internal/rpc/rpcsequencer.h b/src/framework/audio/internal/rpc/rpcsequencer.h index 4b22fd52979c..e95363d578ed 100644 --- a/src/framework/audio/internal/rpc/rpcsequencer.h +++ b/src/framework/audio/internal/rpc/rpcsequencer.h @@ -55,7 +55,7 @@ class RpcSequencer : public ISequencer async::Notification positionChanged() const override; async::Channel midiTickPlayed(TrackID id) const override; - MidiTrack instantlyPlayMidi(const midi::MidiData& data) override; + void instantlyPlayMidi(const midi::MidiData& data) override; private: Target m_target; diff --git a/src/framework/audio/internal/sequencer.cpp b/src/framework/audio/internal/sequencer.cpp index fa22b4443a72..68fc74daed75 100644 --- a/src/framework/audio/internal/sequencer.cpp +++ b/src/framework/audio/internal/sequencer.cpp @@ -251,10 +251,10 @@ Sequencer::AudioTrack Sequencer::audioTrack(TrackID id) const return nullptr; } -std::shared_ptr Sequencer::instantlyPlayMidi(const midi::MidiData& data) +void Sequencer::instantlyPlayMidi(const midi::MidiData& data) { if (!data.isValid()) { - return nullptr; + return; } auto player = std::make_shared(); auto midiStream = std::make_shared(); @@ -266,5 +266,4 @@ std::shared_ptr Sequencer::instantlyPlayMidi(const midi::MidiData& player->run(); m_backgroudPlayers.push_back({ 0 /*ms*/, player }); - return player; } diff --git a/src/framework/audio/internal/sequencer.h b/src/framework/audio/internal/sequencer.h index 04754bd048e6..bb6a8fd2715e 100644 --- a/src/framework/audio/internal/sequencer.h +++ b/src/framework/audio/internal/sequencer.h @@ -57,7 +57,7 @@ class Sequencer : public ISequencer, public async::Asyncable async::Notification positionChanged() const override; float playbackPosition() const override; - std::shared_ptr instantlyPlayMidi(const midi::MidiData& data) override; + void instantlyPlayMidi(const midi::MidiData& data) override; private: void setStatus(Status status); diff --git a/src/framework/audio/isequencer.h b/src/framework/audio/isequencer.h index fa39ff99a21a..a6c0187222cc 100644 --- a/src/framework/audio/isequencer.h +++ b/src/framework/audio/isequencer.h @@ -65,7 +65,8 @@ class ISequencer : MODULE_EXPORT_INTERFACE //!return position in seconds virtual float playbackPosition() const = 0; - virtual MidiTrack instantlyPlayMidi(const midi::MidiData& data) = 0; + + virtual void instantlyPlayMidi(const midi::MidiData& data) = 0; }; using ISequencerPtr = std::shared_ptr; diff --git a/thirdparty/stb/stb_vorbis.c b/thirdparty/stb/stb_vorbis.c index a8cbfa6c23aa..b0348bdfd74d 100644 --- a/thirdparty/stb/stb_vorbis.c +++ b/thirdparty/stb/stb_vorbis.c @@ -3055,7 +3055,7 @@ typedef int16 YTYPE; #else typedef int YTYPE; #endif -static int do_floor(vorb *f, Mapping *map, int i, int n, float *target, YTYPE *finalY, uint8 *step2_flag) +static int do_floor(vorb *f, Mapping *map, int i, int n, float *target, YTYPE *finalY, uint8 */*step2_flag*/) { int n2 = n >> 1; int s = map->chan[i].mux, floor; @@ -3162,7 +3162,7 @@ static int vorbis_decode_initial(vorb *f, int *p_left_start, int *p_left_end, in return TRUE; } -static int vorbis_decode_packet_rest(vorb *f, int *len, Mode *m, int left_start, int left_end, int right_start, int right_end, int *p_left) +static int vorbis_decode_packet_rest(vorb *f, int *len, Mode *m, int left_start, int /*left_end*/, int right_start, int right_end, int *p_left) { Mapping *map; int i,j,k,n,n2;