Merge branch 'tildearrow:master' into master
This commit is contained in:
commit
1d14ca2d88
|
@ -414,6 +414,7 @@ void DivEngine::runExportThread() {
|
|||
}
|
||||
}
|
||||
|
||||
// TODO: properly export ExtCh songs in per-channel mode
|
||||
bool DivEngine::saveAudio(const char* path, int loops, DivAudioExportModes mode) {
|
||||
exportPath=path;
|
||||
exportMode=mode;
|
||||
|
|
|
@ -2,6 +2,10 @@
|
|||
#include "engine.h"
|
||||
#include "instrument.h"
|
||||
|
||||
// TODO:
|
||||
// - add missing license header
|
||||
// - implement waveSynth on Amiga and N163
|
||||
|
||||
bool DivWaveSynth::activeChanged() {
|
||||
if (activeChangedB) {
|
||||
activeChangedB=false;
|
||||
|
|
|
@ -20,6 +20,9 @@
|
|||
#include "gui.h"
|
||||
#include "IconsFontAwesome4.h"
|
||||
|
||||
// TODO:
|
||||
// - "play from start" button/action
|
||||
// - fix behavior of play buttons
|
||||
void FurnaceGUI::drawEditControls() {
|
||||
if (nextWindow==GUI_WINDOW_EDIT_CONTROLS) {
|
||||
editControlsOpen=true;
|
||||
|
|
|
@ -46,6 +46,9 @@
|
|||
|
||||
#define BIND_FOR(x) getKeyName(actionKeys[x],true).c_str()
|
||||
|
||||
// TODO:
|
||||
// - add colors for FM envelope and waveform
|
||||
// - maybe add "alternate" color for FM modulators/carriers (a bit difficult)
|
||||
enum FurnaceGUIColors {
|
||||
GUI_COLOR_BACKGROUND=0,
|
||||
GUI_COLOR_FRAME_BACKGROUND,
|
||||
|
|
|
@ -1257,6 +1257,8 @@ if (ImGui::BeginTable("MacroSpace",2)) { \
|
|||
#define CENTER_VSLIDER \
|
||||
ImGui::SetCursorPosX(ImGui::GetCursorPosX()+0.5f*ImGui::GetContentRegionAvail().x-10.0f*dpiScale);
|
||||
|
||||
// TODO:
|
||||
// - add right click line draw in macro editor
|
||||
void FurnaceGUI::drawInsEdit() {
|
||||
if (nextWindow==GUI_WINDOW_INS_EDIT) {
|
||||
insEditOpen=true;
|
||||
|
|
|
@ -22,6 +22,10 @@
|
|||
#include <imgui.h>
|
||||
#include <math.h>
|
||||
|
||||
// TODO:
|
||||
// - potentially move oscilloscope seek position to the end, and read the last samples
|
||||
// - this allows for setting up the window size
|
||||
// - reduce initial latency (it's too high)
|
||||
void FurnaceGUI::readOsc() {
|
||||
int writePos=e->oscWritePos;
|
||||
int readPos=e->oscReadPos;
|
||||
|
@ -65,6 +69,9 @@ void FurnaceGUI::readOsc() {
|
|||
e->oscReadPos=readPos;
|
||||
}
|
||||
|
||||
// TODO:
|
||||
// - draw reference level
|
||||
// - draw guidelines
|
||||
void FurnaceGUI::drawOsc() {
|
||||
if (nextWindow==GUI_WINDOW_OSCILLOSCOPE) {
|
||||
oscOpen=true;
|
||||
|
|
|
@ -408,6 +408,7 @@ void FurnaceGUI::drawPattern() {
|
|||
patWindowSize=ImGui::GetWindowSize();
|
||||
//char id[32];
|
||||
ImGui::PushFont(patFont);
|
||||
// TODO: separate GUI curOrder from engine curOrder
|
||||
int ord=e->isPlaying()?oldOrder:e->getOrder();
|
||||
oldOrder=e->getOrder();
|
||||
int chans=e->getTotalChannelCount();
|
||||
|
|
|
@ -20,6 +20,7 @@
|
|||
#include "gui.h"
|
||||
#include "guiConst.h"
|
||||
|
||||
// TODO: actually implement a piano!
|
||||
void FurnaceGUI::drawPiano() {
|
||||
if (nextWindow==GUI_WINDOW_PIANO) {
|
||||
pianoOpen=true;
|
||||
|
|
|
@ -28,6 +28,12 @@
|
|||
#include "sampleUtil.h"
|
||||
#include "util.h"
|
||||
|
||||
// TODO:
|
||||
// - resample should change C-4 note
|
||||
// - clicking on waveform should give this window focus
|
||||
// - add "create instrument using this sample" option
|
||||
// - .dmc loading
|
||||
// - duplicate sample
|
||||
void FurnaceGUI::drawSampleEdit() {
|
||||
if (nextWindow==GUI_WINDOW_SAMPLE_EDIT) {
|
||||
sampleEditOpen=true;
|
||||
|
|
|
@ -198,6 +198,10 @@ struct MappedInput {
|
|||
scan(s), val(v) {}
|
||||
};
|
||||
|
||||
// TODO:
|
||||
// - add metronome volume setting
|
||||
// - maybe add metronome sound setting
|
||||
// - add a "close" button to this window
|
||||
void FurnaceGUI::drawSettings() {
|
||||
if (nextWindow==GUI_WINDOW_SETTINGS) {
|
||||
settingsOpen=true;
|
||||
|
|
64
src/log.cpp
64
src/log.cpp
|
@ -27,69 +27,7 @@ LogEntry logEntries[TA_LOG_SIZE];
|
|||
|
||||
static constexpr unsigned int TA_LOG_MASK=TA_LOG_SIZE-1;
|
||||
|
||||
int logV(const char* format, ...) {
|
||||
va_list va;
|
||||
int ret;
|
||||
if (logLevel<LOGLEVEL_TRACE) return 0;
|
||||
#ifdef _WIN32
|
||||
printf("[trace] ");
|
||||
#else
|
||||
printf("\x1b[1;37m[trace]\x1b[m ");
|
||||
#endif
|
||||
va_start(va,format);
|
||||
ret=vprintf(format,va);
|
||||
va_end(va);
|
||||
fflush(stdout);
|
||||
return ret;
|
||||
}
|
||||
|
||||
int logD(const char* format, ...) {
|
||||
va_list va;
|
||||
int ret;
|
||||
if (logLevel<LOGLEVEL_DEBUG) return 0;
|
||||
#ifdef _WIN32
|
||||
printf("[debug] ");
|
||||
#else
|
||||
printf("\x1b[1;34m[debug]\x1b[m ");
|
||||
#endif
|
||||
va_start(va,format);
|
||||
ret=vprintf(format,va);
|
||||
va_end(va);
|
||||
fflush(stdout);
|
||||
return ret;
|
||||
}
|
||||
|
||||
int logW(const char* format, ...) {
|
||||
va_list va;
|
||||
int ret;
|
||||
if (logLevel<LOGLEVEL_WARN) return 0;
|
||||
#ifdef _WIN32
|
||||
printf("[warning] ");
|
||||
#else
|
||||
printf("\x1b[1;33m[warning]\x1b[m ");
|
||||
#endif
|
||||
va_start(va,format);
|
||||
ret=vprintf(format,va);
|
||||
va_end(va);
|
||||
return ret;
|
||||
}
|
||||
|
||||
int logE(const char* format, ...) {
|
||||
va_list va;
|
||||
int ret;
|
||||
if (logLevel<LOGLEVEL_ERROR) return 0;
|
||||
#ifdef _WIN32
|
||||
printf("[ERROR] ");
|
||||
#else
|
||||
printf("\x1b[1;31m[ERROR]\x1b[m ");
|
||||
#endif
|
||||
va_start(va,format);
|
||||
ret=vprintf(format,va);
|
||||
va_end(va);
|
||||
return ret;
|
||||
}
|
||||
|
||||
int writeLog(int level, const char* msg, fmt::printf_args& args) {
|
||||
int writeLog(int level, const char* msg, fmt::printf_args args) {
|
||||
time_t thisMakesNoSense=time(NULL);
|
||||
int pos=logPosition;
|
||||
logPosition=(logPosition+1)&TA_LOG_MASK;
|
||||
|
|
17
src/ta-log.h
17
src/ta-log.h
|
@ -49,33 +49,28 @@ struct LogEntry {
|
|||
ready(false) {}
|
||||
};
|
||||
|
||||
int writeLog(int level, const char* msg, fmt::printf_args& args);
|
||||
int writeLog(int level, const char* msg, fmt::printf_args args);
|
||||
|
||||
extern LogEntry logEntries[TA_LOG_SIZE];
|
||||
|
||||
template<typename... T> int logV(const char* msg, const T&... args) {
|
||||
fmt::printf_args a=fmt::make_printf_args(args...);
|
||||
return writeLog(LOGLEVEL_TRACE,msg,a);
|
||||
return writeLog(LOGLEVEL_TRACE,msg,fmt::make_printf_args(args...));
|
||||
}
|
||||
|
||||
template<typename... T> int logD(const char* msg, const T&... args) {
|
||||
fmt::printf_args a=fmt::make_printf_args(args...);
|
||||
return writeLog(LOGLEVEL_DEBUG,msg,a);
|
||||
return writeLog(LOGLEVEL_DEBUG,msg,fmt::make_printf_args(args...));
|
||||
}
|
||||
|
||||
template<typename... T> int logI(const char* msg, const T&... args) {
|
||||
fmt::printf_args a=fmt::make_printf_args(args...);
|
||||
return writeLog(LOGLEVEL_INFO,msg,a);
|
||||
return writeLog(LOGLEVEL_INFO,msg,fmt::make_printf_args(args...));
|
||||
}
|
||||
|
||||
template<typename... T> int logW(const char* msg, const T&... args) {
|
||||
fmt::printf_args a=fmt::make_printf_args(args...);
|
||||
return writeLog(LOGLEVEL_WARN,msg,a);
|
||||
return writeLog(LOGLEVEL_WARN,msg,fmt::make_printf_args(args...));
|
||||
}
|
||||
|
||||
template<typename... T> int logE(const char* msg, const T&... args) {
|
||||
fmt::printf_args a=fmt::make_printf_args(args...);
|
||||
return writeLog(LOGLEVEL_ERROR,msg,a);
|
||||
return writeLog(LOGLEVEL_ERROR,msg,fmt::make_printf_args(args...));
|
||||
}
|
||||
|
||||
void initLog();
|
||||
|
|
Loading…
Reference in New Issue