mirror of
https://github.com/tildearrow/furnace.git
synced 2024-11-23 13:05:11 +00:00
i know a better way
This commit is contained in:
parent
7490ed89a1
commit
4cba677c04
5 changed files with 4 additions and 132 deletions
|
@ -1,99 +0,0 @@
|
||||||
#include <sndfile.h>
|
|
||||||
#include <string.h>
|
|
||||||
#include "file.h"
|
|
||||||
#include "taAudio.h"
|
|
||||||
|
|
||||||
void TAAudioFile::onProcess(unsigned char* buf, int nframes) {
|
|
||||||
if (audioProcCallback!=NULL) {
|
|
||||||
audioProcCallback(audioProcCallbackUser,inBufs,outBufs,desc.inChans,desc.outChans,desc.bufsize);
|
|
||||||
}
|
|
||||||
/*
|
|
||||||
float* fbuf=(float*)buf;
|
|
||||||
for (size_t j=0; j<desc.bufsize; j++) {
|
|
||||||
for (size_t i=0; i<desc.outChans; i++) {
|
|
||||||
fbuf[j*desc.outChans+i]=outBufs[i][j];
|
|
||||||
}
|
|
||||||
}*/
|
|
||||||
}
|
|
||||||
|
|
||||||
void* TAAudioFile::getContext() {
|
|
||||||
return file;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool TAAudioFile::quit() {
|
|
||||||
if (!initialized) return false;
|
|
||||||
|
|
||||||
if (file!=NULL) {
|
|
||||||
sf_close(file);
|
|
||||||
file=NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (running) {
|
|
||||||
running=false;
|
|
||||||
}
|
|
||||||
|
|
||||||
for (int i=0; i<desc.outChans; i++) {
|
|
||||||
delete[] outBufs[i];
|
|
||||||
}
|
|
||||||
|
|
||||||
delete[] outBufs;
|
|
||||||
|
|
||||||
initialized=false;
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool TAAudioFile::setRun(bool run) {
|
|
||||||
if (!initialized) return false;
|
|
||||||
SDL_PauseAudioDevice(ai,!run);
|
|
||||||
running=run;
|
|
||||||
return running;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool TAAudioFile::init(TAAudioDesc& request, TAAudioDesc& response) {
|
|
||||||
if (initialized) return false;
|
|
||||||
|
|
||||||
TAAudioDesc desc=request;
|
|
||||||
|
|
||||||
if (desc.inChans>0) return false;
|
|
||||||
|
|
||||||
memset(si,0,sizeof(SF_INFO));
|
|
||||||
si.channels=request.outChans;
|
|
||||||
si.samplerate=request.rate;
|
|
||||||
switch (request.outFormat) {
|
|
||||||
case TA_AUDIO_FORMAT_F32:
|
|
||||||
si.format=SF_FORMAT_FLOAT;
|
|
||||||
break;
|
|
||||||
case TA_AUDIO_FORMAT_F64:
|
|
||||||
si.format=SF_FORMAT_DOUBLE;
|
|
||||||
break;
|
|
||||||
case TA_AUDIO_FORMAT_U8:
|
|
||||||
si.format=SF_FORMAT_PCM_U8;
|
|
||||||
break;
|
|
||||||
case TA_AUDIO_FORMAT_S8:
|
|
||||||
si.format=SF_FORMAT_PCM_S8;
|
|
||||||
break;
|
|
||||||
case TA_AUDIO_FORMAT_S16:
|
|
||||||
si.format=SF_FORMAT_PCM_16;
|
|
||||||
break;
|
|
||||||
case TA_AUDIO_FORMAT_S32:
|
|
||||||
si.format=SF_FORMAT_PCM_32;
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
si.format|=SF_FORMAT_WAV;
|
|
||||||
|
|
||||||
file=sf_open(request.name.c_str(),SFM_WRITE,&si);
|
|
||||||
if (file==NULL) return false;
|
|
||||||
|
|
||||||
if (desc.outChans>0) {
|
|
||||||
outBufs=new float*[desc.outChans];
|
|
||||||
for (int i=0; i<desc.outChans; i++) {
|
|
||||||
outBufs[i]=new float[desc.bufsize];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
response=desc;
|
|
||||||
initialized=true;
|
|
||||||
return true;
|
|
||||||
}
|
|
|
@ -1,18 +0,0 @@
|
||||||
#include "taAudio.h"
|
|
||||||
#include <sndfile.h>
|
|
||||||
|
|
||||||
class TAAudioFile: public TAAudio {
|
|
||||||
float** iInBufs;
|
|
||||||
float** iOutBufs;
|
|
||||||
|
|
||||||
SNDFILE* file;
|
|
||||||
SF_INFO si;
|
|
||||||
|
|
||||||
public:
|
|
||||||
void onProcess(unsigned char* buf, int nframes);
|
|
||||||
|
|
||||||
void* getContext();
|
|
||||||
bool quit();
|
|
||||||
bool setRun(bool run);
|
|
||||||
bool init(TAAudioDesc& request, TAAudioDesc& response);
|
|
||||||
};
|
|
|
@ -5,7 +5,6 @@
|
||||||
#ifdef HAVE_JACK
|
#ifdef HAVE_JACK
|
||||||
#include "../audio/jack.h"
|
#include "../audio/jack.h"
|
||||||
#endif
|
#endif
|
||||||
#include "../audio/file.h"
|
|
||||||
#include "platform/genesis.h"
|
#include "platform/genesis.h"
|
||||||
#include "platform/genesisext.h"
|
#include "platform/genesisext.h"
|
||||||
#include "platform/sms.h"
|
#include "platform/sms.h"
|
||||||
|
@ -708,9 +707,6 @@ bool DivEngine::init() {
|
||||||
case DIV_AUDIO_SDL:
|
case DIV_AUDIO_SDL:
|
||||||
output=new TAAudioSDL;
|
output=new TAAudioSDL;
|
||||||
break;
|
break;
|
||||||
case DIV_AUDIO_FILE:
|
|
||||||
output=new TAAudioFile;
|
|
||||||
break;
|
|
||||||
default:
|
default:
|
||||||
logE("invalid audio engine!\n");
|
logE("invalid audio engine!\n");
|
||||||
return false;
|
return false;
|
||||||
|
|
|
@ -13,8 +13,7 @@ enum DivStatusView {
|
||||||
|
|
||||||
enum DivAudioEngines {
|
enum DivAudioEngines {
|
||||||
DIV_AUDIO_JACK=0,
|
DIV_AUDIO_JACK=0,
|
||||||
DIV_AUDIO_SDL,
|
DIV_AUDIO_SDL
|
||||||
DIV_AUDIO_FILE
|
|
||||||
};
|
};
|
||||||
|
|
||||||
struct DivChannelState {
|
struct DivChannelState {
|
||||||
|
@ -66,8 +65,6 @@ class DivEngine {
|
||||||
DivChannelState chan[17];
|
DivChannelState chan[17];
|
||||||
DivAudioEngines audioEngine;
|
DivAudioEngines audioEngine;
|
||||||
|
|
||||||
String outName;
|
|
||||||
|
|
||||||
short vibTable[64];
|
short vibTable[64];
|
||||||
|
|
||||||
blip_buffer_t* bb[2];
|
blip_buffer_t* bb[2];
|
||||||
|
@ -108,11 +105,8 @@ class DivEngine {
|
||||||
// set the view mode.
|
// set the view mode.
|
||||||
void setView(DivStatusView which);
|
void setView(DivStatusView which);
|
||||||
|
|
||||||
// open audio output file.
|
// initialize the engine. optionally provide an output file name.
|
||||||
bool openAudioOut(String filename);
|
bool init(String outName="");
|
||||||
|
|
||||||
// initialize the engine.
|
|
||||||
bool init();
|
|
||||||
|
|
||||||
DivEngine():
|
DivEngine():
|
||||||
chans(0),
|
chans(0),
|
||||||
|
|
|
@ -116,8 +116,7 @@ bool pLoops(String val) {
|
||||||
}
|
}
|
||||||
|
|
||||||
bool pOutput(String val) {
|
bool pOutput(String val) {
|
||||||
e.setAudio(DIV_AUDIO_FILE);
|
return false;
|
||||||
return e.openAudioOut(val);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool needsValue(String param) {
|
bool needsValue(String param) {
|
||||||
|
|
Loading…
Reference in a new issue