UNTESTED! DO NOT USE - PC speaker passthrough
This commit is contained in:
parent
c684107b11
commit
6728edbb71
3 changed files with 39 additions and 6 deletions
|
|
@ -21,6 +21,12 @@
|
|||
#include "../engine.h"
|
||||
#include <math.h>
|
||||
|
||||
#ifdef __linux__
|
||||
#include <sys/ioctl.h>
|
||||
#include <unistd.h>
|
||||
#include <linux/kd.h>
|
||||
#endif
|
||||
|
||||
#define PCSPKR_DIVIDER 4
|
||||
#define CHIP_DIVIDER 1
|
||||
|
||||
|
|
@ -106,6 +112,19 @@ void DivPlatformPCSpeaker::acquire_piezo(short* bufL, short* bufR, size_t start,
|
|||
}
|
||||
}
|
||||
|
||||
void DivPlatformPCSpeaker::acquire_real(short* bufL, short* bufR, size_t start, size_t len) {
|
||||
#ifdef __linux__
|
||||
if (lastOn!=on || lastFreq!=freq) {
|
||||
lastOn=on;
|
||||
lastFreq=freq;
|
||||
ioctl(STDOUT_FILENO,KIOCSOUND,on?freq:0);
|
||||
}
|
||||
#endif
|
||||
for (size_t i=start; i<start+len; i++) {
|
||||
bufL[i]=0;
|
||||
}
|
||||
}
|
||||
|
||||
void DivPlatformPCSpeaker::acquire(short* bufL, short* bufR, size_t start, size_t len) {
|
||||
switch (speakerType) {
|
||||
case 0:
|
||||
|
|
@ -117,6 +136,9 @@ void DivPlatformPCSpeaker::acquire(short* bufL, short* bufR, size_t start, size_
|
|||
case 2:
|
||||
acquire_piezo(bufL,bufR,start,len);
|
||||
break;
|
||||
case 3:
|
||||
acquire_real(bufL,bufR,start,len);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -282,12 +304,20 @@ void DivPlatformPCSpeaker::reset() {
|
|||
}
|
||||
|
||||
on=false;
|
||||
lastOn=false;
|
||||
freq=0;
|
||||
lastFreq=0;
|
||||
pos=0;
|
||||
flip=false;
|
||||
low=0;
|
||||
band=0;
|
||||
|
||||
if (speakerType==3) {
|
||||
#ifdef __linux__
|
||||
ioctl(STDOUT_FILENO,KIOCSOUND,0);
|
||||
#endif
|
||||
}
|
||||
|
||||
memset(regPool,0,2);
|
||||
}
|
||||
|
||||
|
|
@ -329,6 +359,11 @@ int DivPlatformPCSpeaker::init(DivEngine* p, int channels, int sugRate, unsigned
|
|||
}
|
||||
|
||||
void DivPlatformPCSpeaker::quit() {
|
||||
if (speakerType==3) {
|
||||
#ifdef __linux__
|
||||
ioctl(STDOUT_FILENO,KIOCSOUND,0);
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
DivPlatformPCSpeaker::~DivPlatformPCSpeaker() {
|
||||
|
|
|
|||
|
|
@ -52,12 +52,12 @@ class DivPlatformPCSpeaker: public DivDispatch {
|
|||
};
|
||||
Channel chan[1];
|
||||
bool isMuted[1];
|
||||
bool on, flip;
|
||||
bool on, flip, lastOn;
|
||||
int pos, speakerType;
|
||||
float low, band;
|
||||
float low2, high2, band2;
|
||||
float low3, band3;
|
||||
unsigned short freq;
|
||||
unsigned short freq, lastFreq;
|
||||
unsigned char regPool[2];
|
||||
|
||||
friend void putDispatchChan(void*,int,int);
|
||||
|
|
@ -65,6 +65,7 @@ class DivPlatformPCSpeaker: public DivDispatch {
|
|||
void acquire_unfilt(short* bufL, short* bufR, size_t start, size_t len);
|
||||
void acquire_cone(short* bufL, short* bufR, size_t start, size_t len);
|
||||
void acquire_piezo(short* bufL, short* bufR, size_t start, size_t len);
|
||||
void acquire_real(short* bufL, short* bufR, size_t start, size_t len);
|
||||
|
||||
public:
|
||||
void acquire(short* bufL, short* bufR, size_t start, size_t len);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue