mirror of https://github.com/PCSX2/pcsx2.git
ZeroSPU2: Add PortAudio, and make it possible for it to be compiled as Alsa, OSS, or PortAudio on the Linux side.
git-svn-id: http://pcsx2.googlecode.com/svn/trunk@2443 96395faa-99c1-11dd-bbfe-3dabce05a288
This commit is contained in:
parent
78aa3de579
commit
f04235177c
|
@ -6,8 +6,8 @@
|
||||||
<Option pch_mode="2" />
|
<Option pch_mode="2" />
|
||||||
<Option compiler="gcc" />
|
<Option compiler="gcc" />
|
||||||
<Build>
|
<Build>
|
||||||
<Target title="Debug">
|
<Target title="Alsa - Debug">
|
||||||
<Option output="../../../bin/plugins/libZeroSPU2.so.0.1.0" prefix_auto="0" extension_auto="0" />
|
<Option output="../../../bin/plugins/libZeroSPU2d-alsa.so.0.4.6" prefix_auto="0" extension_auto="0" />
|
||||||
<Option object_output="obj/Debug/" />
|
<Option object_output="obj/Debug/" />
|
||||||
<Option type="3" />
|
<Option type="3" />
|
||||||
<Option compiler="gcc" />
|
<Option compiler="gcc" />
|
||||||
|
@ -15,13 +15,14 @@
|
||||||
<Option createStaticLib="1" />
|
<Option createStaticLib="1" />
|
||||||
<Compiler>
|
<Compiler>
|
||||||
<Add option="-g" />
|
<Add option="-g" />
|
||||||
|
<Add option="-DZEROSPU2_ALSA" />
|
||||||
</Compiler>
|
</Compiler>
|
||||||
<Linker>
|
<Linker>
|
||||||
<Add library="../../../deps/debug/libsoundtouch-dbg.a" />
|
<Add library="../../../deps/debug/libsoundtouch-dbg.a" />
|
||||||
</Linker>
|
</Linker>
|
||||||
</Target>
|
</Target>
|
||||||
<Target title="Release">
|
<Target title="Alsa - Release">
|
||||||
<Option output="../../../bin/plugins/libZeroSPU2.so.0.1.0" prefix_auto="0" extension_auto="0" />
|
<Option output="../../../bin/plugins/libZeroSPU2-alsa.so.0.4.6" prefix_auto="0" extension_auto="0" />
|
||||||
<Option object_output="obj/Release/" />
|
<Option object_output="obj/Release/" />
|
||||||
<Option type="3" />
|
<Option type="3" />
|
||||||
<Option compiler="gcc" />
|
<Option compiler="gcc" />
|
||||||
|
@ -29,12 +30,79 @@
|
||||||
<Option createStaticLib="1" />
|
<Option createStaticLib="1" />
|
||||||
<Compiler>
|
<Compiler>
|
||||||
<Add option="-O2" />
|
<Add option="-O2" />
|
||||||
|
<Add option="-DZEROSPU2_ALSA" />
|
||||||
</Compiler>
|
</Compiler>
|
||||||
<Linker>
|
<Linker>
|
||||||
<Add option="-s" />
|
<Add option="-s" />
|
||||||
<Add library="../../../deps/libsoundtouch.a" />
|
<Add library="../../../deps/libsoundtouch.a" />
|
||||||
</Linker>
|
</Linker>
|
||||||
</Target>
|
</Target>
|
||||||
|
<Target title="PortAudio - Debug">
|
||||||
|
<Option output="../../../bin/plugins/libZeroSPU2d-pa.so.0.4.6" prefix_auto="0" extension_auto="0" />
|
||||||
|
<Option object_output="obj/Debug/" />
|
||||||
|
<Option type="3" />
|
||||||
|
<Option compiler="gcc" />
|
||||||
|
<Option createDefFile="1" />
|
||||||
|
<Option createStaticLib="1" />
|
||||||
|
<Compiler>
|
||||||
|
<Add option="-g" />
|
||||||
|
<Add option="-DZEROSPU2_PORTAUDIO" />
|
||||||
|
</Compiler>
|
||||||
|
<Linker>
|
||||||
|
<Add library="../../../deps/debug/libsoundtouch-dbg.a" />
|
||||||
|
<Add library="portaudio" />
|
||||||
|
</Linker>
|
||||||
|
</Target>
|
||||||
|
<Target title="PortAudio - Release">
|
||||||
|
<Option output="../../../bin/plugins/libZeroSPU2-pa.so.0.4.6" prefix_auto="0" extension_auto="0" />
|
||||||
|
<Option object_output="obj/Release/" />
|
||||||
|
<Option type="3" />
|
||||||
|
<Option compiler="gcc" />
|
||||||
|
<Option createDefFile="1" />
|
||||||
|
<Option createStaticLib="1" />
|
||||||
|
<Compiler>
|
||||||
|
<Add option="-O2" />
|
||||||
|
<Add option="-DZEROSPU2_PORTAUDIO" />
|
||||||
|
</Compiler>
|
||||||
|
<Linker>
|
||||||
|
<Add option="-s" />
|
||||||
|
<Add library="../../../deps/libsoundtouch.a" />
|
||||||
|
<Add library="portaudio" />
|
||||||
|
</Linker>
|
||||||
|
</Target>
|
||||||
|
<Target title="OSS - Debug">
|
||||||
|
<Option output="../../../bin/plugins/libZeroSPU2d-oss.so.0.4.6" prefix_auto="0" extension_auto="0" />
|
||||||
|
<Option object_output="obj/Debug/" />
|
||||||
|
<Option type="3" />
|
||||||
|
<Option compiler="gcc" />
|
||||||
|
<Option createDefFile="1" />
|
||||||
|
<Option createStaticLib="1" />
|
||||||
|
<Compiler>
|
||||||
|
<Add option="-g" />
|
||||||
|
<Add option="-DZEROSPU2_OSS" />
|
||||||
|
</Compiler>
|
||||||
|
<Linker>
|
||||||
|
<Add library="../../../deps/debug/libsoundtouch-dbg.a" />
|
||||||
|
<Add library="portaudio" />
|
||||||
|
</Linker>
|
||||||
|
</Target>
|
||||||
|
<Target title="OSS - Release">
|
||||||
|
<Option output="../../../bin/plugins/libZeroSPU2-oss.so.0.4.6" prefix_auto="0" extension_auto="0" />
|
||||||
|
<Option object_output="obj/Release/" />
|
||||||
|
<Option type="3" />
|
||||||
|
<Option compiler="gcc" />
|
||||||
|
<Option createDefFile="1" />
|
||||||
|
<Option createStaticLib="1" />
|
||||||
|
<Compiler>
|
||||||
|
<Add option="-O2" />
|
||||||
|
<Add option="-DZEROSPU2_OSS" />
|
||||||
|
</Compiler>
|
||||||
|
<Linker>
|
||||||
|
<Add option="-s" />
|
||||||
|
<Add library="../../../deps/libsoundtouch.a" />
|
||||||
|
<Add library="portaudio" />
|
||||||
|
</Linker>
|
||||||
|
</Target>
|
||||||
</Build>
|
</Build>
|
||||||
<Compiler>
|
<Compiler>
|
||||||
<Add option="-Wall" />
|
<Add option="-Wall" />
|
||||||
|
@ -71,6 +139,16 @@
|
||||||
<Unit filename="../Targets/Alsa.h" />
|
<Unit filename="../Targets/Alsa.h" />
|
||||||
<Unit filename="../Targets/OSS.cpp" />
|
<Unit filename="../Targets/OSS.cpp" />
|
||||||
<Unit filename="../Targets/OSS.h" />
|
<Unit filename="../Targets/OSS.h" />
|
||||||
|
<Unit filename="../Targets/PortAudio.cpp">
|
||||||
|
<Option target="PortAudio - Debug" />
|
||||||
|
<Option target="PortAudio - Release" />
|
||||||
|
<Option target="OSS - Release" />
|
||||||
|
<Option target="OSS - Debug" />
|
||||||
|
</Unit>
|
||||||
|
<Unit filename="../Targets/PortAudio.h">
|
||||||
|
<Option target="Alsa - Debug" />
|
||||||
|
<Option target="Alsa - Release" />
|
||||||
|
</Unit>
|
||||||
<Unit filename="../Targets/SoundTargets.cpp" />
|
<Unit filename="../Targets/SoundTargets.cpp" />
|
||||||
<Unit filename="../Targets/SoundTargets.h" />
|
<Unit filename="../Targets/SoundTargets.h" />
|
||||||
<Unit filename="../misc.h" />
|
<Unit filename="../misc.h" />
|
||||||
|
|
|
@ -0,0 +1,101 @@
|
||||||
|
/* ZeroSPU2
|
||||||
|
* Copyright (C) 2006-2010 zerofrog
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation; either version 2 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program; if not, write to the Free Software
|
||||||
|
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
|
*/
|
||||||
|
|
||||||
|
// PortAudio support implemented by Zedr0n.
|
||||||
|
|
||||||
|
#include "PortAudio.h"
|
||||||
|
#include "Linux.h"
|
||||||
|
|
||||||
|
PaStream *stream;
|
||||||
|
|
||||||
|
#define FRAMES_PER_BUFFER 4096
|
||||||
|
|
||||||
|
int paSetupSound()
|
||||||
|
{
|
||||||
|
// initialize portaudio
|
||||||
|
PaError err = Pa_Initialize();
|
||||||
|
if( err != paNoError) {
|
||||||
|
ERROR_LOG("ZeroSPU2: Error initializing portaudio: %s\n", Pa_GetErrorText(err) );
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
ERROR_LOG("ZeroSPU2: Initialized portaudio... \n");
|
||||||
|
|
||||||
|
/* Open an audio I/O stream. */
|
||||||
|
err = Pa_OpenDefaultStream( &stream,
|
||||||
|
0, /* no input channels */
|
||||||
|
2, /* stereo output */
|
||||||
|
paInt16, /* 16 bit integer point output */
|
||||||
|
SAMPLE_RATE,
|
||||||
|
FRAMES_PER_BUFFER, /* frames per buffer, i.e. the number
|
||||||
|
of sample frames that PortAudio will
|
||||||
|
request from the callback. Many apps
|
||||||
|
may want to use
|
||||||
|
paFramesPerBufferUnspecified, which
|
||||||
|
tells PortAudio to pick the best,
|
||||||
|
possibly changing, buffer size.*/
|
||||||
|
NULL, /* this is your callback function */
|
||||||
|
NULL ); /*This is a pointer that will be passed to
|
||||||
|
your callback*/
|
||||||
|
if( err != paNoError )
|
||||||
|
{
|
||||||
|
ERROR_LOG("ZeroSPU2: Error opening sound stream...\n");
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
else ERROR_LOG("ZeroSPU2: Created sound stream successfully...\n");
|
||||||
|
|
||||||
|
MaxBuffer = 0;
|
||||||
|
|
||||||
|
err = Pa_StartStream( stream );
|
||||||
|
if( err != paNoError )
|
||||||
|
{
|
||||||
|
ERROR_LOG("ZeroSPU2: Error starting sound stream...\n");
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
else ERROR_LOG("ZeroSPU2: Started sound stream successfully...\n");
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
void paRemoveSound()
|
||||||
|
{
|
||||||
|
PaError err = Pa_StopStream( stream );
|
||||||
|
if( err != paNoError )
|
||||||
|
ERROR_LOG("ZeroSPU2: PortAudio error: %s\n", Pa_GetErrorText( err ) );
|
||||||
|
else
|
||||||
|
ERROR_LOG("ZeroSPU2: stream stopped... \n");
|
||||||
|
|
||||||
|
err = Pa_Terminate();
|
||||||
|
if( err != paNoError )
|
||||||
|
ERROR_LOG("PortAudio error: %s\n", Pa_GetErrorText( err ) );
|
||||||
|
else
|
||||||
|
ERROR_LOG("ZeroSPU2: portaudio terminated... \n");
|
||||||
|
}
|
||||||
|
|
||||||
|
int paSoundGetBytesBuffered()
|
||||||
|
{
|
||||||
|
unsigned long l = Pa_GetStreamWriteAvailable(stream);
|
||||||
|
if(MaxBuffer == 0) MaxBuffer = l;
|
||||||
|
return MaxBuffer - l;
|
||||||
|
}
|
||||||
|
|
||||||
|
void paSoundFeedVoiceData(unsigned char* pSound, long lBytes)
|
||||||
|
{
|
||||||
|
Pa_WriteStream(stream, (void*) pSound, (unsigned long) lBytes / 4);
|
||||||
|
}
|
||||||
|
|
|
@ -0,0 +1,40 @@
|
||||||
|
/* ZeroSPU2
|
||||||
|
* Copyright (C) 2006-2010 zerofrog
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation; either version 2 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program; if not, write to the Free Software
|
||||||
|
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
|
*/
|
||||||
|
|
||||||
|
// PortAudio support implemented by Zedr0n.
|
||||||
|
#ifndef PORTAUDIO_H_INCLUDED
|
||||||
|
#define PORTAUDIO_H_INCLUDED
|
||||||
|
|
||||||
|
#include "portaudio.h"
|
||||||
|
#include "SoundTargets.h"
|
||||||
|
|
||||||
|
extern int paSetupSound();
|
||||||
|
extern void paRemoveSound();
|
||||||
|
extern int paSoundGetBytesBuffered();
|
||||||
|
extern void paSoundFeedVoiceData(unsigned char* pSound,long lBytes);
|
||||||
|
|
||||||
|
// Pull in from Alsa.cpp
|
||||||
|
static SoundCallbacks PACmds =
|
||||||
|
{
|
||||||
|
(intFunction)paSetupSound,
|
||||||
|
(voidFunction)paRemoveSound,
|
||||||
|
(intFunction)paSoundGetBytesBuffered,
|
||||||
|
(soundFeedFunction)paSoundFeedVoiceData
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // PORTAUDIO_H_INCLUDED
|
|
@ -23,11 +23,9 @@ u32 SOUNDSIZE;
|
||||||
s32 MaxBuffer;
|
s32 MaxBuffer;
|
||||||
|
|
||||||
#ifdef __LINUX__
|
#ifdef __LINUX__
|
||||||
|
|
||||||
#include "Linux.h"
|
#include "Linux.h"
|
||||||
|
|
||||||
#ifdef ZEROSPU2_ALSA
|
#ifdef ZEROSPU2_ALSA
|
||||||
#include "Alsa.h"
|
|
||||||
void InitAlsa()
|
void InitAlsa()
|
||||||
{
|
{
|
||||||
SoundCmds = &AlsaCmds;
|
SoundCmds = &AlsaCmds;
|
||||||
|
@ -37,8 +35,6 @@ void InitAlsa()
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef ZEROSPU2_OSS
|
#ifdef ZEROSPU2_OSS
|
||||||
#include "OSS.h"
|
|
||||||
#endif
|
|
||||||
|
|
||||||
void InitOSS()
|
void InitOSS()
|
||||||
{
|
{
|
||||||
|
@ -46,6 +42,8 @@ void InitOSS()
|
||||||
SOUNDSIZE = 76800;
|
SOUNDSIZE = 76800;
|
||||||
MaxBuffer = 80000;
|
MaxBuffer = 80000;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
#else
|
#else
|
||||||
#include "dsound51.h"
|
#include "dsound51.h"
|
||||||
|
|
||||||
|
@ -57,13 +55,15 @@ void InitDSound()
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/*#include "PortAudio.h"
|
#ifdef ZEROSPU2_PORTAUDIO
|
||||||
|
#include "PortAudio.h"
|
||||||
|
|
||||||
void InitPortAudio()
|
void InitPortAudio()
|
||||||
{
|
{
|
||||||
SoundCmds = &PACmds;
|
SoundCmds = &PACmds;
|
||||||
SOUNDSIZE = 4096;
|
SOUNDSIZE = 4096;
|
||||||
}*/
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
int SetupSound()
|
int SetupSound()
|
||||||
{
|
{
|
||||||
|
|
|
@ -16,14 +16,14 @@
|
||||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef SOUNDTARGETS_H_INCLUDED
|
#ifndef SOUNDTARGETS_H_INCLUDED
|
||||||
#define SOUNDTARGETS_H_INCLUDED
|
#define SOUNDTARGETS_H_INCLUDED
|
||||||
|
|
||||||
#include "Pcsx2Defs.h"
|
#include "Pcsx2Defs.h"
|
||||||
|
|
||||||
typedef void (*voidFunction)();
|
typedef void (*voidFunction)();
|
||||||
typedef int (*intFunction)();
|
typedef int (*intFunction)();
|
||||||
typedef bool (*boolFunction)();
|
typedef bool (*boolFunction)();
|
||||||
typedef void (*soundFeedFunction)(unsigned char *, long);
|
typedef void (*soundFeedFunction)(unsigned char *, long);
|
||||||
|
|
||||||
struct SoundCallbacks
|
struct SoundCallbacks
|
||||||
|
@ -33,19 +33,23 @@ struct SoundCallbacks
|
||||||
intFunction SoundGetBytesBuffered;
|
intFunction SoundGetBytesBuffered;
|
||||||
soundFeedFunction SoundFeedVoiceData;
|
soundFeedFunction SoundFeedVoiceData;
|
||||||
};
|
};
|
||||||
|
|
||||||
extern SoundCallbacks *SoundCmds;
|
extern SoundCallbacks *SoundCmds;
|
||||||
extern u32 SOUNDSIZE;
|
extern u32 SOUNDSIZE;
|
||||||
extern s32 MaxBuffer;
|
extern s32 MaxBuffer;
|
||||||
|
|
||||||
// Target List
|
// Target List
|
||||||
#ifdef __LINUX__
|
#ifdef __LINUX__
|
||||||
|
|
||||||
|
#if (!defined(ZEROSPU2_ALSA) && !defined(ZEROSPU2_OSS) && !defined(ZEROSPU2_PORTAUDIO))
|
||||||
#define ZEROSPU2_ALSA // Comment if Alsa isn't on the system.
|
#define ZEROSPU2_ALSA // Comment if Alsa isn't on the system.
|
||||||
#define ZEROSPU2_OSS // Comment if OSS isn't on the system.
|
|
||||||
#else
|
|
||||||
#define ZEROSPU2_DS
|
|
||||||
#endif
|
#endif
|
||||||
//#define ZEROSPU2_PORTAUDIO
|
|
||||||
|
#else
|
||||||
|
|
||||||
|
#define ZEROSPU2_DS
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifdef ZEROSPU2_OSS
|
#ifdef ZEROSPU2_OSS
|
||||||
#include "OSS.h"
|
#include "OSS.h"
|
||||||
|
@ -75,5 +79,5 @@ extern int SetupSound();
|
||||||
extern void RemoveSound();
|
extern void RemoveSound();
|
||||||
extern int SoundGetBytesBuffered();
|
extern int SoundGetBytesBuffered();
|
||||||
extern void SoundFeedVoiceData(unsigned char* pSound,long lBytes);
|
extern void SoundFeedVoiceData(unsigned char* pSound,long lBytes);
|
||||||
|
|
||||||
#endif // SOUNDTARGETS_H_INCLUDED
|
#endif // SOUNDTARGETS_H_INCLUDED
|
||||||
|
|
|
@ -220,6 +220,8 @@ void InitApi()
|
||||||
InitAlsa();
|
InitAlsa();
|
||||||
#elif defined(ZEROSPU2_OSS)
|
#elif defined(ZEROSPU2_OSS)
|
||||||
InitOSS();
|
InitOSS();
|
||||||
|
#elif defined(ZEROSPU2_PORTAUDIO)
|
||||||
|
InitPortAudio();
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue