switch from qtMedia to rtAudio
This commit is contained in:
@@ -1,27 +1,28 @@
|
|||||||
|
|
||||||
cmake_minimum_required(VERSION 3.21)
|
cmake_minimum_required(VERSION 3.21)
|
||||||
project(metabolus LANGUAGES CXX)
|
project(metabolus LANGUAGES CXX)
|
||||||
|
|
||||||
set(CMAKE_CXX_STANDARD 20)
|
set(CMAKE_CXX_STANDARD 20)
|
||||||
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
||||||
|
|
||||||
find_package(Qt6 REQUIRED COMPONENTS Widgets Multimedia)
|
find_package(Qt6 REQUIRED COMPONENTS Widgets)
|
||||||
|
find_package(PkgConfig REQUIRED)
|
||||||
|
pkg_check_modules(RTAUDIO REQUIRED rtaudio)
|
||||||
|
|
||||||
qt_standard_project_setup()
|
qt_standard_project_setup()
|
||||||
|
|
||||||
qt_add_executable(metabolus
|
add_executable(metabolus
|
||||||
src/main.cpp
|
src/main.cpp
|
||||||
src/MainWindow.cpp
|
src/MainWindow.cpp
|
||||||
src/MainWindow.h
|
src/MainWindow.h
|
||||||
src/MainWindow.ui
|
src/MainWindow.ui
|
||||||
src/synth/AudioStream.cpp
|
src/synth/AudioEngine.cpp
|
||||||
src/synth/AudioStream.h
|
src/synth/AudioEngine.h
|
||||||
src/synth/Synth.cpp
|
src/synth/Synth.cpp
|
||||||
src/synth/Synth.h
|
src/synth/Synth.h
|
||||||
resources/resources.qrc
|
resources/resources.qrc
|
||||||
)
|
)
|
||||||
|
|
||||||
target_link_libraries(metabolus
|
target_include_directories(metabolus PRIVATE ${RTAUDIO_INCLUDE_DIRS})
|
||||||
PRIVATE
|
target_link_libraries(metabolus PRIVATE Qt6::Widgets ${RTAUDIO_LIBRARIES})
|
||||||
Qt6::Widgets
|
target_compile_options(metabolus PRIVATE ${RTAUDIO_CFLAGS_OTHER})
|
||||||
Qt6::Multimedia
|
|
||||||
)
|
|
||||||
|
|||||||
@@ -21,11 +21,8 @@ MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWi
|
|||||||
connect(ui->inputValue, &QLineEdit::editingFinished, this, &MainWindow::onValueChanged);
|
connect(ui->inputValue, &QLineEdit::editingFinished, this, &MainWindow::onValueChanged);
|
||||||
|
|
||||||
// synth business
|
// synth business
|
||||||
synth_ = new Synth(this);
|
audio_ = new AudioEngine();
|
||||||
audioStream_ = new AudioStream(synth_, this);
|
audio_->start();
|
||||||
|
|
||||||
audioStream_->start();
|
|
||||||
synth_->audioSink()->start(audioStream_);
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -52,7 +49,7 @@ void MainWindow::onSliderValueChanged(int value) {
|
|||||||
QSignalBlocker blocker(ui->inputValue);
|
QSignalBlocker blocker(ui->inputValue);
|
||||||
ui->inputValue->setText(QString::number(value));
|
ui->inputValue->setText(QString::number(value));
|
||||||
|
|
||||||
synth_->setFrequency(static_cast<float>(value));
|
audio_->setFrequency(static_cast<float>(value));
|
||||||
}
|
}
|
||||||
|
|
||||||
// allows only values within the min, max to be set by the text field
|
// allows only values within the min, max to be set by the text field
|
||||||
|
|||||||
@@ -3,8 +3,7 @@
|
|||||||
|
|
||||||
#include <QMainWindow>
|
#include <QMainWindow>
|
||||||
|
|
||||||
#include "synth/Synth.h"
|
#include "synth/AudioEngine.h"
|
||||||
#include "synth/AudioStream.h"
|
|
||||||
|
|
||||||
QT_BEGIN_NAMESPACE
|
QT_BEGIN_NAMESPACE
|
||||||
namespace Ui {
|
namespace Ui {
|
||||||
@@ -42,7 +41,6 @@ private:
|
|||||||
void applySliderStep();
|
void applySliderStep();
|
||||||
void syncValueToUi(int value);
|
void syncValueToUi(int value);
|
||||||
|
|
||||||
Synth *synth_ = nullptr;
|
AudioEngine* audio_ = nullptr;
|
||||||
AudioStream *audioStream_ = nullptr;
|
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -1,27 +0,0 @@
|
|||||||
|
|
||||||
#include "AudioStream.h"
|
|
||||||
|
|
||||||
#include <iostream>
|
|
||||||
|
|
||||||
AudioStream::AudioStream(Synth *synth, QObject *parent) : QIODevice(parent), synth_(synth) {
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
void AudioStream::start() {
|
|
||||||
|
|
||||||
// std::cout << "AudioStream::start()" << std::endl;
|
|
||||||
open(QIODevice::ReadOnly);
|
|
||||||
}
|
|
||||||
|
|
||||||
void AudioStream::stop() {
|
|
||||||
|
|
||||||
close();
|
|
||||||
}
|
|
||||||
|
|
||||||
qint64 AudioStream::readData(char *data, qint64 maxlen) {
|
|
||||||
|
|
||||||
// std::cout << "sample out " << std::endl;
|
|
||||||
QByteArray samples = synth_->generateSamples(maxlen);
|
|
||||||
memcpy(data, samples.constData(), samples.size());
|
|
||||||
return samples.size();
|
|
||||||
}
|
|
||||||
@@ -1,23 +0,0 @@
|
|||||||
|
|
||||||
#pragma once
|
|
||||||
|
|
||||||
#include <QIODevice>
|
|
||||||
#include "Synth.h"
|
|
||||||
|
|
||||||
class AudioStream : public QIODevice
|
|
||||||
{
|
|
||||||
Q_OBJECT
|
|
||||||
|
|
||||||
public:
|
|
||||||
explicit AudioStream(Synth *synth, QObject *parent = nullptr);
|
|
||||||
|
|
||||||
void start();
|
|
||||||
void stop();
|
|
||||||
|
|
||||||
protected:
|
|
||||||
qint64 readData(char *data, qint64 maxlen) override;
|
|
||||||
qint64 writeData(const char *, qint64) override { return 0; }
|
|
||||||
|
|
||||||
private:
|
|
||||||
Synth *synth_;
|
|
||||||
};
|
|
||||||
@@ -1,4 +1,6 @@
|
|||||||
|
|
||||||
|
/*
|
||||||
|
|
||||||
#include "Synth.h"
|
#include "Synth.h"
|
||||||
|
|
||||||
#include <QMediaDevices>
|
#include <QMediaDevices>
|
||||||
@@ -28,13 +30,12 @@ Synth::~Synth() {
|
|||||||
|
|
||||||
void Synth::start() {
|
void Synth::start() {
|
||||||
|
|
||||||
/*
|
|
||||||
// std::cout << "Synth::start()" << std::endl;
|
// std::cout << "Synth::start()" << std::endl;
|
||||||
if (audioSink_->state() == QAudio::ActiveState)
|
// if (audioSink_->state() == QAudio::ActiveState)
|
||||||
return;
|
// return;
|
||||||
|
|
||||||
|
// audioDevice_ = audioSink_->start();
|
||||||
|
|
||||||
audioDevice_ = audioSink_->start();
|
|
||||||
*/
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void Synth::stop() {
|
void Synth::stop() {
|
||||||
@@ -110,3 +111,5 @@ void Synth::applyConfig(const AudioConfig& config) {
|
|||||||
|
|
||||||
audioSink_->setBufferSize(config.bufferSize);
|
audioSink_->setBufferSize(config.bufferSize);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
*/
|
||||||
|
|||||||
@@ -1,6 +1,8 @@
|
|||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
|
/*
|
||||||
|
|
||||||
#include <QObject>
|
#include <QObject>
|
||||||
#include <QAudioFormat>
|
#include <QAudioFormat>
|
||||||
#include <QAudioSink>
|
#include <QAudioSink>
|
||||||
@@ -46,3 +48,5 @@ private:
|
|||||||
|
|
||||||
float freq = 400.0f;
|
float freq = 400.0f;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
*/
|
||||||
|
|||||||
Reference in New Issue
Block a user