Skip to content

Commit c1199c7

Browse files
committed
fixed audio export process
1 parent 67166fb commit c1199c7

File tree

11 files changed

+36
-4
lines changed

11 files changed

+36
-4
lines changed

src/framework/audio/engine/internal/synthesizers/fluidsynth/fluidsynth.cpp

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -336,7 +336,9 @@ void FluidSynth::setupSound(const PlaybackSetupData& setupData)
336336
fluid_synth_activate_tuning(m_fluid->synth, channelIdx, 0, 0, 0);
337337
};
338338

339-
m_sequencer.channelAdded().onReceive(this, setupChannel);
339+
m_sequencer.channelAdded().onReceive(this, setupChannel,
340+
async::Asyncable::Mode::SetReplace);
341+
340342
m_sequencer.init(setupData, m_preset, setupData.supportsSingleNoteDynamics);
341343

342344
for (const auto& voice : m_sequencer.channels().data()) {

src/framework/global/iapplication.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,8 @@ class IApplication : MODULE_EXPORT_INTERFACE
6666
virtual const modularity::ContextPtr iocContext() const = 0;
6767
virtual modularity::ModulesIoC* ioc() const = 0;
6868

69+
virtual void processEvents() = 0;
70+
6971
#ifndef NO_QT_SUPPORT
7072
virtual QWindow* focusWindow() const = 0;
7173
virtual bool notify(QObject* object, QEvent* event) = 0;

src/framework/global/internal/baseapplication.cpp

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -186,3 +186,9 @@ void BaseApplication::removeIoC()
186186
modularity::_ioc(m_iocContext)->reset();
187187
modularity::removeIoC(m_iocContext);
188188
}
189+
190+
void BaseApplication::processEvents()
191+
{
192+
qApp->processEvents();
193+
tickerProvider()->forceSchedule();
194+
}

src/framework/global/internal/baseapplication.h

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,9 +24,13 @@
2424

2525
#include "../iapplication.h"
2626

27+
#include "modularity/ioc.h"
28+
#include "global/itickerprovider.h"
29+
2730
namespace muse {
2831
class BaseApplication : public IApplication
2932
{
33+
Inject<ITickerProvider> tickerProvider;
3034
public:
3135

3236
BaseApplication(const modularity::ContextPtr& ctx);
@@ -56,6 +60,8 @@ class BaseApplication : public IApplication
5660
const modularity::ContextPtr iocContext() const override;
5761
modularity::ModulesIoC* ioc() const override;
5862

63+
void processEvents() override;
64+
5965
#ifndef NO_QT_SUPPORT
6066
QWindow* focusWindow() const override;
6167
bool notify(QObject* object, QEvent* event) override;

src/framework/global/internal/tickerprovider.cpp

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,15 @@ void TickerProvider::stop()
5656
}
5757
}
5858

59+
void TickerProvider::forceSchedule()
60+
{
61+
if (!m_timer) {
62+
start();
63+
} else if (!m_timer->isActive()) {
64+
m_timer->start();
65+
}
66+
}
67+
5968
void TickerProvider::addPending()
6069
{
6170
for (const auto& p : m_pendingToAdd) {

src/framework/global/internal/tickerprovider.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ class TickerProvider : public ITickerProvider
3535

3636
void start() override;
3737
void stop() override;
38+
void forceSchedule() override;
3839

3940
uint32_t /*id*/ addTask(const Task& task) override;
4041
void removeTask(const uint32_t& taskId) override;

src/framework/global/itickerprovider.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ class ITickerProvider : MODULE_EXPORT_INTERFACE
4040

4141
virtual void start() = 0;
4242
virtual void stop() = 0;
43+
virtual void forceSchedule() = 0;
4344

4445
virtual uint32_t /*id*/ addTask(const Task& task) = 0;
4546
virtual void removeTask(const uint32_t& taskId) = 0;

src/framework/global/tests/mocks/applicationmock.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,7 @@ class ApplicationMock : public IApplication
5656

5757
MOCK_METHOD(const modularity::ContextPtr, iocContext, (), (const, override));
5858
MOCK_METHOD(modularity::ModulesIoC*, ioc, (), (const, override));
59+
MOCK_METHOD(void, processEvents, (), (override));
5960
};
6061
}
6162

src/importexport/audioexport/internal/abstractaudiowriter.cpp

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,7 @@ Ret AbstractAudioWriter::writeList(const INotationPtrList&, io::IODevice&, const
8080
void AbstractAudioWriter::abort()
8181
{
8282
playback()->abortSavingAllSoundTracks();
83+
m_isCompleted = true;
8384
}
8485

8586
muse::Progress* AbstractAudioWriter::progress()
@@ -130,7 +131,7 @@ Ret AbstractAudioWriter::doWriteAndWait(INotationPtr notation,
130131
});
131132

132133
while (!m_isCompleted) {
133-
qApp->processEvents();
134+
application()->processEvents();
134135
QThread::yieldCurrentThread();
135136
}
136137

@@ -165,8 +166,9 @@ void AbstractAudioWriter::doWrite(const QString& path, const SoundTrackFormat& f
165166
});
166167
}
167168
})
168-
.onReject(this, [](int errorCode, const std::string& msg) {
169+
.onReject(this, [this](int errorCode, const std::string& msg) {
169170
LOGE() << "errorCode: " << errorCode << ", " << msg;
171+
m_isCompleted = true;
170172
});
171173
}
172174

src/importexport/audioexport/internal/abstractaudiowriter.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
#include "iaudioexportconfiguration.h"
2929
#include "context/iglobalcontext.h"
3030
#include "playback/iplaybackcontroller.h"
31+
#include "global/iapplication.h"
3132

3233
#include "project/inotationwriter.h"
3334

@@ -39,6 +40,7 @@ class AbstractAudioWriter : public project::INotationWriter, public muse::Inject
3940
muse::Inject<IAudioExportConfiguration> configuration = { this };
4041
muse::Inject<context::IGlobalContext> globalContext = { this };
4142
muse::Inject<playback::IPlaybackController> playbackController = { this };
43+
muse::Inject<muse::IApplication> application = { this };
4244

4345
public:
4446
AbstractAudioWriter(const muse::modularity::ContextPtr& iocCtx)

0 commit comments

Comments
 (0)