Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
David MacDonald
purr-data
Commits
b4e98c29
Commit
b4e98c29
authored
Aug 15, 2007
by
Miller Puckette
Browse files
some debugging on mac
parent
c8470102
Changes
14
Expand all
Hide whitespace changes
Inline
Side-by-side
portaudio/unused/SConscript
deleted
100644 → 0
View file @
c8470102
import
os.path
,
copy
,
sys
def
checkSymbol
(
conf
,
header
,
library
=
None
,
symbol
=
None
,
autoAdd
=
True
,
critical
=
False
,
pkgName
=
None
):
""" Check for symbol in library, optionally look only for header.
@param conf: Configure instance.
@param header: The header file where the symbol is declared.
@param library: The library in which the symbol exists, if None it is taken to be the standard C library.
@param symbol: The symbol to look for, if None only the header will be looked up.
@param autoAdd: Automatically link with this library if check is positive.
@param critical: Raise on error?
@param pkgName: Optional name of pkg-config entry for library, to determine build parameters.
@return: True/False
"""
origEnv
=
conf
.
env
.
Copy
()
# Copy unmodified environment so we can restore it upon error
env
=
conf
.
env
if
library
is
None
:
library
=
"c"
# Standard library
autoAdd
=
False
if
pkgName
is
not
None
:
origLibs
=
copy
.
copy
(
env
.
get
(
"LIBS"
,
None
))
try
:
env
.
ParseConfig
(
"pkg-config --silence-errors %s --cflags --libs"
%
pkgName
)
except
:
pass
else
:
# I see no other way of checking that the parsing succeeded, if it did add no more linking parameters
if
env
.
get
(
"LIBS"
,
None
)
!=
origLibs
:
autoAdd
=
False
try
:
if
not
conf
.
CheckCHeader
(
header
,
include_quotes
=
"<>"
):
raise
ConfigurationError
(
"missing header %s"
%
header
)
if
symbol
is
not
None
and
not
conf
.
CheckLib
(
library
,
symbol
,
language
=
"C"
,
autoadd
=
autoAdd
):
raise
ConfigurationError
(
"missing symbol %s in library %s"
%
(
symbol
,
library
))
except
ConfigurationError
:
conf
.
env
=
origEnv
if
not
critical
:
return
False
raise
return
True
import
SCons.Errors
# Import common variables
# Could use '#' to refer to top-level SConstruct directory, but looks like env.SConsignFile doesn't interpret this at least :(
sconsDir
=
os
.
path
.
abspath
(
os
.
path
.
join
(
"build"
,
"scons"
))
try
:
Import
(
"Platform"
,
"Posix"
,
"ConfigurationError"
,
"ApiVer"
)
except
SCons
.
Errors
.
UserError
:
# The common objects must be exported first
SConscript
(
os
.
path
.
join
(
sconsDir
,
"SConscript_common"
))
Import
(
"Platform"
,
"Posix"
,
"ConfigurationError"
,
"ApiVer"
)
Import
(
"env"
)
# This will be manipulated
env
=
env
.
Copy
()
# We operate with a set of needed libraries and optional libraries, the latter stemming from host API implementations.
# For libraries of both types we record a set of values that is used to look for the library in question, during
# configuration. If the corresponding library for a host API implementation isn't found, the implementation is left out.
neededLibs
=
[]
optionalImpls
=
{}
if
Platform
in
Posix
:
env
.
Append
(
CPPPATH
=
os
.
path
.
join
(
"os"
,
"unix"
))
neededLibs
+=
[(
"pthread"
,
"pthread.h"
,
"pthread_create"
),
(
"m"
,
"math.h"
,
"sin"
)]
if
env
[
"useALSA"
]:
optionalImpls
[
"ALSA"
]
=
(
"asound"
,
"alsa/asoundlib.h"
,
"snd_pcm_open"
)
if
env
[
"useJACK"
]:
optionalImpls
[
"JACK"
]
=
(
"jack"
,
"jack/jack.h"
,
"jack_client_new"
)
if
env
[
"useOSS"
]:
# TODO: It looks like the prefix for soundcard.h depends on the platform
optionalImpls
[
"OSS"
]
=
(
"oss"
,
"sys/soundcard.h"
,
None
)
if
env
[
"useASIHPI"
]:
optionalImpls
[
"ASIHPI"
]
=
(
"hpi"
,
"asihpi/hpi.h"
,
"HPI_SubSysCreate"
)
else
:
raise
ConfigurationError
(
"unknown platform %s"
%
Platform
)
if
Platform
==
"darwin"
:
env
.
Append
(
LINKFLAGS
=
[
"-framework CoreAudio"
,
"-framework AudioToolBox"
])
env
.
Append
(
CPPDEFINES
=
[
"PA_USE_COREAUDIO"
])
elif
Platform
==
"cygwin"
:
env
.
Append
(
LIBS
=
[
"winmm"
])
elif
Platform
==
"irix"
:
neededLibs
+=
[(
"audio"
,
"dmedia/audio.h"
,
"alOpenPort"
),
(
"dmedia"
,
"dmedia/dmedia.h"
,
"dmGetUST"
)]
env
.
Append
(
CPPDEFINES
=
[
"PA_USE_SGI"
])
def
CheckCTypeSize
(
context
,
tp
):
""" Check size of C type.
@param context: A configuration context.
@param tp: The type to check.
@return: Size of type, in bytes.
"""
context
.
Message
(
"Checking the size of C type %s..."
%
tp
)
ret
=
context
.
TryRun
(
"""
#include <stdio.h>
int main() {
printf("%%d", sizeof(%s));
return 0;
}
"""
%
tp
,
".c"
)
if
not
ret
[
0
]:
context
.
Result
(
" Couldn't obtain size of type %s!"
%
tp
)
return
None
assert
ret
[
1
]
sz
=
int
(
ret
[
1
])
context
.
Result
(
"%d"
%
sz
)
return
sz
"""
if sys.byteorder == "little":
env.Append(CPPDEFINES=["PA_LITTLE_ENDIAN"])
elif sys.byteorder == "big":
env.Append(CPPDEFINES=["PA_BIG_ENDIAN"])
else:
raise ConfigurationError("unknown byte order: %s" % sys.byteorder)
"""
if
env
[
"enableDebugOutput"
]:
env
.
Append
(
CPPDEFINES
=
[
"PA_ENABLE_DEBUG_OUTPUT"
])
# Start configuration
# Use an absolute path for conf_dir, otherwise it gets created both relative to current directory and build directory
conf
=
env
.
Configure
(
log_file
=
os
.
path
.
join
(
sconsDir
,
"sconf.log"
),
custom_tests
=
{
"CheckCTypeSize"
:
CheckCTypeSize
},
conf_dir
=
os
.
path
.
join
(
sconsDir
,
".sconf_temp"
))
conf
.
env
.
Append
(
CPPDEFINES
=
[
"SIZEOF_SHORT=%d"
%
conf
.
CheckCTypeSize
(
"short"
)])
conf
.
env
.
Append
(
CPPDEFINES
=
[
"SIZEOF_INT=%d"
%
conf
.
CheckCTypeSize
(
"int"
)])
conf
.
env
.
Append
(
CPPDEFINES
=
[
"SIZEOF_LONG=%d"
%
conf
.
CheckCTypeSize
(
"long"
)])
if
checkSymbol
(
conf
,
"time.h"
,
"rt"
,
"clock_gettime"
):
conf
.
env
.
Append
(
CPPDEFINES
=
[
"HAVE_CLOCK_GETTIME"
])
if
checkSymbol
(
conf
,
"time.h"
,
symbol
=
"nanosleep"
):
conf
.
env
.
Append
(
CPPDEFINES
=
[
"HAVE_NANOSLEEP"
])
if
conf
.
CheckCHeader
(
"sys/soundcard.h"
):
conf
.
env
.
Append
(
CPPDEFINES
=
[
"HAVE_SYS_SOUNDCARD_H"
])
if
conf
.
CheckCHeader
(
"linux/soundcard.h"
):
conf
.
env
.
Append
(
CPPDEFINES
=
[
"HAVE_LINUX_SOUNDCARD_H"
])
if
conf
.
CheckCHeader
(
"machine/soundcard.h"
):
conf
.
env
.
Append
(
CPPDEFINES
=
[
"HAVE_MACHINE_SOUNDCARD_H"
])
# Look for needed libraries and link with them
for
lib
,
hdr
,
sym
in
neededLibs
:
checkSymbol
(
conf
,
hdr
,
lib
,
sym
,
critical
=
True
)
# Look for host API libraries, if a library isn't found disable corresponding host API implementation.
for
name
,
val
in
optionalImpls
.
items
():
lib
,
hdr
,
sym
=
val
if
checkSymbol
(
conf
,
hdr
,
lib
,
sym
,
critical
=
False
,
pkgName
=
name
.
lower
()):
conf
.
env
.
Append
(
CPPDEFINES
=
[
"PA_USE_%s=1"
%
name
.
upper
()])
else
:
del
optionalImpls
[
name
]
# Configuration finished
env
=
conf
.
Finish
()
# PA infrastructure
CommonSources
=
[
os
.
path
.
join
(
"common"
,
f
)
for
f
in
"pa_allocation.c pa_converters.c pa_cpuload.c pa_dither.c pa_front.c
\
pa_process.c pa_skeleton.c pa_stream.c pa_trace.c pa_debugprint.c pa_ringbuffer.c"
.
split
()]
# Host API implementations
ImplSources
=
[]
if
Platform
in
Posix
:
ImplSources
+=
[
os
.
path
.
join
(
"os"
,
"unix"
,
f
)
for
f
in
"pa_unix_hostapis.c pa_unix_util.c"
.
split
()]
if
"ALSA"
in
optionalImpls
:
ImplSources
.
append
(
os
.
path
.
join
(
"hostapi"
,
"alsa"
,
"pa_linux_alsa.c"
))
if
"JACK"
in
optionalImpls
:
ImplSources
.
append
(
os
.
path
.
join
(
"hostapi"
,
"jack"
,
"pa_jack.c"
))
if
"OSS"
in
optionalImpls
:
ImplSources
.
append
(
os
.
path
.
join
(
"hostapi"
,
"oss"
,
"pa_unix_oss.c"
))
if
"ASIHPI"
in
optionalImpls
:
ImplSources
.
append
(
os
.
path
.
join
(
"hostapi"
,
"asihpi"
,
"pa_linux_asihpi.c"
))
sources
=
CommonSources
+
ImplSources
sharedLibEnv
=
env
.
Copy
()
if
Platform
in
Posix
:
# Add soname to library, this is so a reference is made to the versioned library in programs linking against libportaudio.so
sharedLibEnv
.
AppendUnique
(
SHLINKFLAGS
=
"-Wl,-soname=libportaudio.so.%d"
%
int
(
ApiVer
.
split
(
"."
)[
0
]))
sharedLib
=
sharedLibEnv
.
SharedLibrary
(
target
=
"portaudio"
,
source
=
sources
)
staticLib
=
env
.
StaticLibrary
(
target
=
"portaudio"
,
source
=
sources
)
if
Platform
in
Posix
:
prefix
=
env
[
"prefix"
]
includeDir
=
os
.
path
.
join
(
prefix
,
"include"
)
libDir
=
os
.
path
.
join
(
prefix
,
"lib"
)
testNames
=
[
"patest_sine"
,
"paqa_devs"
,
"paqa_errs"
,
"patest1"
,
"patest_buffer"
,
"patest_callbackstop"
,
"patest_clip"
,
\
"patest_dither"
,
"patest_hang"
,
"patest_in_overflow"
,
"patest_latency"
,
"patest_leftright"
,
"patest_longsine"
,
\
"patest_many"
,
"patest_maxsines"
,
"patest_multi_sine"
,
"patest_out_underflow"
,
"patest_pink"
,
"patest_prime"
,
\
"patest_read_record"
,
"patest_record"
,
"patest_ringmix"
,
"patest_saw"
,
"patest_sine8"
,
"patest_sine"
,
\
"patest_sine_time"
,
"patest_start_stop"
,
"patest_stop"
,
"patest_sync"
,
"patest_toomanysines"
,
\
"patest_underflow"
,
"patest_wire"
,
"patest_write_sine"
,
"pa_devs"
,
"pa_fuzz"
,
"pa_minlat"
,
\
"patest_sine_channelmaps"
,]
# The test directory ("bin") should be in the top-level PA directory
tests
=
[
env
.
Program
(
target
=
os
.
path
.
join
(
"#"
,
"bin"
,
name
),
source
=
[
os
.
path
.
join
(
"#"
,
"test"
,
name
+
".c"
),
staticLib
])
for
name
in
testNames
]
Return
(
"sources"
,
"sharedLib"
,
"staticLib"
,
"tests"
,
"env"
)
portaudio/unused/hostapi/asihpi/pa_linux_asihpi.c
deleted
100644 → 0
View file @
c8470102
This diff is collapsed.
Click to expand it.
portaudio/unused/hostapi/dsound/pa_win_ds.c
deleted
100644 → 0
View file @
c8470102
This diff is collapsed.
Click to expand it.
portaudio/unused/hostapi/dsound/pa_win_ds_dynlink.c
deleted
100644 → 0
View file @
c8470102
/*
* Interface for dynamically loading directsound and providing a dummy
* implementation if it isn't present.
*
* Author: Ross Bencina (some portions Phil Burk & Robert Marsanyi)
*
* For PortAudio Portable Real-Time Audio Library
* For more information see: http://www.portaudio.com
* Copyright (c) 1999-2006 Phil Burk, Robert Marsanyi and Ross Bencina
*
* Permission is hereby granted, free of charge, to any person obtaining
* a copy of this software and associated documentation files
* (the "Software"), to deal in the Software without restriction,
* including without limitation the rights to use, copy, modify, merge,
* publish, distribute, sublicense, and/or sell copies of the Software,
* and to permit persons to whom the Software is furnished to do so,
* subject to the following conditions:
*
* The above copyright notice and this permission notice shall be
* included in all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR
* ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF
* CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
* WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/*
* The text above constitutes the entire PortAudio license; however,
* the PortAudio community also makes the following non-binding requests:
*
* Any person wishing to distribute modifications to the Software is
* requested to send the modifications to the original developer so that
* they can be incorporated into the canonical version. It is also
* requested that these non-binding requests be included along with the
* license above.
*/
/**
@file
@ingroup hostaip_src
*/
#include "pa_win_ds_dynlink.h"
PaWinDsDSoundEntryPoints
paWinDsDSoundEntryPoints
=
{
0
,
0
,
0
,
0
,
0
,
0
,
0
};
static
HRESULT
WINAPI
DummyDirectSoundCreate
(
LPGUID
lpcGuidDevice
,
LPDIRECTSOUND
*
ppDS
,
LPUNKNOWN
pUnkOuter
)
{
(
void
)
lpcGuidDevice
;
/* unused parameter */
(
void
)
ppDS
;
/* unused parameter */
(
void
)
pUnkOuter
;
/* unused parameter */
return
E_NOTIMPL
;
}
static
HRESULT
WINAPI
DummyDirectSoundEnumerateW
(
LPDSENUMCALLBACKW
lpDSEnumCallback
,
LPVOID
lpContext
)
{
(
void
)
lpDSEnumCallback
;
/* unused parameter */
(
void
)
lpContext
;
/* unused parameter */
return
E_NOTIMPL
;
}
static
HRESULT
WINAPI
DummyDirectSoundEnumerateA
(
LPDSENUMCALLBACKA
lpDSEnumCallback
,
LPVOID
lpContext
)
{
(
void
)
lpDSEnumCallback
;
/* unused parameter */
(
void
)
lpContext
;
/* unused parameter */
return
E_NOTIMPL
;
}
static
HRESULT
WINAPI
DummyDirectSoundCaptureCreate
(
LPGUID
lpcGUID
,
LPDIRECTSOUNDCAPTURE
*
lplpDSC
,
LPUNKNOWN
pUnkOuter
)
{
(
void
)
lpcGUID
;
/* unused parameter */
(
void
)
lplpDSC
;
/* unused parameter */
(
void
)
pUnkOuter
;
/* unused parameter */
return
E_NOTIMPL
;
}
static
HRESULT
WINAPI
DummyDirectSoundCaptureEnumerateW
(
LPDSENUMCALLBACKW
lpDSCEnumCallback
,
LPVOID
lpContext
)
{
(
void
)
lpDSCEnumCallback
;
/* unused parameter */
(
void
)
lpContext
;
/* unused parameter */
return
E_NOTIMPL
;
}
static
HRESULT
WINAPI
DummyDirectSoundCaptureEnumerateA
(
LPDSENUMCALLBACKA
lpDSCEnumCallback
,
LPVOID
lpContext
)
{
(
void
)
lpDSCEnumCallback
;
/* unused parameter */
(
void
)
lpContext
;
/* unused parameter */
return
E_NOTIMPL
;
}
void
PaWinDs_InitializeDSoundEntryPoints
(
void
)
{
paWinDsDSoundEntryPoints
.
hInstance_
=
LoadLibrary
(
"dsound.dll"
);
if
(
paWinDsDSoundEntryPoints
.
hInstance_
!=
NULL
)
{
paWinDsDSoundEntryPoints
.
DirectSoundCreate
=
(
HRESULT
(
WINAPI
*
)(
LPGUID
,
LPDIRECTSOUND
*
,
LPUNKNOWN
))
GetProcAddress
(
paWinDsDSoundEntryPoints
.
hInstance_
,
"DirectSoundCreate"
);
if
(
paWinDsDSoundEntryPoints
.
DirectSoundCreate
==
NULL
)
paWinDsDSoundEntryPoints
.
DirectSoundCreate
=
DummyDirectSoundCreate
;
paWinDsDSoundEntryPoints
.
DirectSoundEnumerateW
=
(
HRESULT
(
WINAPI
*
)(
LPDSENUMCALLBACKW
,
LPVOID
))
GetProcAddress
(
paWinDsDSoundEntryPoints
.
hInstance_
,
"DirectSoundEnumerateW"
);
if
(
paWinDsDSoundEntryPoints
.
DirectSoundEnumerateW
==
NULL
)
paWinDsDSoundEntryPoints
.
DirectSoundEnumerateW
=
DummyDirectSoundEnumerateW
;
paWinDsDSoundEntryPoints
.
DirectSoundEnumerateA
=
(
HRESULT
(
WINAPI
*
)(
LPDSENUMCALLBACKA
,
LPVOID
))
GetProcAddress
(
paWinDsDSoundEntryPoints
.
hInstance_
,
"DirectSoundEnumerateA"
);
if
(
paWinDsDSoundEntryPoints
.
DirectSoundEnumerateA
==
NULL
)
paWinDsDSoundEntryPoints
.
DirectSoundEnumerateA
=
DummyDirectSoundEnumerateA
;
paWinDsDSoundEntryPoints
.
DirectSoundCaptureCreate
=
(
HRESULT
(
WINAPI
*
)(
LPGUID
,
LPDIRECTSOUNDCAPTURE
*
,
LPUNKNOWN
))
GetProcAddress
(
paWinDsDSoundEntryPoints
.
hInstance_
,
"DirectSoundCaptureCreate"
);
if
(
paWinDsDSoundEntryPoints
.
DirectSoundCaptureCreate
==
NULL
)
paWinDsDSoundEntryPoints
.
DirectSoundCaptureCreate
=
DummyDirectSoundCaptureCreate
;
paWinDsDSoundEntryPoints
.
DirectSoundCaptureEnumerateW
=
(
HRESULT
(
WINAPI
*
)(
LPDSENUMCALLBACKW
,
LPVOID
))
GetProcAddress
(
paWinDsDSoundEntryPoints
.
hInstance_
,
"DirectSoundCaptureEnumerateW"
);
if
(
paWinDsDSoundEntryPoints
.
DirectSoundCaptureEnumerateW
==
NULL
)
paWinDsDSoundEntryPoints
.
DirectSoundCaptureEnumerateW
=
DummyDirectSoundCaptureEnumerateW
;
paWinDsDSoundEntryPoints
.
DirectSoundCaptureEnumerateA
=
(
HRESULT
(
WINAPI
*
)(
LPDSENUMCALLBACKA
,
LPVOID
))
GetProcAddress
(
paWinDsDSoundEntryPoints
.
hInstance_
,
"DirectSoundCaptureEnumerateA"
);
if
(
paWinDsDSoundEntryPoints
.
DirectSoundCaptureEnumerateA
==
NULL
)
paWinDsDSoundEntryPoints
.
DirectSoundCaptureEnumerateA
=
DummyDirectSoundCaptureEnumerateA
;
}
else
{
/* initialize with dummy entry points to make live easy when ds isn't present */
paWinDsDSoundEntryPoints
.
DirectSoundCreate
=
DummyDirectSoundCreate
;
paWinDsDSoundEntryPoints
.
DirectSoundEnumerateW
=
DummyDirectSoundEnumerateW
;
paWinDsDSoundEntryPoints
.
DirectSoundEnumerateA
=
DummyDirectSoundEnumerateA
;
paWinDsDSoundEntryPoints
.
DirectSoundCaptureCreate
=
DummyDirectSoundCaptureCreate
;
paWinDsDSoundEntryPoints
.
DirectSoundCaptureEnumerateW
=
DummyDirectSoundCaptureEnumerateW
;
paWinDsDSoundEntryPoints
.
DirectSoundCaptureEnumerateA
=
DummyDirectSoundCaptureEnumerateA
;
}
}
void
PaWinDs_TerminateDSoundEntryPoints
(
void
)
{
if
(
paWinDsDSoundEntryPoints
.
hInstance_
!=
NULL
)
{
/* ensure that we crash reliably if the entry points arent initialised */
paWinDsDSoundEntryPoints
.
DirectSoundCreate
=
0
;
paWinDsDSoundEntryPoints
.
DirectSoundEnumerateW
=
0
;
paWinDsDSoundEntryPoints
.
DirectSoundEnumerateA
=
0
;
paWinDsDSoundEntryPoints
.
DirectSoundCaptureCreate
=
0
;
paWinDsDSoundEntryPoints
.
DirectSoundCaptureEnumerateW
=
0
;
paWinDsDSoundEntryPoints
.
DirectSoundCaptureEnumerateA
=
0
;
FreeLibrary
(
paWinDsDSoundEntryPoints
.
hInstance_
);
paWinDsDSoundEntryPoints
.
hInstance_
=
NULL
;
}
}
\ No newline at end of file
portaudio/unused/hostapi/dsound/pa_win_ds_dynlink.h
deleted
100644 → 0
View file @
c8470102
/*
* Interface for dynamically loading directsound and providing a dummy
* implementation if it isn't present.
*
* Author: Ross Bencina (some portions Phil Burk & Robert Marsanyi)
*
* For PortAudio Portable Real-Time Audio Library
* For more information see: http://www.portaudio.com
* Copyright (c) 1999-2006 Phil Burk, Robert Marsanyi and Ross Bencina
*
* Permission is hereby granted, free of charge, to any person obtaining
* a copy of this software and associated documentation files
* (the "Software"), to deal in the Software without restriction,
* including without limitation the rights to use, copy, modify, merge,
* publish, distribute, sublicense, and/or sell copies of the Software,
* and to permit persons to whom the Software is furnished to do so,
* subject to the following conditions:
*
* The above copyright notice and this permission notice shall be
* included in all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR
* ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF
* CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
* WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
/*
* The text above constitutes the entire PortAudio license; however,
* the PortAudio community also makes the following non-binding requests:
*
* Any person wishing to distribute modifications to the Software is
* requested to send the modifications to the original developer so that
* they can be incorporated into the canonical version. It is also
* requested that these non-binding requests be included along with the
* license above.
*/
/**
@file
@ingroup hostaip_src
*/
#ifndef INCLUDED_PA_DSOUND_DYNLINK_H
#define INCLUDED_PA_DSOUND_DYNLINK_H
/* on Borland compilers, WIN32 doesn't seem to be defined by default, which
breaks DSound.h. Adding the define here fixes the problem. - rossb. */
#ifdef __BORLANDC__
#if !defined(WIN32)
#define WIN32
#endif
#endif
/*
We are only using DX3 in here, no need to polute the namespace - davidv
*/
#define DIRECTSOUND_VERSION 0x0300
#include <DSound.h>
#ifdef __cplusplus
extern
"C"
{
#endif
/* __cplusplus */
typedef
struct
{
HINSTANCE
hInstance_
;
HRESULT
(
WINAPI
*
DirectSoundCreate
)(
LPGUID
,
LPDIRECTSOUND
*
,
LPUNKNOWN
);
HRESULT
(
WINAPI
*
DirectSoundEnumerateW
)(
LPDSENUMCALLBACKW
,
LPVOID
);
HRESULT
(
WINAPI
*
DirectSoundEnumerateA
)(
LPDSENUMCALLBACKA
,
LPVOID
);
HRESULT
(
WINAPI
*
DirectSoundCaptureCreate
)(
LPGUID
,
LPDIRECTSOUNDCAPTURE
*
,
LPUNKNOWN
);
HRESULT
(
WINAPI
*
DirectSoundCaptureEnumerateW
)(
LPDSENUMCALLBACKW
,
LPVOID
);
HRESULT
(
WINAPI
*
DirectSoundCaptureEnumerateA
)(
LPDSENUMCALLBACKA
,
LPVOID
);
}
PaWinDsDSoundEntryPoints
;
extern
PaWinDsDSoundEntryPoints
paWinDsDSoundEntryPoints
;
void
PaWinDs_InitializeDSoundEntryPoints
(
void
);
void
PaWinDs_TerminateDSoundEntryPoints
(
void
);
#ifdef __cplusplus
}
#endif
/* __cplusplus */
#endif
/* INCLUDED_PA_DSOUND_DYNLINK_H */
portaudio/unused/hostapi/wasapi/pa_win_wasapi.cpp
deleted
100644 → 0
View file @
c8470102
This diff is collapsed.
Click to expand it.
portaudio/unused/hostapi/wdmks/pa_win_wdmks.c
deleted
100644 → 0
View file @
c8470102
This diff is collapsed.
Click to expand it.
portaudio/unused/hostapi/wdmks/readme.txt
deleted
100644 → 0
View file @
c8470102
Notes about WDM-KS host API
---------------------------
Status history
--------------
10th November 2005:
Made following changes:
* OpenStream: Try all PaSampleFormats internally if the the chosen
format is not supported natively. This fixed several problems
with soundcards that soundcards that did not take kindly to
using 24-bit 3-byte formats.
* OpenStream: Make the minimum framesPerHostIBuffer (and framesPerHostOBuffer)
the default frameSize for the playback/recording pin.
* ProcessingThread: Added a switch to only call PaUtil_EndBufferProcessing
if the total input frames equals the total output frames
5th September 2004:
This is the first public version of the code. It should be considered
an alpha release with zero guarantee not to crash on any particular
system. So far it has only been tested in the author's development
environment, which means a Win2k/SP2 PIII laptop with integrated
SoundMAX driver and USB Tascam US-428 compiled with both MinGW
(GCC 3.3) and MSVC++6 using the MS DirectX 9 SDK.
It has been most widely tested with the MinGW build, with most of the
test programs (particularly paqa_devs and paqa_errs) passing.
There are some notable failures: patest_out_underflow and both of the
blocking I/O tests (as blocking I/O is not implemented).
At this point the code needs to be tested with a much wider variety
of configurations and feedback provided from testers regarding
both working and failing cases.
What is the WDM-KS host API?
----------------------------
PortAudio for Windows currently has 3 functional host implementations.
MME uses the oldest Windows audio API which does not offer good
play/record latency.
DirectX improves this, but still imposes a penalty
of 10s of milliseconds due to the system mixing of streams from
multiple applications.
ASIO offers very good latency, but requires special drivers which are
not always available for cheaper audio hardware. Also, when ASIO
drivers are available, they are not always so robust because they
bypass all of the standardised Windows device driver architecture
and hit the hardware their own way.
Alternatively there are a couple of free (but closed source) ASIO
implementations which connect to the lower level Windows
"Kernel Streaming" API, but again these require special installation
by the user, and can be limited in functionality or difficult to use.
This is where the PortAudio "WDM-KS" host implementation comes in.
It directly connects PortAudio to the same Kernel Streaming API which
those ASIO bridges use. This avoids the mixing penatly of DirectX,
giving at least as good latency as any ASIO driver, but it has the
advantage of working with ANY Windows audio hardware which is available
through the normal MME/DirectX routes without the user requiring
any additional device drivers to be installed, and allowing all
device selection to be done through the normal PortAudio API.
Note that in general you should only be using this host API if your
application has a real requirement for very low latency audio (<20ms),
either because you are generating sounds in real-time based upon
user input, or you a processing recorded audio in real time.
The only thing to be aware of is that using the KS interface will
block that device from being used by the rest of system through
the higher level APIs, or conversely, if the system is using
a device, the KS API will not be able to use it. MS recommend that
you should keep the device open only when your application has focus.
In PortAudio terms, this means having a stream Open on a WDMKS device.
Usage
-----
To add the WDMKS backend to your program which is already using
PortAudio, you must undefine PA_NO_WDMKS from your build file,
and include the pa_win_wdmks\pa_win_wdmks.c into your build.
The file should compile in both C and C++.
You will need a DirectX SDK installed on your system for the
ks.h and ksmedia.h header files.
You will need to link to the system "setupapi" library.
Note that if you use MinGW, you will get more warnings from
the DX header files when using GCC(C), and still a few warnings
with G++(CPP).
\ No newline at end of file
src/m_sched.c
View file @
b4e98c29
...
...
@@ -334,11 +334,17 @@ double sys_time_per_dsp_tick;
void
sched_set_using_audio
(
int
flag
)
{
sched_useaudio
=
flag
;
post
(
"new sched %d"
,
sched_useaudio
);
if
(
flag
==
SCHED_AUDIO_NONE
)
{
sched_referencerealtime
=
sys_getrealtime
();
sched_referencelogicaltime
=
clock_getlogicaltime
();
}
if
(
flag
==
SCHED_AUDIO_CALLBACK
&&
sched_useaudio
!=
SCHED_AUDIO_CALLBACK
)
sys_quit
=
SYS_QUIT_RESTART
;
if
(
flag
!=
SCHED_AUDIO_CALLBACK
&&
sched_useaudio
==
SCHED_AUDIO_CALLBACK
)
post
(
"sorry, can't turn off callbacks yet; restart Pd"
);
/* not right yet! */
sys_time_per_dsp_tick
=
(
TIMEUNITPERSEC
)
*
((
double
)
sys_schedblocksize
)
/
sys_dacsr
;
}
...
...
@@ -434,6 +440,11 @@ static void m_pollingscheduler( void)
if
(
!
(
idlecount
&
31
))
{
static
double
idletime
;
if
(
sched_useaudio
!=
SCHED_AUDIO_POLL
)
{
bug
(
"m_pollingscheduler
\n
"
);
return
;
}
/* on 32nd idle, start a clock watch; every
32 ensuing idles, check it */
if
(
idlecount
==
32
)
...
...
@@ -532,6 +543,12 @@ int m_mainloop(void)
if
(
sched_useaudio
==
SCHED_AUDIO_CALLBACK
)
m_callbackscheduler
();
else
m_pollingscheduler
();
if
(
sys_quit
==
SYS_QUIT_RESTART
)
{
sys_quit
=
0
;
sys_close_audio
();
sys_reopen_audio
();
}
}
return
(
0
);
}
...
...
src/s_audio.c
View file @
b4e98c29
...
...
@@ -376,6 +376,7 @@ void sys_reopen_audio( void)
int
rate
,
advance
,
callback
,
outcome
=
0
;
sys_get_audio_params
(
&
naudioindev
,
audioindev
,
chindev
,