From b2f688c17880274f05dcc101c4f2a0dcb3c5c06e Mon Sep 17 00:00:00 2001 From: 0xFEEDC0DE64 Date: Tue, 27 Dec 2022 21:19:21 +0100 Subject: [PATCH] Add tab for loop station --- DrumMachine.pro | 15 +++-- audioformat.h | 4 +- audioplayer.cpp | 2 + audioplayer.h | 2 +- filesmodel.cpp => drumpadfilesmodel.cpp | 20 +++--- filesmodel.h => drumpadfilesmodel.h | 16 ++--- presets.cpp => drumpadpresets.cpp | 4 +- presets.h => drumpadpresets.h | 4 +- presetsmodel.cpp => drumpadpresetsmodel.cpp | 68 ++++++++++----------- drumpadpresetsmodel.h | 36 +++++++++++ graphrenderer.cpp | 4 ++ graphrenderer.h | 6 +- jsonconverters.cpp | 56 ++++++++--------- jsonconverters.h | 30 ++++----- presetsmodel.h | 36 ----------- synthisizer.cpp | 2 + synthisizer.h | 2 +- widgets/djwidget.cpp | 3 + widgets/djwidget.h | 4 +- widgets/djwidget.ui | 3 - widgets/drumpadwidget.cpp | 3 +- widgets/drumpadwidget.h | 10 +-- widgets/loopstationwidget.cpp | 48 +++++++++++++++ widgets/loopstationwidget.h | 36 +++++++++++ widgets/loopstationwidget.ui | 29 +++++++++ widgets/mainwindow.cpp | 19 ++++-- widgets/mainwindow.h | 3 +- widgets/mainwindow.ui | 11 ++++ widgets/presetdetailwidget.cpp | 2 +- widgets/presetdetailwidget.h | 4 +- widgets/previewwidget.cpp | 1 + widgets/sampleswidget.cpp | 3 +- widgets/sampleswidget.h | 8 +-- widgets/sampleswidget.ui | 3 - widgets/samplewidget.cpp | 3 +- widgets/samplewidget.h | 8 +-- widgets/samplewidget.ui | 3 - widgets/scratchwidget.cpp | 4 +- widgets/scratchwidget.h | 4 +- widgets/sequencerwidget.cpp | 8 +-- widgets/sequencerwidget.h | 8 +-- widgets/sequencerwidget.ui | 3 - widgets/synthisizerwidget.cpp | 1 + widgets/synthisizerwidget.h | 2 +- widgets/synthisizerwidget.ui | 3 - widgets/trackdeck.cpp | 1 + widgets/trackdeck.h | 2 +- widgets/trackdeck.ui | 3 - 48 files changed, 346 insertions(+), 204 deletions(-) rename filesmodel.cpp => drumpadfilesmodel.cpp (77%) rename filesmodel.h => drumpadfilesmodel.h (51%) rename presets.cpp => drumpadpresets.cpp (82%) rename presets.h => drumpadpresets.h (95%) rename presetsmodel.cpp => drumpadpresetsmodel.cpp (71%) create mode 100755 drumpadpresetsmodel.h delete mode 100755 presetsmodel.h create mode 100644 widgets/loopstationwidget.cpp create mode 100644 widgets/loopstationwidget.h create mode 100644 widgets/loopstationwidget.ui diff --git a/DrumMachine.pro b/DrumMachine.pro index 6ca849f..d4cccd8 100755 --- a/DrumMachine.pro +++ b/DrumMachine.pro @@ -15,19 +15,20 @@ SOURCES += \ audioformat.cpp \ audioplayer.cpp \ drummachinesettings.cpp \ - filesmodel.cpp \ + drumpadfilesmodel.cpp \ + drumpadpresets.cpp \ + drumpadpresetsmodel.cpp \ graphrenderer.cpp \ jsonconverters.cpp \ main.cpp \ midicontainers.cpp \ midiinwrapper.cpp \ midioutwrapper.cpp \ - presets.cpp \ - presetsmodel.cpp \ synthisizer.cpp \ treetotableproxymodel.cpp \ widgets/djwidget.cpp \ widgets/drumpadwidget.cpp \ + widgets/loopstationwidget.cpp \ widgets/mainwindow.cpp \ widgets/midibutton.cpp \ widgets/presetdetailwidget.cpp \ @@ -44,18 +45,19 @@ HEADERS += \ audioformat.h \ audioplayer.h \ drummachinesettings.h \ - filesmodel.h \ + drumpadfilesmodel.h \ + drumpadpresets.h \ + drumpadpresetsmodel.h \ graphrenderer.h \ jsonconverters.h \ midicontainers.h \ midiinwrapper.h \ midioutwrapper.h \ - presets.h \ - presetsmodel.h \ synthisizer.h \ treetotableproxymodel.h \ widgets/djwidget.h \ widgets/drumpadwidget.h \ + widgets/loopstationwidget.h \ widgets/mainwindow.h \ widgets/midibutton.h \ widgets/presetdetailwidget.h \ @@ -70,6 +72,7 @@ HEADERS += \ FORMS += \ widgets/djwidget.ui \ widgets/drumpadwidget.ui \ + widgets/loopstationwidget.ui \ widgets/mainwindow.ui \ widgets/presetdetailwidget.ui \ widgets/sampleswidget.ui \ diff --git a/audioformat.h b/audioformat.h index 5d57bf6..8514da9 100644 --- a/audioformat.h +++ b/audioformat.h @@ -2,6 +2,8 @@ #include +#include + static constexpr int frameRate = 44100; static constexpr int channelCount = 2; static constexpr int sampleSize = 32; @@ -9,6 +11,6 @@ static constexpr auto codec = "audio/pcm"; static constexpr QAudioFormat::Endian byteOrder = QAudioFormat::LittleEndian; static constexpr QAudioFormat::SampleType sampleType = QAudioFormat::Float; using sample_t = float; -using frame_t = std::array; +struct frame_t : std::array {}; const QAudioFormat &audioFormat(); diff --git a/audioplayer.cpp b/audioplayer.cpp index 5437eb1..83d52e8 100644 --- a/audioplayer.cpp +++ b/audioplayer.cpp @@ -3,6 +3,8 @@ #include #include +#include "audioformat.h" + AudioPlayer::AudioPlayer(QObject *parent) : QObject{parent} { diff --git a/audioplayer.h b/audioplayer.h index 2ba4b14..3336f7d 100644 --- a/audioplayer.h +++ b/audioplayer.h @@ -8,7 +8,7 @@ #include #include -#include "audioformat.h" +struct frame_t; class AudioPlayer : public QObject { diff --git a/filesmodel.cpp b/drumpadfilesmodel.cpp similarity index 77% rename from filesmodel.cpp rename to drumpadfilesmodel.cpp index 5fc8a4a..b0ede40 100755 --- a/filesmodel.cpp +++ b/drumpadfilesmodel.cpp @@ -1,4 +1,4 @@ -#include "filesmodel.h" +#include "drumpadfilesmodel.h" #include @@ -14,26 +14,26 @@ enum { NumberOfColumns }; -FilesModel::~FilesModel() = default; +DrumPadFilesModel::~DrumPadFilesModel() = default; -const presets::File &FilesModel::getFile(const QModelIndex &index) const +const drumpad_presets::File &DrumPadFilesModel::getFile(const QModelIndex &index) const { return getFile(index.row()); } -const presets::File &FilesModel::getFile(int row) const +const drumpad_presets::File &DrumPadFilesModel::getFile(int row) const { return m_files->at(row); } -void FilesModel::setPreset(const presets::Preset &preset) +void DrumPadFilesModel::setPreset(const drumpad_presets::Preset &preset) { beginResetModel(); m_files = preset.files; endResetModel(); } -int FilesModel::rowCount(const QModelIndex &parent) const +int DrumPadFilesModel::rowCount(const QModelIndex &parent) const { Q_UNUSED(parent) @@ -43,14 +43,14 @@ int FilesModel::rowCount(const QModelIndex &parent) const return std::size(*m_files); } -int FilesModel::columnCount(const QModelIndex &parent) const +int DrumPadFilesModel::columnCount(const QModelIndex &parent) const { Q_UNUSED(parent) return NumberOfColumns; } -QVariant FilesModel::data(const QModelIndex &index, int role) const +QVariant DrumPadFilesModel::data(const QModelIndex &index, int role) const { if (role != Qt::DisplayRole && role != Qt::EditRole && role != Qt::FontRole && role != Qt::ForegroundRole) return {}; @@ -63,7 +63,7 @@ QVariant FilesModel::data(const QModelIndex &index, int role) const return {}; if (index.row() < 0) return {}; - if (index.row() >= std::size(*m_files)) + if (index.row() >= int(std::size(*m_files))) return {}; const auto &file = getFile(index); @@ -103,7 +103,7 @@ QVariant FilesModel::data(const QModelIndex &index, int role) const Q_UNREACHABLE(); } -QVariant FilesModel::headerData(int section, Qt::Orientation orientation, int role) const +QVariant DrumPadFilesModel::headerData(int section, Qt::Orientation orientation, int role) const { if (role != Qt::DisplayRole && role != Qt::EditRole) return {}; diff --git a/filesmodel.h b/drumpadfilesmodel.h similarity index 51% rename from filesmodel.h rename to drumpadfilesmodel.h index 677022d..2f17fe1 100755 --- a/filesmodel.h +++ b/drumpadfilesmodel.h @@ -4,22 +4,22 @@ #include -#include "presets.h" +#include "drumpadpresets.h" -namespace presets { class Preset; class File; } +namespace drumpad_presets { class Preset; class File; } -class FilesModel : public QAbstractTableModel +class DrumPadFilesModel : public QAbstractTableModel { Q_OBJECT public: using QAbstractTableModel::QAbstractTableModel; - ~FilesModel() override; + ~DrumPadFilesModel() override; - const presets::File &getFile(const QModelIndex &index) const; - const presets::File &getFile(int row) const; + const drumpad_presets::File &getFile(const QModelIndex &index) const; + const drumpad_presets::File &getFile(int row) const; - void setPreset(const presets::Preset &preset); + void setPreset(const drumpad_presets::Preset &preset); int rowCount(const QModelIndex &parent) const override; int columnCount(const QModelIndex &parent) const override; @@ -27,5 +27,5 @@ public: QVariant headerData(int section, Qt::Orientation orientation, int role) const override; private: - std::optional> m_files; + std::optional> m_files; }; diff --git a/presets.cpp b/drumpadpresets.cpp similarity index 82% rename from presets.cpp rename to drumpadpresets.cpp index 4cdf931..164d977 100755 --- a/presets.cpp +++ b/drumpadpresets.cpp @@ -1,6 +1,6 @@ -#include "presets.h" +#include "drumpadpresets.h" -namespace presets +namespace drumpad_presets { bool File::operator==(const File &other) const diff --git a/presets.h b/drumpadpresets.h similarity index 95% rename from presets.h rename to drumpadpresets.h index bf2539e..c17ea53 100755 --- a/presets.h +++ b/drumpadpresets.h @@ -8,7 +8,7 @@ #include #include -namespace presets +namespace drumpad_presets { struct Filter { @@ -73,7 +73,7 @@ struct Preset std::optional imagePreview1; std::optional videoPreview; std::optional videoTutorial; - std::optional> files; + std::optional> files; std::optional>> beatSchool; std::optional>> easyPlay; std::optional timestamp; diff --git a/presetsmodel.cpp b/drumpadpresetsmodel.cpp similarity index 71% rename from presetsmodel.cpp rename to drumpadpresetsmodel.cpp index 0917f66..a1f8901 100755 --- a/presetsmodel.cpp +++ b/drumpadpresetsmodel.cpp @@ -1,11 +1,11 @@ -#include "presetsmodel.h" +#include "drumpadpresetsmodel.h" #include #include #include -#include "presets.h" +#include "drumpadpresets.h" enum { ColumnId, @@ -32,96 +32,96 @@ enum { NumberOfColumns }; -PresetsModel::PresetsModel(QObject *parent) : +DrumPadPresetsModel::DrumPadPresetsModel(QObject *parent) : QAbstractTableModel{parent} { } -PresetsModel::PresetsModel(const std::map &presets, QObject *parent) : +DrumPadPresetsModel::DrumPadPresetsModel(const std::map &drumpad_presets, QObject *parent) : QAbstractTableModel{parent} { - m_presets.reserve(std::size(presets)); - for (const auto &pair : presets) - m_presets.emplace_back(pair.second); + m_drumpad_presets.reserve(std::size(drumpad_presets)); + for (const auto &pair : drumpad_presets) + m_drumpad_presets.emplace_back(pair.second); } -PresetsModel::PresetsModel(std::vector &&presets, QObject *parent) : +DrumPadPresetsModel::DrumPadPresetsModel(std::vector &&drumpad_presets, QObject *parent) : QAbstractTableModel{parent} { - m_presets = std::move(presets); + m_drumpad_presets = std::move(drumpad_presets); } -PresetsModel::PresetsModel(const std::vector &presets, QObject *parent) : +DrumPadPresetsModel::DrumPadPresetsModel(const std::vector &drumpad_presets, QObject *parent) : QAbstractTableModel{parent} { - m_presets = presets; + m_drumpad_presets = drumpad_presets; } -PresetsModel::~PresetsModel() = default; +DrumPadPresetsModel::~DrumPadPresetsModel() = default; -void PresetsModel::setPresets(const std::map &presets) +void DrumPadPresetsModel::setPresets(const std::map &drumpad_presets) { beginResetModel(); - m_presets.clear(); - m_presets.reserve(std::size(presets)); - for (const auto &pair : presets) - m_presets.emplace_back(pair.second); + m_drumpad_presets.clear(); + m_drumpad_presets.reserve(std::size(drumpad_presets)); + for (const auto &pair : drumpad_presets) + m_drumpad_presets.emplace_back(pair.second); endResetModel(); } -void PresetsModel::setPresets(std::vector &&presets) +void DrumPadPresetsModel::setPresets(std::vector &&drumpad_presets) { beginResetModel(); - m_presets = std::move(presets); + m_drumpad_presets = std::move(drumpad_presets); endResetModel(); } -void PresetsModel::setPresets(const std::vector &presets) +void DrumPadPresetsModel::setPresets(const std::vector &drumpad_presets) { beginResetModel(); - m_presets = presets; + m_drumpad_presets = drumpad_presets; endResetModel(); } -const presets::Preset &PresetsModel::getPreset(const QModelIndex &index) const +const drumpad_presets::Preset &DrumPadPresetsModel::getPreset(const QModelIndex &index) const { return getPreset(index.row()); } -const presets::Preset &PresetsModel::getPreset(int row) const +const drumpad_presets::Preset &DrumPadPresetsModel::getPreset(int row) const { - Q_ASSERT(row >= 0 && row < std::size(m_presets)); - return m_presets.at(row); + Q_ASSERT(row >= 0 && row < std::size(m_drumpad_presets)); + return m_drumpad_presets.at(row); } -QModelIndex PresetsModel::findPresetById(const QString &id) const +QModelIndex DrumPadPresetsModel::findPresetById(const QString &id) const { - for (auto iter = std::cbegin(m_presets); iter != std::cend(m_presets); iter++) + for (auto iter = std::cbegin(m_drumpad_presets); iter != std::cend(m_drumpad_presets); iter++) { if (iter->id != id) continue; - return createIndex(std::distance(std::cbegin(m_presets), iter), 0); + return createIndex(std::distance(std::cbegin(m_drumpad_presets), iter), 0); } return {}; } -int PresetsModel::rowCount(const QModelIndex &parent) const +int DrumPadPresetsModel::rowCount(const QModelIndex &parent) const { Q_UNUSED(parent) - return std::size(m_presets); + return std::size(m_drumpad_presets); } -int PresetsModel::columnCount(const QModelIndex &parent) const +int DrumPadPresetsModel::columnCount(const QModelIndex &parent) const { Q_UNUSED(parent) return NumberOfColumns; } -QVariant PresetsModel::data(const QModelIndex &index, int role) const +QVariant DrumPadPresetsModel::data(const QModelIndex &index, int role) const { if (role != Qt::DisplayRole && role != Qt::EditRole && role != Qt::FontRole && role != Qt::ForegroundRole) return {}; @@ -132,7 +132,7 @@ QVariant PresetsModel::data(const QModelIndex &index, int role) const return {}; if (index.row() < 0) return {}; - if (index.row() >= std::size(m_presets)) + if (index.row() >= std::size(m_drumpad_presets)) return {}; const auto &preset = getPreset(index); @@ -230,7 +230,7 @@ QVariant PresetsModel::data(const QModelIndex &index, int role) const Q_UNREACHABLE(); } -QVariant PresetsModel::headerData(int section, Qt::Orientation orientation, int role) const +QVariant DrumPadPresetsModel::headerData(int section, Qt::Orientation orientation, int role) const { if (role != Qt::DisplayRole && role != Qt::EditRole) return {}; diff --git a/drumpadpresetsmodel.h b/drumpadpresetsmodel.h new file mode 100755 index 0000000..02d7e9b --- /dev/null +++ b/drumpadpresetsmodel.h @@ -0,0 +1,36 @@ +#pragma once + +#include + +#include + +namespace drumpad_presets { class Preset; } + +class DrumPadPresetsModel : public QAbstractTableModel +{ + Q_OBJECT + +public: + DrumPadPresetsModel(QObject *parent = nullptr); + DrumPadPresetsModel(const std::map &drumpad_presets, QObject *parent = nullptr); + DrumPadPresetsModel(std::vector &&drumpad_presets, QObject *parent = nullptr); + DrumPadPresetsModel(const std::vector &drumpad_presets, QObject *parent = nullptr); + ~DrumPadPresetsModel() override; + + void setPresets(const std::map &drumpad_presets); + void setPresets(std::vector &&drumpad_presets); + void setPresets(const std::vector &drumpad_presets); + + const drumpad_presets::Preset &getPreset(const QModelIndex &index) const; + const drumpad_presets::Preset &getPreset(int row) const; + + QModelIndex findPresetById(const QString &id) const; + + int rowCount(const QModelIndex &parent) const override; + int columnCount(const QModelIndex &parent) const override; + QVariant data(const QModelIndex &index, int role) const override; + QVariant headerData(int section, Qt::Orientation orientation, int role) const override; + +private: + std::vector m_drumpad_presets; +}; diff --git a/graphrenderer.cpp b/graphrenderer.cpp index 5b16533..e248d03 100644 --- a/graphrenderer.cpp +++ b/graphrenderer.cpp @@ -5,6 +5,10 @@ #include #include #include +#include +#include + +#include "audioformat.h" QPixmap GraphRenderer::render(const QSize &size, const frame_t *begin, const frame_t *end, const QPalette &palette) { diff --git a/graphrenderer.h b/graphrenderer.h index 00eff2b..71c3bb9 100644 --- a/graphrenderer.h +++ b/graphrenderer.h @@ -1,11 +1,15 @@ #pragma once +#include + class QPixmap; class QSize; class QPainter; class QPalette; +class QRect; +class QPoint; -#include "audioformat.h" +struct frame_t; namespace GraphRenderer { diff --git a/jsonconverters.cpp b/jsonconverters.cpp index b7b1cad..850f009 100755 --- a/jsonconverters.cpp +++ b/jsonconverters.cpp @@ -83,9 +83,9 @@ std::vector parseIntVectorIgnoreNulls(const QJsonValue &jsonValue) return vector; } -presets::PresetsConfig parsePresetsConfig(const QJsonObject &jsonObj) +drumpad_presets::PresetsConfig parseDrumPadPresetsConfig(const QJsonObject &jsonObj) { - presets::PresetsConfig presetConfig; + drumpad_presets::PresetsConfig presetConfig; for (auto iter = std::cbegin(jsonObj); iter != std::cend(jsonObj); iter++) { @@ -100,12 +100,12 @@ presets::PresetsConfig parsePresetsConfig(const QJsonObject &jsonObj) return presetConfig; } -std::vector parseCategoryVector(const QJsonValue &jsonValue) +std::vector parseCategoryVector(const QJsonValue &jsonValue) { if (!jsonValue.isArray()) throw std::runtime_error{"json value for vector of Category is not an array"}; - std::vector vector; + std::vector vector; for (const auto &jsonValue : jsonValue.toArray()) vector.emplace_back(parseCategory(jsonValue)); @@ -113,14 +113,14 @@ std::vector parseCategoryVector(const QJsonValue &jsonValue) return vector; } -std::map parsePresetMap(const QJsonValue &jsonValue) +std::map parsePresetMap(const QJsonValue &jsonValue) { if (!jsonValue.isObject()) throw std::runtime_error{"json value for Preset map is not an object"}; const auto jsonObj = jsonValue.toObject(); - std::map map; + std::map map; for (auto iter = std::cbegin(jsonObj); iter != std::cend(jsonObj); iter++) map[iter.key()] = parsePreset(iter.value()); @@ -128,14 +128,14 @@ std::map parsePresetMap(const QJsonValue &jsonValue) return map; } -presets::Category parseCategory(const QJsonValue &jsonValue) +drumpad_presets::Category parseCategory(const QJsonValue &jsonValue) { if (!jsonValue.isObject()) throw std::runtime_error{"json value for Category is not an object"}; const auto jsonObj = jsonValue.toObject(); - presets::Category category; + drumpad_presets::Category category; for (auto iter = std::cbegin(jsonObj); iter != std::cend(jsonObj); iter++) { @@ -150,14 +150,14 @@ presets::Category parseCategory(const QJsonValue &jsonValue) return category; } -presets::Filter parseFilter(const QJsonValue &jsonValue) +drumpad_presets::Filter parseFilter(const QJsonValue &jsonValue) { if (!jsonValue.isObject()) throw std::runtime_error{"json value for Filters is not an object"}; const auto jsonObj = jsonValue.toObject(); - presets::Filter filters; + drumpad_presets::Filter filters; for (auto iter = std::cbegin(jsonObj); iter != std::cend(jsonObj); iter++) { @@ -170,14 +170,14 @@ presets::Filter parseFilter(const QJsonValue &jsonValue) return filters; } -presets::Preset parsePreset(const QJsonValue &jsonValue) +drumpad_presets::Preset parsePreset(const QJsonValue &jsonValue) { if (!jsonValue.isObject()) throw std::runtime_error{"json value for Preset is not an object"}; const auto jsonObj = jsonValue.toObject(); - presets::Preset preset; + drumpad_presets::Preset preset; for (auto iter = std::cbegin(jsonObj); iter != std::cend(jsonObj); iter++) { @@ -241,7 +241,7 @@ presets::Preset parsePreset(const QJsonValue &jsonValue) return preset; } -std::array parseFileArray(const QJsonValue &jsonValue) +std::array parseFileArray(const QJsonValue &jsonValue) { if (!jsonValue.isObject()) throw std::runtime_error{"json value for File array is not an object"}; @@ -251,7 +251,7 @@ std::array parseFileArray(const QJsonValue &jsonValue) if (jsonObj.size() != 24) throw std::runtime_error{"json value for File array doesn't have exactly 24 entries"}; - std::array array; + std::array array; for (auto iter = std::cbegin(jsonObj); iter != std::cend(jsonObj); iter++) { @@ -267,14 +267,14 @@ std::array parseFileArray(const QJsonValue &jsonValue) return array; } -presets::File parseFile(const QJsonValue &jsonValue) +drumpad_presets::File parseFile(const QJsonValue &jsonValue) { if (!jsonValue.isObject()) throw std::runtime_error{"json value for File is not an object"}; const auto jsonObj = jsonValue.toObject(); - presets::File file; + drumpad_presets::File file; for (auto iter = std::cbegin(jsonObj); iter != std::cend(jsonObj); iter++) { @@ -296,12 +296,12 @@ presets::File parseFile(const QJsonValue &jsonValue) return file; } -std::vector parseSequenceVector(const QJsonValue &jsonValue) +std::vector parseSequenceVector(const QJsonValue &jsonValue) { if (!jsonValue.isArray()) throw std::runtime_error{"json value for vector of Sequence is not an array"}; - std::vector vector; + std::vector vector; for (const auto &jsonValue : jsonValue.toArray()) vector.emplace_back(parseSequence(jsonValue)); @@ -309,14 +309,14 @@ std::vector parseSequenceVector(const QJsonValue &jsonValue) return vector; } -presets::Sequence parseSequence(const QJsonValue &jsonValue) +drumpad_presets::Sequence parseSequence(const QJsonValue &jsonValue) { if (!jsonValue.isObject()) throw std::runtime_error{"json value for File is not an object"}; const auto jsonObj = jsonValue.toObject(); - presets::Sequence sequence; + drumpad_presets::Sequence sequence; for (auto iter = std::cbegin(jsonObj); iter != std::cend(jsonObj); iter++) { @@ -342,14 +342,14 @@ presets::Sequence parseSequence(const QJsonValue &jsonValue) return sequence; } -std::map> parseSequenceVectorMap(const QJsonValue &jsonValue) +std::map> parseSequenceVectorMap(const QJsonValue &jsonValue) { if (!jsonValue.isObject()) throw std::runtime_error{"json value for Sequence vector map is not an object"}; const auto jsonObj = jsonValue.toObject(); - std::map> map; + std::map> map; for (auto iter = std::cbegin(jsonObj); iter != std::cend(jsonObj); iter++) map[iter.key()] = parseSequenceVector(iter.value()); @@ -357,14 +357,14 @@ std::map> parseSequenceVectorMap(const Q return map; } -presets::SequencePad parseSequencePad(const QJsonValue &jsonValue) +drumpad_presets::SequencePad parseSequencePad(const QJsonValue &jsonValue) { if (!jsonValue.isObject()) throw std::runtime_error{"json value for File is not an object"}; const auto jsonObj = jsonValue.toObject(); - presets::SequencePad sequencePad; + drumpad_presets::SequencePad sequencePad; for (auto iter = std::cbegin(jsonObj); iter != std::cend(jsonObj); iter++) { @@ -381,12 +381,12 @@ presets::SequencePad parseSequencePad(const QJsonValue &jsonValue) return sequencePad; } -std::vector parseSequencePadVector(const QJsonValue &jsonValue) +std::vector parseSequencePadVector(const QJsonValue &jsonValue) { if (!jsonValue.isArray()) throw std::runtime_error{"json value for vector of SequencePad is not an array"}; - std::vector vector; + std::vector vector; for (const auto &jsonValue : jsonValue.toArray()) vector.emplace_back(parseSequencePad(jsonValue)); @@ -394,14 +394,14 @@ std::vector parseSequencePadVector(const QJsonValue &jsonV return vector; } -std::map> parseSequencePadVectorMap(const QJsonValue &jsonValue) +std::map> parseSequencePadVectorMap(const QJsonValue &jsonValue) { if (!jsonValue.isObject()) throw std::runtime_error{"json value for SequencePad vector map is not an object"}; const auto jsonObj = jsonValue.toObject(); - std::map> map; + std::map> map; for (auto iter = std::cbegin(jsonObj); iter != std::cend(jsonObj); iter++) map[iter.key()] = parseSequencePadVector(iter.value()); diff --git a/jsonconverters.h b/jsonconverters.h index 970d629..c5e761e 100755 --- a/jsonconverters.h +++ b/jsonconverters.h @@ -4,7 +4,7 @@ #include #include -#include "presets.h" +#include "drumpadpresets.h" namespace json_converters { @@ -17,18 +17,18 @@ bool parseBool(const QJsonValue &jsonValue); std::vector parseIntVector(const QJsonValue &jsonValue); std::vector parseIntVectorIgnoreNulls(const QJsonValue &jsonValue); -presets::PresetsConfig parsePresetsConfig(const QJsonObject &jsonObj); -std::vector parseCategoryVector(const QJsonValue &jsonValue); -std::map parsePresetMap(const QJsonValue &jsonValue); -presets::Category parseCategory(const QJsonValue &jsonValue); -presets::Filter parseFilter(const QJsonValue &jsonValue); -presets::Preset parsePreset(const QJsonValue &jsonValue); -std::array parseFileArray(const QJsonValue &jsonValue); -presets::File parseFile(const QJsonValue &jsonValue); -std::vector parseSequenceVector(const QJsonValue &jsonValue); -presets::Sequence parseSequence(const QJsonValue &jsonValue); -std::map> parseSequenceVectorMap(const QJsonValue &jsonValue); -presets::SequencePad parseSequencePad(const QJsonValue &jsonValue); -std::vector parseSequencePadVector(const QJsonValue &jsonValue); -std::map> parseSequencePadVectorMap(const QJsonValue &jsonValue); +drumpad_presets::PresetsConfig parseDrumPadPresetsConfig(const QJsonObject &jsonObj); +std::vector parseCategoryVector(const QJsonValue &jsonValue); +std::map parsePresetMap(const QJsonValue &jsonValue); +drumpad_presets::Category parseCategory(const QJsonValue &jsonValue); +drumpad_presets::Filter parseFilter(const QJsonValue &jsonValue); +drumpad_presets::Preset parsePreset(const QJsonValue &jsonValue); +std::array parseFileArray(const QJsonValue &jsonValue); +drumpad_presets::File parseFile(const QJsonValue &jsonValue); +std::vector parseSequenceVector(const QJsonValue &jsonValue); +drumpad_presets::Sequence parseSequence(const QJsonValue &jsonValue); +std::map> parseSequenceVectorMap(const QJsonValue &jsonValue); +drumpad_presets::SequencePad parseSequencePad(const QJsonValue &jsonValue); +std::vector parseSequencePadVector(const QJsonValue &jsonValue); +std::map> parseSequencePadVectorMap(const QJsonValue &jsonValue); } diff --git a/presetsmodel.h b/presetsmodel.h deleted file mode 100755 index 053ebe8..0000000 --- a/presetsmodel.h +++ /dev/null @@ -1,36 +0,0 @@ -#pragma once - -#include - -#include - -namespace presets { class Preset; } - -class PresetsModel : public QAbstractTableModel -{ - Q_OBJECT - -public: - PresetsModel(QObject *parent = nullptr); - PresetsModel(const std::map &presets, QObject *parent = nullptr); - PresetsModel(std::vector &&presets, QObject *parent = nullptr); - PresetsModel(const std::vector &presets, QObject *parent = nullptr); - ~PresetsModel() override; - - void setPresets(const std::map &presets); - void setPresets(std::vector &&presets); - void setPresets(const std::vector &presets); - - const presets::Preset &getPreset(const QModelIndex &index) const; - const presets::Preset &getPreset(int row) const; - - QModelIndex findPresetById(const QString &id) const; - - int rowCount(const QModelIndex &parent) const override; - int columnCount(const QModelIndex &parent) const override; - QVariant data(const QModelIndex &index, int role) const override; - QVariant headerData(int section, Qt::Orientation orientation, int role) const override; - -private: - std::vector m_presets; -}; diff --git a/synthisizer.cpp b/synthisizer.cpp index 766d6dc..484c1a6 100644 --- a/synthisizer.cpp +++ b/synthisizer.cpp @@ -2,6 +2,8 @@ #include +#include "audioformat.h" + constexpr double pi = std::acos(-1); void Synthisizer::writeSamples(frame_t *begin, frame_t *end) diff --git a/synthisizer.h b/synthisizer.h index ee1de09..d763103 100644 --- a/synthisizer.h +++ b/synthisizer.h @@ -2,7 +2,7 @@ #include -#include "audioformat.h" +struct frame_t; class DrumMachineSettings; diff --git a/widgets/djwidget.cpp b/widgets/djwidget.cpp index 820ffcc..6db406b 100644 --- a/widgets/djwidget.cpp +++ b/widgets/djwidget.cpp @@ -3,6 +3,9 @@ #include +#include "audioformat.h" +#include "midicontainers.h" + DjWidget::DjWidget(QWidget *parent) : QWidget{parent}, m_ui{std::make_unique()} diff --git a/widgets/djwidget.h b/widgets/djwidget.h index dd2a443..b800db0 100644 --- a/widgets/djwidget.h +++ b/widgets/djwidget.h @@ -6,12 +6,12 @@ #include -#include "audioformat.h" -#include "midicontainers.h" #include "treetotableproxymodel.h" namespace Ui { class DjWidget; } class DrumMachineSettings; +struct frame_t; +namespace midi { struct MidiMessage; } class DjWidget : public QWidget { diff --git a/widgets/djwidget.ui b/widgets/djwidget.ui index a0c33c6..23141ec 100644 --- a/widgets/djwidget.ui +++ b/widgets/djwidget.ui @@ -10,9 +10,6 @@ 519 - - Form - diff --git a/widgets/drumpadwidget.cpp b/widgets/drumpadwidget.cpp index 8f789b2..6ee2eaf 100644 --- a/widgets/drumpadwidget.cpp +++ b/widgets/drumpadwidget.cpp @@ -6,6 +6,7 @@ #include #include +#include "audioformat.h" #include "midicontainers.h" #include "jsonconverters.h" #include "drummachinesettings.h" @@ -181,7 +182,7 @@ void DrumPadWidget::requestFinished() try { - auto result = json_converters::parsePresetsConfig(json_converters::loadJson(reply->readAll())); + auto result = json_converters::parseDrumPadPresetsConfig(json_converters::loadJson(reply->readAll())); if (!result.presets) throw std::runtime_error("presets missing in response"); diff --git a/widgets/drumpadwidget.h b/widgets/drumpadwidget.h index 4122d8c..40897a7 100644 --- a/widgets/drumpadwidget.h +++ b/widgets/drumpadwidget.h @@ -5,9 +5,8 @@ #include -#include "audioformat.h" -#include "presetsmodel.h" -#include "filesmodel.h" +#include "drumpadpresetsmodel.h" +#include "drumpadfilesmodel.h" namespace Ui { class DrumPadWidget; } class SamplesWidget; @@ -18,6 +17,7 @@ class QThread; class DrumMachineSettings; class QNetworkReply; namespace midi { struct MidiMessage; } +struct frame_t; class DrumPadWidget : public QSplitter { @@ -55,10 +55,10 @@ private: DrumMachineSettings *m_settings{}; - PresetsModel m_presetsModel; + DrumPadPresetsModel m_presetsModel; QSortFilterProxyModel m_presetsProxyModel; - FilesModel m_filesModel; + DrumPadFilesModel m_filesModel; QNetworkAccessManager *m_networkAccessManager{}; diff --git a/widgets/loopstationwidget.cpp b/widgets/loopstationwidget.cpp new file mode 100644 index 0000000..24aa81b --- /dev/null +++ b/widgets/loopstationwidget.cpp @@ -0,0 +1,48 @@ +#include "loopstationwidget.h" +#include "ui_loopstationwidget.h" + +#include "audioformat.h" + +LoopStationWidget::LoopStationWidget(QWidget *parent) : + QWidget{parent}, + m_ui{std::make_unique()} +{ + m_ui->setupUi(this); +} + +LoopStationWidget::~LoopStationWidget() = default; + +void LoopStationWidget::writeSamples(frame_t *begin, frame_t *end) +{ + +} + +void LoopStationWidget::injectNetworkAccessManager(QNetworkAccessManager &networkAccessManager) +{ + +} + +void LoopStationWidget::injectDecodingThread(QThread &thread) +{ + +} + +void LoopStationWidget::loadSettings(DrumMachineSettings &settings) +{ + +} + +void LoopStationWidget::unsendColors() +{ + +} + +void LoopStationWidget::sendColors() +{ + +} + +void LoopStationWidget::midiReceived(const midi::MidiMessage &message) +{ + +} diff --git a/widgets/loopstationwidget.h b/widgets/loopstationwidget.h new file mode 100644 index 0000000..acae42c --- /dev/null +++ b/widgets/loopstationwidget.h @@ -0,0 +1,36 @@ +#pragma once + +#include + +#include + +namespace Ui { class LoopStationWidget; } +namespace midi { struct MidiMessage; } +class QNetworkAccessManager; +class DrumMachineSettings; +struct frame_t; + +class LoopStationWidget : public QWidget +{ + Q_OBJECT + +public: + explicit LoopStationWidget(QWidget *parent = nullptr); + ~LoopStationWidget() override; + + void writeSamples(frame_t *begin, frame_t *end); + void injectNetworkAccessManager(QNetworkAccessManager &networkAccessManager); + void injectDecodingThread(QThread &thread); + void loadSettings(DrumMachineSettings &settings); + void unsendColors(); + void sendColors(); + +signals: + void sendMidi(const midi::MidiMessage &midiMsg); + +public slots: + void midiReceived(const midi::MidiMessage &message); + +private: + const std::unique_ptr m_ui; +}; diff --git a/widgets/loopstationwidget.ui b/widgets/loopstationwidget.ui new file mode 100644 index 0000000..4926683 --- /dev/null +++ b/widgets/loopstationwidget.ui @@ -0,0 +1,29 @@ + + + LoopStationWidget + + + + 0 + 0 + 400 + 300 + + + + + + 40 + 50 + 261 + 18 + + + + Hier könnte ihre LoopStation stehen. + + + + + + diff --git a/widgets/mainwindow.cpp b/widgets/mainwindow.cpp index 4843c8b..6796b85 100755 --- a/widgets/mainwindow.cpp +++ b/widgets/mainwindow.cpp @@ -9,7 +9,7 @@ #include #include -#include "midiinwrapper.h" +#include "audioformat.h" #include "midicontainers.h" namespace { @@ -38,6 +38,7 @@ MainWindow::MainWindow(QWidget *parent) : m_networkAccessManager.setCache(&m_cache); m_ui->drumPadWidget->injectNetworkAccessManager(m_networkAccessManager); + m_ui->loopStationWidget->injectNetworkAccessManager(m_networkAccessManager); connect(&m_midiIn, &MidiInWrapper::midiReceived, this, &MainWindow::midiReceived); @@ -49,6 +50,7 @@ MainWindow::MainWindow(QWidget *parent) : } m_ui->drumPadWidget->injectDecodingThread(m_decoderThread); + m_ui->loopStationWidget->injectDecodingThread(m_decoderThread); m_ui->djWidget->injectDecodingThread(m_decoderThread); updateAudioDevices(); @@ -89,6 +91,7 @@ paDefault: loadSettings(); connect(m_ui->drumPadWidget, &DrumPadWidget::sendMidi, this, &MainWindow::sendMidi); + connect(m_ui->loopStationWidget, &LoopStationWidget::sendMidi, this, &MainWindow::sendMidi); connect(m_ui->djWidget, &DjWidget::sendMidi, this, &MainWindow::sendMidi); connect(m_ui->synthisizerWidget, &SynthisizerWidget::sendMidi, this, &MainWindow::sendMidi); @@ -109,6 +112,7 @@ int MainWindow::writeSamples(frame_t *begin, frame_t *end) std::fill(begin, end, frame_t{0.,0.}); m_ui->drumPadWidget->writeSamples(begin, end); + m_ui->loopStationWidget->writeSamples(begin, end); m_ui->djWidget->writeSamples(begin, end); m_ui->synthisizerWidget->writeSamples(begin, end); @@ -229,8 +233,10 @@ void MainWindow::midiReceived(const midi::MidiMessage &message) if (m_ui->tabWidget->currentIndex() == 0) m_ui->drumPadWidget->midiReceived(message); else if (m_ui->tabWidget->currentIndex() == 1) - m_ui->djWidget->midiReceived(message); + m_ui->loopStationWidget->midiReceived(message); else if (m_ui->tabWidget->currentIndex() == 2) + m_ui->djWidget->midiReceived(message); + else if (m_ui->tabWidget->currentIndex() == 3) m_ui->synthisizerWidget->midiReceived(message); } @@ -283,6 +289,7 @@ void MainWindow::updateMidiOutDevices() void MainWindow::loadSettings() { m_ui->drumPadWidget->loadSettings(m_settings); + m_ui->loopStationWidget->loadSettings(m_settings); m_ui->djWidget->loadSettings(m_settings); m_ui->synthisizerWidget->loadSettings(m_settings); } @@ -292,8 +299,10 @@ void MainWindow::unsendColors(int index) if (index == 0) m_ui->drumPadWidget->unsendColors(); else if (index == 1) - m_ui->djWidget->unsendColors(); + m_ui->loopStationWidget->unsendColors(); else if (index == 2) + m_ui->djWidget->unsendColors(); + else if (index == 3) m_ui->synthisizerWidget->unsendColors(); } @@ -302,8 +311,10 @@ void MainWindow::sendColors(int index) if (index == 0) m_ui->drumPadWidget->sendColors(); else if (index == 1) - m_ui->djWidget->sendColors(); + m_ui->loopStationWidget->sendColors(); else if (index == 2) + m_ui->djWidget->sendColors(); + else if (index == 3) m_ui->synthisizerWidget->sendColors(); return; diff --git a/widgets/mainwindow.h b/widgets/mainwindow.h index 9e80b9e..f99eaaa 100755 --- a/widgets/mainwindow.h +++ b/widgets/mainwindow.h @@ -9,14 +9,13 @@ #include "portaudio.h" -#include "audioformat.h" #include "midiinwrapper.h" #include "midioutwrapper.h" #include "drummachinesettings.h" namespace Ui { class MainWindow; } -namespace presets { struct PresetsConfig; } namespace midi { struct MidiMessage; } +struct frame_t; class MainWindow : public QMainWindow { diff --git a/widgets/mainwindow.ui b/widgets/mainwindow.ui index 9d5cb34..a4a3c88 100755 --- a/widgets/mainwindow.ui +++ b/widgets/mainwindow.ui @@ -210,6 +210,11 @@ DrumPad + + + LoopStation + + DJ @@ -255,6 +260,12 @@
widgets/synthisizerwidget.h
1 + + LoopStationWidget + QWidget +
widgets/loopstationwidget.h
+ 1 +
diff --git a/widgets/presetdetailwidget.cpp b/widgets/presetdetailwidget.cpp index bca3f02..b064880 100755 --- a/widgets/presetdetailwidget.cpp +++ b/widgets/presetdetailwidget.cpp @@ -10,7 +10,7 @@ PresetDetailWidget::PresetDetailWidget(QWidget *parent) : PresetDetailWidget::~PresetDetailWidget() = default; -void PresetDetailWidget::setPreset(const presets::Preset &preset) +void PresetDetailWidget::setPreset(const drumpad_presets::Preset &preset) { // TODO } diff --git a/widgets/presetdetailwidget.h b/widgets/presetdetailwidget.h index c0ee94e..747f36e 100755 --- a/widgets/presetdetailwidget.h +++ b/widgets/presetdetailwidget.h @@ -5,7 +5,7 @@ #include namespace Ui { class PresetDetailWidget; } -namespace presets { class Preset; } +namespace drumpad_presets { class Preset; } class PresetDetailWidget : public QScrollArea { @@ -15,7 +15,7 @@ public: explicit PresetDetailWidget(QWidget *parent = nullptr); ~PresetDetailWidget() override; - void setPreset(const presets::Preset &preset); + void setPreset(const drumpad_presets::Preset &preset); private: const std::unique_ptr m_ui; diff --git a/widgets/previewwidget.cpp b/widgets/previewwidget.cpp index 5fef09d..bf07645 100644 --- a/widgets/previewwidget.cpp +++ b/widgets/previewwidget.cpp @@ -5,6 +5,7 @@ #include #include "graphrenderer.h" +#include "audioformat.h" PreviewWidget::PreviewWidget(QWidget *parent) : QWidget(parent) diff --git a/widgets/sampleswidget.cpp b/widgets/sampleswidget.cpp index 0950f3a..c8ad069 100755 --- a/widgets/sampleswidget.cpp +++ b/widgets/sampleswidget.cpp @@ -5,6 +5,7 @@ #include +#include "audioformat.h" #include "midicontainers.h" SamplesWidget::SamplesWidget(QWidget *parent) : @@ -34,7 +35,7 @@ void SamplesWidget::loadSettings(DrumMachineSettings &settings) widget.loadSettings(settings); } -void SamplesWidget::setPreset(const presets::Preset &preset) +void SamplesWidget::setPreset(const drumpad_presets::Preset &preset) { m_preset = preset; diff --git a/widgets/sampleswidget.h b/widgets/sampleswidget.h index 837e9fd..7ab0a44 100755 --- a/widgets/sampleswidget.h +++ b/widgets/sampleswidget.h @@ -6,14 +6,14 @@ #include -#include "audioformat.h" -#include "presets.h" +#include "drumpadpresets.h" namespace Ui { class SamplesWidget; } namespace midi { struct MidiMessage; } class QNetworkAccessManager; class SampleWidget; class DrumMachineSettings; +struct frame_t; class SamplesWidget : public QWidget { @@ -25,7 +25,7 @@ public: void loadSettings(DrumMachineSettings &settings); - void setPreset(const presets::Preset &preset); + void setPreset(const drumpad_presets::Preset &preset); void midiReceived(const midi::MidiMessage &message); @@ -53,5 +53,5 @@ private: const std::unique_ptr m_ui; - presets::Preset m_preset; + drumpad_presets::Preset m_preset; }; diff --git a/widgets/sampleswidget.ui b/widgets/sampleswidget.ui index bd1ee1a..ce30044 100755 --- a/widgets/sampleswidget.ui +++ b/widgets/sampleswidget.ui @@ -10,9 +10,6 @@ 421 - - Form - diff --git a/widgets/samplewidget.cpp b/widgets/samplewidget.cpp index 7793447..43840be 100755 --- a/widgets/samplewidget.cpp +++ b/widgets/samplewidget.cpp @@ -8,6 +8,7 @@ #include #include +#include "audioformat.h" #include "audiodecoder.h" #include "drummachinesettings.h" #include "midicontainers.h" @@ -46,7 +47,7 @@ void SampleWidget::loadSettings(DrumMachineSettings &settings) m_settings = &settings; } -void SampleWidget::setFile(const QString &presetId, const presets::File &file) +void SampleWidget::setFile(const QString &presetId, const drumpad_presets::File &file) { m_presetId = presetId; m_file = file; diff --git a/widgets/samplewidget.h b/widgets/samplewidget.h index 1eca2f1..a231039 100755 --- a/widgets/samplewidget.h +++ b/widgets/samplewidget.h @@ -4,8 +4,7 @@ #include -#include "audioformat.h" -#include "presets.h" +#include "drumpadpresets.h" #include "audioplayer.h" namespace Ui { class SampleWidget; } @@ -15,6 +14,7 @@ class QAudioBuffer; class AudioDecoder; class DrumMachineSettings; namespace midi { struct MidiMessage; } +struct frame_t; class SampleWidget : public QFrame { @@ -29,7 +29,7 @@ public: void loadSettings(DrumMachineSettings &settings); - void setFile(const QString &presetId, const presets::File &file); + void setFile(const QString &presetId, const drumpad_presets::File &file); quint8 channel() const; void setChannel(quint8 channel); @@ -86,7 +86,7 @@ private: AudioPlayer m_player; QString m_presetId; - std::optional m_file; + std::optional m_file; QNetworkAccessManager *m_networkAccessManager{}; diff --git a/widgets/samplewidget.ui b/widgets/samplewidget.ui index 3ee777f..fa18d06 100755 --- a/widgets/samplewidget.ui +++ b/widgets/samplewidget.ui @@ -10,9 +10,6 @@ 157 - - Form - true diff --git a/widgets/scratchwidget.cpp b/widgets/scratchwidget.cpp index f2d10e9..1f08fe6 100644 --- a/widgets/scratchwidget.cpp +++ b/widgets/scratchwidget.cpp @@ -5,10 +5,12 @@ #include #include +#include "audioformat.h" #include "graphrenderer.h" ScratchWidget::ScratchWidget(QWidget *parent) : - QWidget{parent} + QWidget{parent}, + m_framesPerBeat{frameRate/4} { connect(&m_timer, &QTimer::timeout, this, &ScratchWidget::timeout); m_timer.setSingleShot(true); diff --git a/widgets/scratchwidget.h b/widgets/scratchwidget.h index a217361..9494d66 100644 --- a/widgets/scratchwidget.h +++ b/widgets/scratchwidget.h @@ -6,8 +6,6 @@ #include #include -#include "audioformat.h" - class ScratchWidget : public QWidget { Q_OBJECT @@ -49,7 +47,7 @@ private: QCache m_graphCache; int m_beatWidth{100}; - int m_framesPerBeat{frameRate/4}; + int m_framesPerBeat; bool m_scratching{}; bool m_dragging{}; diff --git a/widgets/sequencerwidget.cpp b/widgets/sequencerwidget.cpp index 2eb0c67..7dcad5e 100755 --- a/widgets/sequencerwidget.cpp +++ b/widgets/sequencerwidget.cpp @@ -5,7 +5,7 @@ #include -#include "presets.h" +#include "drumpadpresets.h" #include "drummachinesettings.h" #include "midicontainers.h" @@ -123,7 +123,7 @@ void SequencerWidget::sendColors() }); } -void SequencerWidget::setPreset(const presets::Preset &preset) +void SequencerWidget::setPreset(const drumpad_presets::Preset &preset) { if (preset.tempo) m_ui->spinBoxTempo->setValue(*preset.tempo); @@ -138,7 +138,7 @@ void SequencerWidget::setPreset(const presets::Preset &preset) m_sequences.clear(); m_selectedSequence = nullptr; - const auto doit = [&](const QString &prefix, const std::optional>> &value) + const auto doit = [&](const QString &prefix, const std::optional>> &value) { if (!value) return; @@ -223,7 +223,7 @@ void SequencerWidget::timeout() { for (const auto &pair : *m_selectedSequence->pads) { - const auto iter = std::find_if(std::cbegin(pair.second), std::cend(pair.second), [&](const presets::SequencePad &sequencePad){ + const auto iter = std::find_if(std::cbegin(pair.second), std::cend(pair.second), [&](const drumpad_presets::SequencePad &sequencePad){ return sequencePad.start && *sequencePad.start == m_pos; }); diff --git a/widgets/sequencerwidget.h b/widgets/sequencerwidget.h index 6239be1..e71d677 100755 --- a/widgets/sequencerwidget.h +++ b/widgets/sequencerwidget.h @@ -9,7 +9,7 @@ class QLabel; namespace Ui { class SequencerWidget; } -namespace presets { class Preset; class Sequence; } +namespace drumpad_presets { class Preset; class Sequence; } class DrumMachineSettings; namespace midi { struct MidiMessage; } @@ -25,7 +25,7 @@ public: void unsendColors(); void sendColors(); - void setPreset(const presets::Preset &preset); + void setPreset(const drumpad_presets::Preset &preset); signals: void sendMidi(const midi::MidiMessage &midiMsg); @@ -50,8 +50,8 @@ private slots: private: const std::unique_ptr m_ui; - std::vector m_sequences; - const presets::Sequence *m_selectedSequence{}; + std::vector m_sequences; + const drumpad_presets::Sequence *m_selectedSequence{}; QTimer m_timer; diff --git a/widgets/sequencerwidget.ui b/widgets/sequencerwidget.ui index 9a8da7d..e207136 100755 --- a/widgets/sequencerwidget.ui +++ b/widgets/sequencerwidget.ui @@ -10,9 +10,6 @@ 611 - - Form - diff --git a/widgets/synthisizerwidget.cpp b/widgets/synthisizerwidget.cpp index fc9aaf3..932d1ec 100644 --- a/widgets/synthisizerwidget.cpp +++ b/widgets/synthisizerwidget.cpp @@ -3,6 +3,7 @@ #include +#include "audioformat.h" #include "midicontainers.h" SynthisizerWidget::SynthisizerWidget(QWidget *parent) : diff --git a/widgets/synthisizerwidget.h b/widgets/synthisizerwidget.h index fc32e29..6d5db69 100644 --- a/widgets/synthisizerwidget.h +++ b/widgets/synthisizerwidget.h @@ -4,11 +4,11 @@ #include #include "synthisizer.h" -#include "audioformat.h" namespace Ui { class SynthisizerWidget; } class DrumMachineSettings; namespace midi { struct MidiMessage; } +struct frame_t; class SynthisizerWidget : public QWidget { diff --git a/widgets/synthisizerwidget.ui b/widgets/synthisizerwidget.ui index 37de04a..4d88fb0 100644 --- a/widgets/synthisizerwidget.ui +++ b/widgets/synthisizerwidget.ui @@ -10,9 +10,6 @@ 300 - - Form - diff --git a/widgets/trackdeck.cpp b/widgets/trackdeck.cpp index 65290cb..c22ff3b 100644 --- a/widgets/trackdeck.cpp +++ b/widgets/trackdeck.cpp @@ -11,6 +11,7 @@ #include #include +#include "audioformat.h" #include "audiodecoder.h" TrackDeck::TrackDeck(QWidget *parent) : diff --git a/widgets/trackdeck.h b/widgets/trackdeck.h index 3c0f337..743c478 100644 --- a/widgets/trackdeck.h +++ b/widgets/trackdeck.h @@ -8,12 +8,12 @@ #include #include -#include "audioformat.h" #include "audioplayer.h" namespace Ui { class TrackDeck; } class AudioDecoder; class QAudioBuffer; +struct frame_t; class TrackDeck : public QWidget { diff --git a/widgets/trackdeck.ui b/widgets/trackdeck.ui index d642c32..3bd86f9 100644 --- a/widgets/trackdeck.ui +++ b/widgets/trackdeck.ui @@ -19,9 +19,6 @@ true - - Form -