audio settings backend
parent
c6e22d3521
commit
1ebc8f04c5
|
@ -5,6 +5,9 @@ using namespace Xybrid::Data;
|
|||
#include "data/graph.h"
|
||||
#include "data/porttypes.h"
|
||||
|
||||
#include "config/audioconfig.h"
|
||||
using namespace Xybrid::Config;
|
||||
|
||||
#include "mainwindow.h"
|
||||
#include "uisocket.h"
|
||||
|
||||
|
@ -91,7 +94,7 @@ void AudioEngine::initAudio(bool startNow) {
|
|||
const QAudioDeviceInfo& deviceInfo = QAudioDeviceInfo::defaultOutputDevice();
|
||||
|
||||
QAudioFormat format;
|
||||
format.setSampleRate(48000);
|
||||
format.setSampleRate(sampleRate);
|
||||
format.setChannelCount(2);
|
||||
format.setSampleSize(16);
|
||||
format.setCodec("audio/pcm");
|
||||
|
@ -146,6 +149,8 @@ void AudioEngine::play(std::shared_ptr<Project> p, int fromPos) {
|
|||
portLastNoteId.fill(0);
|
||||
project->rootGraph->reset();
|
||||
|
||||
sampleRate = AudioConfig::playbackSampleRate;
|
||||
bufferMs = AudioConfig::playbackBufferMs;
|
||||
initAudio();
|
||||
for (auto& b : buffer) {
|
||||
b.clear();
|
||||
|
@ -196,6 +201,8 @@ uint16_t AudioEngine::preview(std::shared_ptr<Project> p, int16_t port, int16_t
|
|||
buf.clear();
|
||||
project->rootGraph->reset();
|
||||
|
||||
sampleRate = AudioConfig::previewSampleRate;
|
||||
bufferMs = AudioConfig::previewBufferMs;
|
||||
initAudio();
|
||||
for (auto& b : buffer) {
|
||||
b.clear();
|
||||
|
@ -252,6 +259,7 @@ void AudioEngine::render(std::shared_ptr<Project> p, QString fileName) {
|
|||
tempo = project->tempo;
|
||||
tickAcc = 0;
|
||||
|
||||
sampleRate = AudioConfig::renderSampleRate;
|
||||
initAudio(); // we actually need the period size. whoops.
|
||||
|
||||
QFileInfo fi(fileName);
|
||||
|
|
|
@ -0,0 +1,13 @@
|
|||
#pragma once
|
||||
|
||||
namespace Xybrid::Config {
|
||||
namespace AudioConfig {
|
||||
extern int playbackSampleRate;
|
||||
extern int playbackBufferMs;
|
||||
|
||||
extern int previewSampleRate;
|
||||
extern int previewBufferMs;
|
||||
|
||||
extern int renderSampleRate;
|
||||
}
|
||||
}
|
|
@ -1,3 +1,4 @@
|
|||
#include "audioconfig.h"
|
||||
#include "uiconfig.h"
|
||||
#include "colorscheme.h"
|
||||
#include "directories.h"
|
||||
|
@ -6,6 +7,15 @@
|
|||
|
||||
using namespace Xybrid::Config;
|
||||
|
||||
// Audio defaults
|
||||
int AudioConfig::playbackSampleRate = 48000;
|
||||
int AudioConfig::playbackBufferMs = 64;
|
||||
|
||||
int AudioConfig::previewSampleRate = 48000;
|
||||
int AudioConfig::previewBufferMs = 64;
|
||||
|
||||
int AudioConfig::renderSampleRate = 48000;
|
||||
|
||||
// UIConfig defaults
|
||||
bool UIConfig::verticalKnobs = false;
|
||||
|
||||
|
|
|
@ -2,6 +2,7 @@
|
|||
|
||||
#include "uisocket.h"
|
||||
|
||||
#include "config/audioconfig.h"
|
||||
#include "config/uistate.h"
|
||||
#include "config/uiconfig.h"
|
||||
|
||||
|
@ -33,8 +34,11 @@ using namespace Xybrid::Config;
|
|||
namespace { // utilities
|
||||
inline void load(QCborValueRef m, QString& v) { v = m.toString(v); }
|
||||
inline void load(QCborValueRef m, bool& v) { v = m.toBool(v); }
|
||||
inline void load(QCborValueRef m, int& v) { v = static_cast<int>(m.toInteger(v)); }
|
||||
}
|
||||
|
||||
#define section(NAME) if (auto NAME = root[qs(#NAME)].toMap(); !NAME.isEmpty())
|
||||
|
||||
void FileOps::loadConfig() {
|
||||
QFile file(Config::Directories::configFile);
|
||||
if (file.open({QFile::ReadOnly})) { // file exists! read in
|
||||
|
@ -42,15 +46,23 @@ void FileOps::loadConfig() {
|
|||
auto root = QCborValue::fromCbor(read).toMap();
|
||||
file.close();
|
||||
|
||||
if (auto dirs = root[qs("directories")].toMap(); !dirs.isEmpty()) {
|
||||
load(dirs[qs("projects")], Directories::projects);
|
||||
load(dirs[qs("presets")], Directories::presets);
|
||||
section(directories) {
|
||||
load(directories[qs("projects")], Directories::projects);
|
||||
load(directories[qs("presets")], Directories::presets);
|
||||
}
|
||||
|
||||
if (auto ui = root[qs("ui")].toMap(); !ui.isEmpty()) {
|
||||
section(ui) {
|
||||
load(ui[qs("verticalKnobs")], UIConfig::verticalKnobs);
|
||||
}
|
||||
|
||||
section(audio) {
|
||||
load(audio[qs("playbackSampleRate")], AudioConfig::playbackSampleRate);
|
||||
load(audio[qs("playbackBufferMs")], AudioConfig::playbackBufferMs);
|
||||
load(audio[qs("previewSampleRate")], AudioConfig::previewSampleRate);
|
||||
load(audio[qs("previewBufferMs")], AudioConfig::previewBufferMs);
|
||||
load(audio[qs("renderSampleRate")], AudioConfig::renderSampleRate);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
// make sure directories exist
|
||||
|
@ -84,6 +96,18 @@ void FileOps::saveConfig() {
|
|||
root[qs("ui")] = ui;
|
||||
}
|
||||
|
||||
{
|
||||
QCborMap audio;
|
||||
|
||||
audio[qs("playbackSampleRate")] = AudioConfig::playbackSampleRate;
|
||||
audio[qs("playbackBufferMs")] = AudioConfig::playbackBufferMs;
|
||||
audio[qs("previewSampleRate")] = AudioConfig::previewSampleRate;
|
||||
audio[qs("previewBufferMs")] = AudioConfig::previewBufferMs;
|
||||
audio[qs("renderSampleRate")] = AudioConfig::renderSampleRate;
|
||||
|
||||
root[qs("audio")] = audio;
|
||||
}
|
||||
|
||||
// write out
|
||||
QCborStreamWriter w(&file);
|
||||
root.toCborValue().toCbor(w);
|
||||
|
|
Loading…
Reference in New Issue