Files
DrumMachine/widgets/loopstationsamplewidget.h

89 lines
2.0 KiB
C++

#pragma once
#include <QFrame>
#include <memory>
#include "audioplayer.h"
namespace Ui { class LoopStationSampleWidget; }
class QNetworkAccessManager;
class QNetworkReply;
class QAudioBuffer;
class AudioDecoder;
class DrumMachineSettings;
namespace midi { struct MidiMessage; }
struct frame_t;
class LoopStationSampleWidget : public QFrame
{
Q_OBJECT
public:
explicit LoopStationSampleWidget(QWidget *parent = nullptr);
~LoopStationSampleWidget() override;
quint8 padNr() const { return m_padNr; }
void setPadNr(quint8 padNr) { m_padNr = padNr; }
quint8 category() const { return m_category; }
void setCategory(quint8 category);
void loadSettings(DrumMachineSettings &settings);
void setSample(const QString &presetId, const QString &filename, const QString &type);
void injectNetworkAccessManager(QNetworkAccessManager &networkAccessManager);
void injectDecodingThread(QThread &thread);
void writeSamples(frame_t *begin, frame_t *end);
void midiReceived(const midi::MidiMessage &message);
void unsendColor();
void sendColor(bool force);
bool loopEnabled() const;
public slots:
void timeout();
void setLoopEnabled(bool enabled);
void stop();
signals:
void startDecoding(std::shared_ptr<QIODevice> device);
void sendMidi(const midi::MidiMessage &midiMsg);
void loopEnabledChanged(bool loopEnabled, quint8 category);
private slots:
void updateStatus();
void requestFinished();
void decodingFinished(const QAudioBuffer &buffer);
private:
void startRequest();
const std::unique_ptr<Ui::LoopStationSampleWidget> m_ui;
DrumMachineSettings *m_settings{};
std::shared_ptr<QNetworkReply> m_reply;
std::unique_ptr<AudioDecoder> m_decoder;
AudioPlayer m_player;
QString m_presetId;
QString m_filename;
QNetworkAccessManager *m_networkAccessManager{};
quint8 m_padNr{};
quint8 m_category{};
bool m_sendColors{};
QColor m_lastColor;
quint8 m_lastMidiColor{};
};