mirror of
https://github.com/AppleWin/AppleWin.git
synced 2025-02-07 01:30:50 +00:00
Removed unsupported PC speaker sound types
This commit is contained in:
parent
034faa04b9
commit
efcf06c285
@ -24,6 +24,7 @@ Changes:
|
|||||||
. Unit tests added for 6502 and 65C02 opcodes
|
. Unit tests added for 6502 and 65C02 opcodes
|
||||||
. Added -load-state <savestate.yaml> command line option
|
. Added -load-state <savestate.yaml> command line option
|
||||||
. New repo created with test save-state images: https://github.com/AppleWin/AppleWin-Test
|
. New repo created with test save-state images: https://github.com/AppleWin/AppleWin-Test
|
||||||
|
. Remove unsupported PC speaker sound types
|
||||||
|
|
||||||
Fixes:
|
Fixes:
|
||||||
. [Bug #129] Tight loop page-flipping causing heavy CPU load (fixed by NTSC / cycle-accurate video emulation)
|
. [Bug #129] Tight loop page-flipping causing heavy CPU load (fixed by NTSC / cycle-accurate video emulation)
|
||||||
|
@ -19,15 +19,8 @@ This option allows you to choose how sound is output for the
|
|||||||
system. Your choices are:<br>
|
system. Your choices are:<br>
|
||||||
|
|
||||||
<ul>
|
<ul>
|
||||||
|
|
||||||
<li>Disabled</li>
|
<li>Disabled</li>
|
||||||
|
|
||||||
<li>PC Speaker (direct)</li>
|
|
||||||
|
|
||||||
<li>PC Speaker (translated)</li>
|
|
||||||
|
|
||||||
<li>Sound Card (recommended)</li>
|
<li>Sound Card (recommended)</li>
|
||||||
|
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
<strong>Volume Control:</strong><br>
|
<strong>Volume Control:</strong><br>
|
||||||
|
@ -510,7 +510,20 @@ void LoadConfiguration(void)
|
|||||||
else
|
else
|
||||||
LoadConfigOldJoystick(JN_JOYSTICK1);
|
LoadConfigOldJoystick(JN_JOYSTICK1);
|
||||||
|
|
||||||
REGLOAD(TEXT("Sound Emulation") ,&soundtype);
|
DWORD dwSoundType;
|
||||||
|
REGLOAD(TEXT("Sound Emulation"), &dwSoundType);
|
||||||
|
switch (dwSoundType)
|
||||||
|
{
|
||||||
|
case REG_SOUNDTYPE_NONE:
|
||||||
|
case REG_SOUNDTYPE_DIRECT: // Not supported from 1.26
|
||||||
|
case REG_SOUNDTYPE_SMART: // Not supported from 1.26
|
||||||
|
default:
|
||||||
|
soundtype = SOUND_NONE;
|
||||||
|
break;
|
||||||
|
case REG_SOUNDTYPE_WAVE:
|
||||||
|
soundtype = SOUND_WAVE;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
char aySerialPortName[ CSuperSerialCard::SIZEOF_SERIALCHOICE_ITEM ];
|
char aySerialPortName[ CSuperSerialCard::SIZEOF_SERIALCHOICE_ITEM ];
|
||||||
if (RegLoadString( TEXT("Configuration"),
|
if (RegLoadString( TEXT("Configuration"),
|
||||||
|
@ -35,8 +35,6 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|||||||
CPageSound* CPageSound::ms_this = 0; // reinit'd in ctor
|
CPageSound* CPageSound::ms_this = 0; // reinit'd in ctor
|
||||||
|
|
||||||
const TCHAR CPageSound::m_soundchoices[] = TEXT("Disabled\0")
|
const TCHAR CPageSound::m_soundchoices[] = TEXT("Disabled\0")
|
||||||
TEXT("PC Speaker (direct)\0")
|
|
||||||
TEXT("PC Speaker (translated)\0")
|
|
||||||
TEXT("Sound Card\0");
|
TEXT("Sound Card\0");
|
||||||
|
|
||||||
|
|
||||||
@ -106,7 +104,7 @@ BOOL CPageSound::DlgProcInternal(HWND hWnd, UINT message, WPARAM wparam, LPARAM
|
|||||||
|
|
||||||
case WM_INITDIALOG:
|
case WM_INITDIALOG:
|
||||||
{
|
{
|
||||||
m_PropertySheetHelper.FillComboBox(hWnd,IDC_SOUNDTYPE,m_soundchoices,soundtype);
|
m_PropertySheetHelper.FillComboBox(hWnd,IDC_SOUNDTYPE, m_soundchoices, (int)soundtype);
|
||||||
|
|
||||||
SendDlgItemMessage(hWnd,IDC_SPKR_VOLUME,TBM_SETRANGE,1,MAKELONG(VOLUME_MIN,VOLUME_MAX));
|
SendDlgItemMessage(hWnd,IDC_SPKR_VOLUME,TBM_SETRANGE,1,MAKELONG(VOLUME_MIN,VOLUME_MAX));
|
||||||
SendDlgItemMessage(hWnd,IDC_SPKR_VOLUME,TBM_SETPAGESIZE,0,10);
|
SendDlgItemMessage(hWnd,IDC_SPKR_VOLUME,TBM_SETPAGESIZE,0,10);
|
||||||
@ -134,14 +132,15 @@ BOOL CPageSound::DlgProcInternal(HWND hWnd, UINT message, WPARAM wparam, LPARAM
|
|||||||
|
|
||||||
void CPageSound::DlgOK(HWND hWnd)
|
void CPageSound::DlgOK(HWND hWnd)
|
||||||
{
|
{
|
||||||
const DWORD dwNewSoundType = (DWORD) SendDlgItemMessage(hWnd, IDC_SOUNDTYPE, CB_GETCURSEL, 0, 0);
|
const SoundType_e newSoundType = (SoundType_e) SendDlgItemMessage(hWnd, IDC_SOUNDTYPE, CB_GETCURSEL, 0, 0);
|
||||||
|
|
||||||
const DWORD dwSpkrVolume = SendDlgItemMessage(hWnd, IDC_SPKR_VOLUME, TBM_GETPOS, 0, 0);
|
const DWORD dwSpkrVolume = SendDlgItemMessage(hWnd, IDC_SPKR_VOLUME, TBM_GETPOS, 0, 0);
|
||||||
const DWORD dwMBVolume = SendDlgItemMessage(hWnd, IDC_MB_VOLUME, TBM_GETPOS, 0, 0);
|
const DWORD dwMBVolume = SendDlgItemMessage(hWnd, IDC_MB_VOLUME, TBM_GETPOS, 0, 0);
|
||||||
|
|
||||||
if (SpkrSetEmulationType(hWnd, dwNewSoundType))
|
if (SpkrSetEmulationType(hWnd, newSoundType))
|
||||||
{
|
{
|
||||||
REGSAVE(TEXT("Sound Emulation"), soundtype);
|
DWORD dwSoundType = (soundtype == SOUND_NONE) ? REG_SOUNDTYPE_NONE : REG_SOUNDTYPE_WAVE;
|
||||||
|
REGSAVE(TEXT("Sound Emulation"), dwSoundType);
|
||||||
}
|
}
|
||||||
|
|
||||||
// NB. Volume: 0=Loudest, VOLUME_MAX=Silence
|
// NB. Volume: 0=Loudest, VOLUME_MAX=Silence
|
||||||
|
@ -70,7 +70,7 @@ static UINT g_nRemainderBufferSize; // Setup in SpkrInitialize()
|
|||||||
static UINT g_nRemainderBufferIdx; // Setup in SpkrInitialize()
|
static UINT g_nRemainderBufferIdx; // Setup in SpkrInitialize()
|
||||||
|
|
||||||
// Application-wide globals:
|
// Application-wide globals:
|
||||||
DWORD soundtype = SOUND_WAVE;
|
SoundType_e soundtype = SOUND_WAVE;
|
||||||
double g_fClksPerSpkrSample; // Setup in SetClksPerSpkrSample()
|
double g_fClksPerSpkrSample; // Setup in SetClksPerSpkrSample()
|
||||||
|
|
||||||
// Allow temporary quietening of speaker (8 bit DAC)
|
// Allow temporary quietening of speaker (8 bit DAC)
|
||||||
@ -85,14 +85,6 @@ static bool g_bSpkrToggleFlag = false;
|
|||||||
static VOICE SpeakerVoice = {0};
|
static VOICE SpeakerVoice = {0};
|
||||||
static bool g_bSpkrAvailable = false;
|
static bool g_bSpkrAvailable = false;
|
||||||
|
|
||||||
|
|
||||||
// Globals (SOUND_DIRECT/SOUND_SMART)
|
|
||||||
static BOOL directio = 0;
|
|
||||||
static DWORD lastdelta[2] = {0,0};
|
|
||||||
static DWORD quietcycles = 0;
|
|
||||||
static DWORD soundeffect = 0;
|
|
||||||
static DWORD totaldelta = 0;
|
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
|
|
||||||
// Forward refs:
|
// Forward refs:
|
||||||
@ -119,63 +111,6 @@ static void DisplayBenchmarkResults ()
|
|||||||
|
|
||||||
//=============================================================================
|
//=============================================================================
|
||||||
|
|
||||||
static void InternalBeep (DWORD frequency, DWORD duration)
|
|
||||||
{
|
|
||||||
#ifdef _X86_
|
|
||||||
if (directio)
|
|
||||||
if (duration) {
|
|
||||||
frequency = 1193180/frequency;
|
|
||||||
__asm {
|
|
||||||
push eax
|
|
||||||
mov al,0B6h
|
|
||||||
out 43h,al
|
|
||||||
mov eax,frequency
|
|
||||||
out 42h,al
|
|
||||||
mov al,ah
|
|
||||||
out 42h,al
|
|
||||||
in al,61h
|
|
||||||
or al,3
|
|
||||||
out 61h,al
|
|
||||||
pop eax
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
__asm {
|
|
||||||
push eax
|
|
||||||
in al,61h
|
|
||||||
and al,0FCh
|
|
||||||
out 61h,al
|
|
||||||
pop eax
|
|
||||||
}
|
|
||||||
else
|
|
||||||
#endif
|
|
||||||
Beep(frequency,duration);
|
|
||||||
}
|
|
||||||
|
|
||||||
//=============================================================================
|
|
||||||
|
|
||||||
static void InternalClick ()
|
|
||||||
{
|
|
||||||
#ifdef _X86_
|
|
||||||
if (directio)
|
|
||||||
__asm {
|
|
||||||
push eax
|
|
||||||
in al,0x61
|
|
||||||
xor al,2
|
|
||||||
out 0x61,al
|
|
||||||
pop eax
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
#endif
|
|
||||||
Beep(37,(DWORD)-1);
|
|
||||||
Beep(0,0);
|
|
||||||
#ifdef _X86_
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
//=============================================================================
|
|
||||||
|
|
||||||
static void SetClksPerSpkrSample()
|
static void SetClksPerSpkrSample()
|
||||||
{
|
{
|
||||||
// // 23.191 clks for 44.1Khz (when 6502 CLK=1.0Mhz)
|
// // 23.191 clks for 44.1Khz (when 6502 CLK=1.0Mhz)
|
||||||
@ -224,10 +159,6 @@ void SpkrDestroy ()
|
|||||||
g_pSpeakerBuffer = NULL;
|
g_pSpeakerBuffer = NULL;
|
||||||
g_pRemainderBuffer = NULL;
|
g_pRemainderBuffer = NULL;
|
||||||
}
|
}
|
||||||
else if (soundtype == SOUND_DIRECT || soundtype == SOUND_SMART)
|
|
||||||
{
|
|
||||||
InternalBeep(0,0);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//=============================================================================
|
//=============================================================================
|
||||||
@ -240,8 +171,6 @@ void SpkrInitialize ()
|
|||||||
switch(soundtype)
|
switch(soundtype)
|
||||||
{
|
{
|
||||||
case SOUND_NONE: fprintf(g_fh, "(NONE)\n"); break;
|
case SOUND_NONE: fprintf(g_fh, "(NONE)\n"); break;
|
||||||
case SOUND_DIRECT: fprintf(g_fh, "(DIRECT)\n"); break;
|
|
||||||
case SOUND_SMART: fprintf(g_fh, "(SMART)\n"); break;
|
|
||||||
case SOUND_WAVE: fprintf(g_fh, "(WAVE)\n"); break;
|
case SOUND_WAVE: fprintf(g_fh, "(WAVE)\n"); break;
|
||||||
default: fprintf(g_fh, "(UNDEFINED!)\n"); break;
|
default: fprintf(g_fh, "(UNDEFINED!)\n"); break;
|
||||||
}
|
}
|
||||||
@ -264,37 +193,6 @@ void SpkrInitialize ()
|
|||||||
|
|
||||||
g_pSpeakerBuffer = new short [SPKR_SAMPLE_RATE]; // Buffer can hold a max of 1 seconds worth of samples
|
g_pSpeakerBuffer = new short [SPKR_SAMPLE_RATE]; // Buffer can hold a max of 1 seconds worth of samples
|
||||||
}
|
}
|
||||||
|
|
||||||
//
|
|
||||||
|
|
||||||
// IF NONE IS, THEN DETERMINE WHETHER WE HAVE DIRECT ACCESS TO THE PC SPEAKER PORT
|
|
||||||
if (soundtype != SOUND_WAVE) // *** TO DO: Need way of determining if DirectX init failed ***
|
|
||||||
{
|
|
||||||
if (soundtype == SOUND_WAVE)
|
|
||||||
soundtype = SOUND_SMART;
|
|
||||||
#ifdef _X86_
|
|
||||||
_try
|
|
||||||
{
|
|
||||||
__asm {
|
|
||||||
in al,0x61
|
|
||||||
xor al,2
|
|
||||||
out 0x61,al
|
|
||||||
xor al,2
|
|
||||||
out 0x61,al
|
|
||||||
}
|
|
||||||
directio = 1;
|
|
||||||
}
|
|
||||||
_except (EXCEPTION_EXECUTE_HANDLER)
|
|
||||||
{
|
|
||||||
directio = 0;
|
|
||||||
}
|
|
||||||
#else
|
|
||||||
directio = 0;
|
|
||||||
#endif
|
|
||||||
if ((!directio) && (soundtype == SOUND_DIRECT))
|
|
||||||
soundtype = SOUND_SMART;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//=============================================================================
|
//=============================================================================
|
||||||
@ -324,25 +222,17 @@ void SpkrReset()
|
|||||||
|
|
||||||
//=============================================================================
|
//=============================================================================
|
||||||
|
|
||||||
BOOL SpkrSetEmulationType (HWND window, DWORD newtype)
|
BOOL SpkrSetEmulationType (HWND window, SoundType_e newtype)
|
||||||
{
|
{
|
||||||
SpkrDestroy(); // GH#295: Destroy for all types (even SOUND_NONE)
|
SpkrDestroy(); // GH#295: Destroy for all types (even SOUND_NONE)
|
||||||
|
|
||||||
soundtype = newtype;
|
soundtype = newtype;
|
||||||
if (soundtype != SOUND_NONE)
|
if (soundtype != SOUND_NONE)
|
||||||
SpkrInitialize();
|
SpkrInitialize();
|
||||||
|
|
||||||
if (soundtype != newtype)
|
if (soundtype != newtype)
|
||||||
switch (newtype) {
|
switch (newtype) {
|
||||||
|
|
||||||
case SOUND_DIRECT:
|
|
||||||
MessageBox(window,
|
|
||||||
TEXT("Direct emulation is not available because the ")
|
|
||||||
TEXT("operating system you are using does not allow ")
|
|
||||||
TEXT("direct control of the speaker."),
|
|
||||||
TEXT("Configuration"),
|
|
||||||
MB_ICONEXCLAMATION | MB_SETFOREGROUND);
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
case SOUND_WAVE:
|
case SOUND_WAVE:
|
||||||
MessageBox(window,
|
MessageBox(window,
|
||||||
TEXT("The emulator is unable to initialize a waveform ")
|
TEXT("The emulator is unable to initialize a waveform ")
|
||||||
@ -356,6 +246,7 @@ BOOL SpkrSetEmulationType (HWND window, DWORD newtype)
|
|||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -461,56 +352,6 @@ BYTE __stdcall SpkrToggle (WORD, WORD, BYTE, BYTE, ULONG nCyclesLeft)
|
|||||||
g_nSpeakerData = SPKR_DATA_INIT;
|
g_nSpeakerData = SPKR_DATA_INIT;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (soundtype != SOUND_NONE)
|
|
||||||
{
|
|
||||||
|
|
||||||
// IF WE ARE CURRENTLY PLAYING A SOUND EFFECT OR ARE IN DIRECT
|
|
||||||
// EMULATION MODE, TOGGLE THE SPEAKER
|
|
||||||
if ((soundeffect > 2) || (soundtype == SOUND_DIRECT))
|
|
||||||
{
|
|
||||||
if (directio)
|
|
||||||
{
|
|
||||||
__asm
|
|
||||||
{
|
|
||||||
push eax
|
|
||||||
in al,0x61
|
|
||||||
xor al,2
|
|
||||||
out 0x61,al
|
|
||||||
pop eax
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
Beep(37,(DWORD)-1);
|
|
||||||
Beep(0,0);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// SAVE INFORMATION ABOUT THE FREQUENCY OF SPEAKER TOGGLING FOR POSSIBLE
|
|
||||||
// LATER USE BY SOUND AVERAGING
|
|
||||||
if (lastcyclenum)
|
|
||||||
{
|
|
||||||
toggles++;
|
|
||||||
//DWORD delta = cyclenum-lastcyclenum; // [TC: 14/09/2014] Looks broken, since 'cyclenum' is cycles executed in previous call to CpuExecute()
|
|
||||||
CpuCalcCycles(nCyclesLeft);
|
|
||||||
DWORD delta = (DWORD)g_nCumulativeCycles - lastcyclenum;
|
|
||||||
|
|
||||||
// DETERMINE WHETHER WE ARE PLAYING A SOUND EFFECT
|
|
||||||
if (directio &&
|
|
||||||
((delta < 250) ||
|
|
||||||
(lastdelta[0] && lastdelta[1] &&
|
|
||||||
(delta-lastdelta[0] > 250) && (lastdelta[0]-delta > 250) &&
|
|
||||||
(delta-lastdelta[1] > 250) && (lastdelta[1]-delta > 250))))
|
|
||||||
soundeffect = MIN(35,soundeffect+2);
|
|
||||||
|
|
||||||
lastdelta[1] = lastdelta[0];
|
|
||||||
lastdelta[0] = delta;
|
|
||||||
totaldelta += delta;
|
|
||||||
}
|
|
||||||
//lastcyclenum = cyclenum;
|
|
||||||
lastcyclenum = (DWORD)g_nCumulativeCycles;
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
return MemReadFloatingBus(nCyclesLeft);
|
return MemReadFloatingBus(nCyclesLeft);
|
||||||
}
|
}
|
||||||
@ -555,63 +396,6 @@ void SpkrUpdate (DWORD totalcycles)
|
|||||||
memmove(g_pSpeakerBuffer, &g_pSpeakerBuffer[nSamplesUsed], g_nBufferIdx-nSamplesUsed); // FIXME-TC: _Size * 2
|
memmove(g_pSpeakerBuffer, &g_pSpeakerBuffer[nSamplesUsed], g_nBufferIdx-nSamplesUsed); // FIXME-TC: _Size * 2
|
||||||
g_nBufferIdx -= nSamplesUsed;
|
g_nBufferIdx -= nSamplesUsed;
|
||||||
}
|
}
|
||||||
else
|
|
||||||
{
|
|
||||||
|
|
||||||
// IF WE ARE NOT PLAYING A SOUND EFFECT, PERFORM FREQUENCY AVERAGING
|
|
||||||
static DWORD currenthertz = 0;
|
|
||||||
static BOOL lastfull = 0;
|
|
||||||
static DWORD lasttoggles = 0;
|
|
||||||
static DWORD lastval = 0;
|
|
||||||
if ((soundeffect > 2) || (soundtype == SOUND_DIRECT)) {
|
|
||||||
lastval = 0;
|
|
||||||
if (currenthertz && (soundeffect > 4)) {
|
|
||||||
InternalBeep(0,0);
|
|
||||||
currenthertz = 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if (toggles && totaldelta) {
|
|
||||||
DWORD newval = 1000000*toggles/totaldelta;
|
|
||||||
if (lastval && lastfull &&
|
|
||||||
(newval-currenthertz > 50) &&
|
|
||||||
(currenthertz-newval > 50)) {
|
|
||||||
InternalBeep(newval,(DWORD)-1);
|
|
||||||
currenthertz = newval;
|
|
||||||
lasttoggles = 0;
|
|
||||||
}
|
|
||||||
lastfull = (totaldelta+((totaldelta/toggles) << 1) >= totalcycles);
|
|
||||||
lasttoggles += toggles;
|
|
||||||
lastval = newval;
|
|
||||||
}
|
|
||||||
else if (currenthertz) {
|
|
||||||
InternalBeep(0,0);
|
|
||||||
currenthertz = 0;
|
|
||||||
lastfull = 0;
|
|
||||||
lasttoggles = 0;
|
|
||||||
lastval = 0;
|
|
||||||
}
|
|
||||||
else if (lastval) {
|
|
||||||
currenthertz = (lasttoggles > 4) ? lastval : 0;
|
|
||||||
if (currenthertz)
|
|
||||||
InternalBeep(lastval,(DWORD)-1);
|
|
||||||
else
|
|
||||||
InternalClick();
|
|
||||||
lastfull = 0;
|
|
||||||
lasttoggles = 0;
|
|
||||||
lastval = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
// RESET THE FREQUENCY GATHERING VARIABLES
|
|
||||||
lastcyclenum = 0;
|
|
||||||
lastdelta[0] = 0;
|
|
||||||
lastdelta[1] = 0;
|
|
||||||
quietcycles = toggles ? 0 : (quietcycles+totalcycles);
|
|
||||||
toggles = 0;
|
|
||||||
totaldelta = 0;
|
|
||||||
if (soundeffect)
|
|
||||||
soundeffect--;
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Called from SoundCore_TimerFunc() for FADE_OUT
|
// Called from SoundCore_TimerFunc() for FADE_OUT
|
||||||
|
@ -1,11 +1,18 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#define SOUND_NONE 0
|
// Registry soundtype:
|
||||||
#define SOUND_DIRECT 1
|
#define REG_SOUNDTYPE_NONE 0
|
||||||
#define SOUND_SMART 2
|
#define REG_SOUNDTYPE_DIRECT 1 // Not supported from 1.26
|
||||||
#define SOUND_WAVE 3
|
#define REG_SOUNDTYPE_SMART 2 // Not supported from 1.26
|
||||||
|
#define REG_SOUNDTYPE_WAVE 3
|
||||||
|
|
||||||
extern DWORD soundtype;
|
enum SoundType_e
|
||||||
|
{
|
||||||
|
SOUND_NONE = 0,
|
||||||
|
SOUND_WAVE
|
||||||
|
};
|
||||||
|
|
||||||
|
extern SoundType_e soundtype;
|
||||||
extern double g_fClksPerSpkrSample;
|
extern double g_fClksPerSpkrSample;
|
||||||
extern bool g_bQuieterSpeaker;
|
extern bool g_bQuieterSpeaker;
|
||||||
extern short g_nSpeakerData;
|
extern short g_nSpeakerData;
|
||||||
@ -14,7 +21,7 @@ void SpkrDestroy ();
|
|||||||
void SpkrInitialize ();
|
void SpkrInitialize ();
|
||||||
void SpkrReinitialize ();
|
void SpkrReinitialize ();
|
||||||
void SpkrReset();
|
void SpkrReset();
|
||||||
BOOL SpkrSetEmulationType (HWND,DWORD);
|
BOOL SpkrSetEmulationType (HWND window, SoundType_e newSoundType);
|
||||||
void SpkrUpdate (DWORD);
|
void SpkrUpdate (DWORD);
|
||||||
void SpkrUpdate_Timer();
|
void SpkrUpdate_Timer();
|
||||||
void Spkr_SetErrorInc(const int nErrorInc);
|
void Spkr_SetErrorInc(const int nErrorInc);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user