[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-commits
Subject:    [minuet/refactoring] src: Fix some bugs in drumsticksoundbackend
From:       Sandro S. Andrade <sandroandrade () kde ! org>
Date:       2016-07-01 0:19:18
Message-ID: E1bImAw-00054M-DM () code ! kde ! org
[Download RAW message or body]

Git commit 3f7fbacf6d0b317f05233d778c116cd4f15c435c by Sandro S. Andrade.
Committed on 01/07/2016 at 00:19.
Pushed by sandroandrade into branch 'refactoring'.

Fix some bugs in drumsticksoundbackend

M  +14   -2    src/interfaces/isoundbackend.h
M  +39   -10   src/plugins/drumsticksoundbackend/drumsticksoundbackend.cpp
M  +3    -1    src/plugins/drumsticksoundbackend/drumsticksoundbackend.h
M  +6    -2    src/plugins/fluidsynthsoundbackend/fluidsynthsoundbackend.cpp
M  +3    -1    src/plugins/fluidsynthsoundbackend/fluidsynthsoundbackend.h
M  +2    -0    src/shell/exercisecontroller.cpp
M  +5    -3    src/shell/qml/MinuetMenu.qml
M  +2    -1    src/shell/qml/midiplayer/MidiPlayer.qml
M  +2    -0    src/shell/uicontroller.cpp

http://commits.kde.org/minuet/3f7fbacf6d0b317f05233d778c116cd4f15c435c

diff --git a/src/interfaces/isoundbackend.h b/src/interfaces/isoundbackend.h
index 1bd63fe..091b892 100644
--- a/src/interfaces/isoundbackend.h
+++ b/src/interfaces/isoundbackend.h
@@ -38,8 +38,10 @@ class MINUETINTERFACES_EXPORT ISoundBackend : public IPlugin
 
     Q_PROPERTY(int pitch MEMBER m_pitch NOTIFY pitchChanged)
     Q_PROPERTY(quint8 volume MEMBER m_volume NOTIFY volumeChanged)
-    Q_PROPERTY(quint8 tempo MEMBER m_tempo NOTIFY tempoChanged)
+    Q_PROPERTY(quint8 tempo MEMBER m_tempo WRITE setTempo NOTIFY tempoChanged)
     Q_PROPERTY(QString playbackLabel READ playbackLabel NOTIFY playbackLabelChanged)
+    Q_ENUMS(PlayMode)
+    Q_PROPERTY(PlayMode playMode MEMBER m_playMode NOTIFY playModeChanged)
     Q_ENUMS(State)
     Q_PROPERTY(State state READ state NOTIFY stateChanged)
 
@@ -48,6 +50,12 @@ public:
 
     QString playbackLabel() const;
 
+    enum PlayMode {
+        ScalePlayMode = 0,
+        ChordPlayMode,
+        RhythmPlayMode
+    };
+
     enum State {
         StoppedState = 0,
         PlayingState,
@@ -57,7 +65,9 @@ public:
     ISoundBackend::State state() const;
 
 public Q_SLOTS:
-    virtual void prepareFromExerciseOptions(QJsonArray selectedOptions, const \
QString &playMode) = 0; +    virtual void setTempo (quint8 tempo) = 0;
+
+    virtual void prepareFromExerciseOptions(QJsonArray selectedOptions) = 0;
     virtual void prepareFromMidiFile(const QString &fileName) = 0;
 
     virtual void play() = 0;
@@ -70,6 +80,7 @@ Q_SIGNALS:
     void tempoChanged(quint8 newTempo);
     void playbackLabelChanged(QString newPlaybackLabel);
     void stateChanged(State newState);
+    void playModeChanged(PlayMode newPlayMode);
 
 protected:
     explicit ISoundBackend(QObject *parent = 0);
@@ -81,6 +92,7 @@ protected:
     quint8 m_tempo;
     QString m_playbackLabel;
     State m_state;
+    PlayMode m_playMode;
 };
 
 }
diff --git a/src/plugins/drumsticksoundbackend/drumsticksoundbackend.cpp \
b/src/plugins/drumsticksoundbackend/drumsticksoundbackend.cpp index 6c19926..3da178d \
                100644
--- a/src/plugins/drumsticksoundbackend/drumsticksoundbackend.cpp
+++ b/src/plugins/drumsticksoundbackend/drumsticksoundbackend.cpp
@@ -34,7 +34,7 @@
 
 DrumstickSoundBackend::DrumstickSoundBackend(QObject *parent)
     : Minuet::ISoundBackend(parent),
-    m_song(0)
+      m_song(0)
 {
     // MidiClient configuration
     m_client = new drumstick::MidiClient(this);
@@ -60,7 +60,7 @@ DrumstickSoundBackend::DrumstickSoundBackend(QObject *parent)
     m_client->setRealTimeInput(false);
     m_client->startSequencerInput();
 
-    // Output port configuration
+    // Output port configuration (to TiMidity)
     m_outputPort = new drumstick::MidiPort(this);
     m_outputPort->attach(m_client);
     m_outputPort->setPortName(QStringLiteral("Minuet Sequencer Output Port"));
@@ -68,7 +68,7 @@ DrumstickSoundBackend::DrumstickSoundBackend(QObject *parent)
     m_outputPort->setPortType(SND_SEQ_PORT_TYPE_APPLICATION | \
SND_SEQ_PORT_TYPE_MIDI_GENERIC);  m_outputPortId = m_outputPort->getPortId();
 
-    // Input port configuration
+    // Input port configuration (from ALSA)
     m_inputPort = new drumstick::MidiPort(this);
     m_inputPort->attach(m_client);
     m_inputPort->setPortName(QStringLiteral("Minuet Sequencer Input Port"));
@@ -88,6 +88,15 @@ DrumstickSoundBackend::DrumstickSoundBackend(QObject *parent)
         setState(StoppedState);
     });
 
+    // Subscribe to Minuet's virtual piano
+    try {
+        m_outputPort->subscribeTo(QStringLiteral("MinuetSequencer:1"));
+    } catch (const drumstick::SequencerError &err) {
+        qCDebug(MINUET) << "Subscribe error";
+        throw err;
+    }
+    setPlaybackLabel(QStringLiteral("00:00.00"));
+
     startTimidity();
     m_outputPort->subscribeTo("TiMidity:0");
 }
@@ -99,9 +108,29 @@ DrumstickSoundBackend::~DrumstickSoundBackend()
     m_inputPort->detach();
     m_client->close();
     delete m_midiSequencerOutputThread;
+    m_timidityProcess.kill();
+    qCDebug(MINUET) << "Stoping TiMidity++!";
+    if (!m_timidityProcess.waitForFinished(-1))
+        qCDebug(MINUET) << "Error when stoping TiMidity++:" << \
m_timidityProcess.errorString(); +    else
+        qCDebug(MINUET) << "TiMidity++ stoped!";
+}
+
+void DrumstickSoundBackend::setTempo (quint8 tempo)
+{
+    float tempoFactor = (tempo*tempo + 100.0*tempo + 20000.0) / 40000.0;
+    m_midiSequencerOutputThread->setTempoFactor(tempoFactor);
+
+    drumstick::QueueTempo queueTempo = m_queue->getTempo();
+    queueTempo.setTempoFactor(tempoFactor);
+    m_queue->setTempo(queueTempo);
+    m_client->drainOutput();
+
+    m_tempo = tempo;
+    emit tempoChanged(m_tempo);
 }
 
-void DrumstickSoundBackend::prepareFromExerciseOptions(QJsonArray selectedOptions, \
const QString &playMode) +void \
DrumstickSoundBackend::prepareFromExerciseOptions(QJsonArray selectedOptions)  {
     Song *song = new Song;
     song->setHeader(0, 1, 60);
@@ -113,7 +142,7 @@ void DrumstickSoundBackend::prepareFromExerciseOptions(QJsonArray \
selectedOption  appendEvent(new drumstick::TempoEvent(m_queueId, 600000), 0);
 
     unsigned int barStart = 0;
-    if (playMode == "rhythm") {
+    if (m_playMode == RhythmPlayMode) {
         appendEvent(new drumstick::NoteOnEvent(9, 80, 120), 0);
         appendEvent(new drumstick::NoteOnEvent(9, 80, 120), 60);
         appendEvent(new drumstick::NoteOnEvent(9, 80, 120), 120);
@@ -125,18 +154,18 @@ void \
                DrumstickSoundBackend::prepareFromExerciseOptions(QJsonArray \
                selectedOption
         QString sequence = \
selectedOptions[i].toObject()[QStringLiteral("sequence")].toString();  
         unsigned int chosenRootNote = \
                selectedOptions[i].toObject()[QStringLiteral("rootNote")].toString().toInt();
                
-        if (playMode != "rhythm") {
+        if (m_playMode != RhythmPlayMode) {
              appendEvent(new drumstick::NoteOnEvent(1, chosenRootNote, 120), \
                barStart);
-             appendEvent(new drumstick::NoteOnEvent(1, chosenRootNote, 120), \
barStart + 60); +             appendEvent(new drumstick::NoteOffEvent(1, \
chosenRootNote, 120), barStart + 60);  
             unsigned int j = 1;
             drumstick::SequencerEvent *ev;
             foreach(const QString &additionalNote, sequence.split(' ')) {
                 appendEvent(ev = new drumstick::NoteOnEvent(1, chosenRootNote + \
                additionalNote.toInt(), 120),
-                                                            (playMode == "scale") ? \
barStart+60*j:barStart); +                                                            \
(m_playMode == ScalePlayMode) ? barStart+60*j:barStart);  ev->setTag(0);
                 appendEvent(ev = new drumstick::NoteOffEvent(1, chosenRootNote + \
                additionalNote.toInt(), 120),
-                                                             (playMode == "scale") ? \
barStart+60*(j+1):barStart+60); +                                                     \
(m_playMode == ScalePlayMode) ? barStart+60*(j+1):barStart+60);  ev->setTag(0);
                 ++j;
             }
@@ -155,7 +184,7 @@ void DrumstickSoundBackend::prepareFromExerciseOptions(QJsonArray \
selectedOption  }
         }
     }
-    if (playMode == "rhythm")
+    if (m_playMode == RhythmPlayMode)
         appendEvent(new drumstick::NoteOnEvent(9, 80, 120), barStart);
 }
 
diff --git a/src/plugins/drumsticksoundbackend/drumsticksoundbackend.h \
b/src/plugins/drumsticksoundbackend/drumsticksoundbackend.h index 7ce1c15..68f73ff \
                100644
--- a/src/plugins/drumsticksoundbackend/drumsticksoundbackend.h
+++ b/src/plugins/drumsticksoundbackend/drumsticksoundbackend.h
@@ -55,7 +55,9 @@ public:
     virtual ~DrumstickSoundBackend() override;
 
 public Q_SLOTS:
-    virtual void prepareFromExerciseOptions(QJsonArray selectedOptions, const \
QString &playMode) override; +    virtual void setTempo (quint8 tempo);
+
+    virtual void prepareFromExerciseOptions(QJsonArray selectedOptions) override;
     virtual void prepareFromMidiFile(const QString &fileName) override;
 
     virtual void play() override;
diff --git a/src/plugins/fluidsynthsoundbackend/fluidsynthsoundbackend.cpp \
b/src/plugins/fluidsynthsoundbackend/fluidsynthsoundbackend.cpp index \
                9b6a98f..a2dc3f9 100644
--- a/src/plugins/fluidsynthsoundbackend/fluidsynthsoundbackend.cpp
+++ b/src/plugins/fluidsynthsoundbackend/fluidsynthsoundbackend.cpp
@@ -31,10 +31,14 @@ FluidSynthSoundBackend::~FluidSynthSoundBackend()
 {
 }
 
-void FluidSynthSoundBackend::prepareFromExerciseOptions(QJsonArray selectedOptions, \
const QString &playMode) +void FluidSynthSoundBackend::setTempo (quint8 tempo)
+{
+    Q_UNUSED(tempo);
+}
+
+void FluidSynthSoundBackend::prepareFromExerciseOptions(QJsonArray selectedOptions)
 {
     Q_UNUSED(selectedOptions)
-    Q_UNUSED(playMode)
 }
 
 void FluidSynthSoundBackend::prepareFromMidiFile(const QString &fileName)
diff --git a/src/plugins/fluidsynthsoundbackend/fluidsynthsoundbackend.h \
b/src/plugins/fluidsynthsoundbackend/fluidsynthsoundbackend.h index 4dcf4b7..1595679 \
                100644
--- a/src/plugins/fluidsynthsoundbackend/fluidsynthsoundbackend.h
+++ b/src/plugins/fluidsynthsoundbackend/fluidsynthsoundbackend.h
@@ -38,7 +38,9 @@ public:
     virtual ~FluidSynthSoundBackend() override;
 
 public Q_SLOTS:
-    virtual void prepareFromExerciseOptions(QJsonArray selectedOptions, const \
QString &playMode) override; +    virtual void setTempo (quint8 tempo);
+
+    virtual void prepareFromExerciseOptions(QJsonArray selectedOptions) override;
     virtual void prepareFromMidiFile(const QString &fileName) override;
 
     virtual void play() override;
diff --git a/src/shell/exercisecontroller.cpp b/src/shell/exercisecontroller.cpp
index 77b32d6..f6095d8 100644
--- a/src/shell/exercisecontroller.cpp
+++ b/src/shell/exercisecontroller.cpp
@@ -51,6 +51,8 @@ ExerciseController::~ExerciseController()
 
 bool ExerciseController::initialize(Core *core)
 {
+    Q_UNUSED(core)
+
     bool definitionsMerge = mergeJsonFiles("definitions", m_definitions);
     bool exercisesMerge = mergeJsonFiles("exercises", m_exercises, true, "name", \
"children");  
diff --git a/src/shell/qml/MinuetMenu.qml b/src/shell/qml/MinuetMenu.qml
index 6fb1fe9..5df0cbe 100644
--- a/src/shell/qml/MinuetMenu.qml
+++ b/src/shell/qml/MinuetMenu.qml
@@ -24,6 +24,8 @@ import QtQuick 2.4
 import QtQuick.Controls 1.3
 import QtQuick.Controls.Styles 1.1
 
+import org.kde.minuet 1.0
+
 Item {
     id: minuetMenu
 
@@ -95,11 +97,11 @@ Item {
                         }
                         var playMode = \
delegateRect.ListView.view.model[index].playMode  if (playMode != undefined) {
-//                            if (playMode == "scale") sequencer.setPlayMode(0) // \
                ScalePlayMode
-//                            if (playMode == "chord") sequencer.setPlayMode(1) // \
ChordPlayMode +                            if (playMode == "scale") \
core.soundBackend.playMode = ISoundBackend.ScalePlayMode +                            \
if (playMode == "chord") core.soundBackend.playMode = ISoundBackend.ChordPlayMode  \
core.exerciseController.answerLength = 1  if (playMode == "rhythm") {
-                                core.exerciseController.setPlayMode(2) // \
RhythmPlayMode +                                core.soundBackend.playMode = \
ISoundBackend.RhythmPlayMode  core.exerciseController.answerLength = 4
                             }
                         }
diff --git a/src/shell/qml/midiplayer/MidiPlayer.qml \
b/src/shell/qml/midiplayer/MidiPlayer.qml index 16b5af3..a075254 100644
--- a/src/shell/qml/midiplayer/MidiPlayer.qml
+++ b/src/shell/qml/midiplayer/MidiPlayer.qml
@@ -22,6 +22,7 @@
 
 import QtQuick 2.4
 import org.kde.plasma.core 2.0 as PlasmaCore
+
 import org.kde.minuet 1.0
 
 Rectangle {
@@ -92,7 +93,7 @@ Rectangle {
             text: (sequencerState != ISoundBackend.PlayingState) ? \
                i18n("Play"):i18n("Pause")
             source: (sequencerState != ISoundBackend.PlayingState) ? \
"../images/multimedia-play.png":"../images/multimedia-pause.png"  onActivated: {
-                if (sequencerState == ISoundBackend.StoppedState || sequencerState \
== MidiSequencer.PausedState) +                if (sequencerState == \
ISoundBackend.StoppedState || sequencerState == ISoundBackend.PausedState)  \
playActivated()  else
                     pauseActivated()
diff --git a/src/shell/uicontroller.cpp b/src/shell/uicontroller.cpp
index 1a09f93..ecabc2b 100644
--- a/src/shell/uicontroller.cpp
+++ b/src/shell/uicontroller.cpp
@@ -39,6 +39,8 @@ UiController::~UiController()
 
 bool UiController::initialize(Core *core)
 {
+    Q_UNUSED(core);
+
     m_mainWindow->show();
     return true;
 }


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic