fixed different issues in the audio module

This commit is contained in:
Igor Korsukov 2021-01-20 17:14:24 +02:00
parent a9aaefa2ab
commit bcfe9ac9ce
7 changed files with 11 additions and 22 deletions

View file

@ -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()

View file

@ -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<midi::MidiData>(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;
}

View file

@ -55,7 +55,7 @@ public:
async::Notification positionChanged() const override;
async::Channel<mu::midi::tick_t> midiTickPlayed(TrackID id) const override;
MidiTrack instantlyPlayMidi(const midi::MidiData& data) override;
void instantlyPlayMidi(const midi::MidiData& data) override;
private:
Target m_target;

View file

@ -251,10 +251,10 @@ Sequencer::AudioTrack Sequencer::audioTrack(TrackID id) const
return nullptr;
}
std::shared_ptr<IMIDIPlayer> Sequencer::instantlyPlayMidi(const midi::MidiData& data)
void Sequencer::instantlyPlayMidi(const midi::MidiData& data)
{
if (!data.isValid()) {
return nullptr;
return;
}
auto player = std::make_shared<MIDIPlayer>();
auto midiStream = std::make_shared<midi::MidiStream>();
@ -266,5 +266,4 @@ std::shared_ptr<IMIDIPlayer> Sequencer::instantlyPlayMidi(const midi::MidiData&
player->run();
m_backgroudPlayers.push_back({ 0 /*ms*/, player });
return player;
}

View file

@ -57,7 +57,7 @@ public:
async::Notification positionChanged() const override;
float playbackPosition() const override;
std::shared_ptr<IMIDIPlayer> instantlyPlayMidi(const midi::MidiData& data) override;
void instantlyPlayMidi(const midi::MidiData& data) override;
private:
void setStatus(Status status);

View file

@ -65,7 +65,8 @@ public:
//!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<ISequencer>;

View file

@ -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;