Files
DrumMachine/samplewidget.h
2020-04-26 20:49:20 +02:00

70 lines
1.4 KiB
C++
Executable File

#pragma once
#include <memory>
#include <QFrame>
#include "audioformat.h"
#include "presets.h"
#include "audioplayer.h"
namespace Ui { class SampleWidget; }
class QNetworkAccessManager;
class QNetworkReply;
class QAudioBuffer;
class AudioDecoder;
class SampleWidget : public QFrame
{
Q_OBJECT
public:
explicit SampleWidget(QWidget *parent = nullptr);
~SampleWidget() override;
void setFile(const QString &presetId, const presets::File &file);
quint8 channel() const;
void setChannel(quint8 channel);
quint8 note() const;
void setNote(quint8 note);
std::optional<int> choke() const;
void pressed(quint8 velocity);
void released();
void forceStop();
void injectNetworkAccessManager(QNetworkAccessManager &networkAccessManager);
void injectDecodingThread(QThread &thread);
void writeSamples(frame_t *begin, frame_t *end);
signals:
void chokeTriggered(int choke);
void startDecoding(const std::shared_ptr<QIODevice> &device);
private slots:
void updateStatus();
void requestFinished();
void decodingFinished(const QAudioBuffer &buffer);
private:
void startRequest();
const std::unique_ptr<Ui::SampleWidget> m_ui;
std::shared_ptr<QNetworkReply> m_reply;
std::unique_ptr<AudioDecoder> m_decoder;
AudioPlayer m_player;
QString m_presetId;
std::optional<presets::File> m_file;
QNetworkAccessManager *m_networkAccessManager{};
};