Compare commits

...
Sign in to create a new pull request.
Author SHA1 Message Date
b939f22931 Update README to document Pa_RefreshDevice fork and Node.js bindings usage
Add clear documentation that this is a fork with Pa_RefreshDevice functionality,
link to the specific commit, and provide instructions for using with the nodeaudio
Node.js bindings.

Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
2026-08-08 12:00:12 -05:00
f26c25af6c update README 2026-07-24 15:55:10 -05:00
Andrew Gundersen
aaf62b6f51 Updated README.md 2022-03-10 07:22:02 -06:00
Andrew Gundersen
3958fef3eb Updating ReadMe 2022-03-07 16:22:50 -06:00
Andrew Gundersen
1f01a3ddc0 Pa_RefreshDevice functionality 2021-08-20 11:09:19 -05:00
John Melas
16884fc201
Unify all stringizing macros to new PA_STRINGIZE macro in pa_util.h (#605) 2021-07-01 10:19:21 +10:00
John Melas
038a696aec
pa_win_wmme.c: replace LPCTSTR with LPCWSTR (#597) 2021-06-23 10:15:57 +10:00
Trent Piepho
d859f7d5df
Have PaUtil_GetTime() use monotonic time on Unix (#559)
The currently used clock, CLOCK_REALTIME, will have discontinuous jumps, forward
and backward, when the system clock is adjusted.  This is bad for synchronizing
audio.  CLOCK_MONOTONIC does not have jumps, and never moves backward, but does
have the continuous adjustments done by NTP to increase clock accuracy.

Since kernel 2.6.25 ALSA has use CLOCK_MONOTONIC by default for timestamps
(commit b751eef1 from Dec 13 2007).  This change means the timestamps provided
in the PA callbacks can be compared to PaUtil_GetTime(), which currently does
not work.

The function used on MacOS, mach_absolute_time(), behaves like CLOCK_MONOTONIC.

If the system does not have CLOCK_MONOTONIC, fallback to CLOCK_REALTIME, which
is what alsa-lib does for such systems.  Which at this point would need to be
very old.

* Use clock monotonic for condition variable

This is necessary to match PaUtil_GetTime() also using the monotonic
clock.  Otherwise the wait time, derived from that function, will be
completely incorrect.

This will also fix an obscure flaw if the system clock is adjust while
waiting for the stream to open, it might not wait at all and fail or
wait (effectively) forever instead of timing out, depend on the
adjustment direction.
2021-06-08 17:52:32 -07:00
John Melas
52a78c72f3
Unify windows error processing into a single PaWinUtil_SetLastSystemErrorInfo function (#495) 2021-06-09 10:43:40 +10:00
Phil Burk
8124f82f5c
alsa: init stream variable in pa_linux_alsa.c (#584)
Prevent compiler warnings.

Alternative to #567
2021-06-08 17:19:44 -07:00
Phil Burk
8ef5021a9d
test: time out in patest_sine_time.c (#585)
On ALSA the StreamTime was not advancing so the while()
loop never exited. Now it will time out if it plays for much
longer than expected without the stream time changing.

Also measure timestamp latency from callback info.
2021-06-08 17:19:14 -07:00
Phil Burk
2bd663ca75
pa_mac_core.c: init streamLatency and others (#591)
Prevent compiler warnings.
2021-06-08 17:06:48 -07:00
Trent Piepho
9413fa051f
Alsa: Use hires timestamps (#560)
ALSA added nanosecond timestamps in library version 0.9.1.  Use these
instead of microsecond timestamps for reporting audio timestamps as well
as underrun/overrun times.

alsa-lib version 0.9.1 was released on Mar 11 2003.  I had fallback code
to use non-hires timestamps, but after 18 years it didn't seem
necessary, and I removed it from this commit.
2021-06-02 18:03:42 -07:00
Ross Bencina
9faca9b95b Add documentation indicating that Pa_ReadStream, Pa_WriteStream, Pa_GetStreamReadAvailable and Pa_GetStreamWriteAvailable are only valid while the stream is running (between calls to Pa_StartStream and Pa_StopStream.) 2021-05-26 17:10:56 -07:00
Mirko Rajkovaca
15dfd46b33
Added Pa_GetVersionInfo to portaudio.def (#574)
* - added Pa_GetVersionInfo to portaudio.def

* - added Pa_GetVersionInfo to `cmake_support/template_portaudio.def`

Co-authored-by: Mirko Rajkovaca <mirko@mrcode.dev>
2021-05-27 10:07:27 +10:00
MonkeybreadSoftware
840489460f
alsa: Increase snprintf buffer size to fix warning (#566)
Avoid compiler warning suggesting the buffer is too small:

../PortAudioLib/portaudio/src/hostapi/alsa/pa_linux_alsa.c: In function 'BuildDeviceList.constprop':
../PortAudioLib/portaudio/src/hostapi/alsa/pa_linux_alsa.c:1304:45: warning: '%s' directive output may be truncated writing up to 49 bytes into a region of size between 46 and 50 [-Wformat-truncation=]
             snprintf( buf, sizeof (buf), "%s%s,%d", hwPrefix, alsaCardName, devIdx );
                                             ^~                ~~~~~~~~~~~~
../PortAudioLib/portaudio/src/hostapi/alsa/pa_linux_alsa.c:1304:42: note: directive argument in the range [0, 2147483647]
             snprintf( buf, sizeof (buf), "%s%s,%d", hwPrefix, alsaCardName, devIdx );
                                          ^~~~~~~~~
../PortAudioLib/portaudio/src/hostapi/alsa/pa_linux_alsa.c:1304:13: note: 'snprintf' output between 3 and 65 bytes into a destination of size 50
             snprintf( buf, sizeof (buf), "%s%s,%d", hwPrefix, alsaCardName, devIdx );
             ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2021-05-13 10:36:10 +10:00
Be
febd58ebba
MME: fix comparison of IO buffer sizes in CalculateBufferSettings() (#571)
Pull in fix from Audacity: https://bugzilla.audacityteam.org/show_bug.cgi?id=1969

The problem was some kind of typo, comparing pointers instead of the values of pointers.
2021-05-13 10:17:10 +10:00
Dmitry Kostjuchenko
39bfe6c63d
Merge pull request #552 from PortAudio/winrt
wasapi: Fixed compilation with MinGW (W64)
2021-04-29 09:27:50 +03:00
John Melas
aa053464eb
[macOS] drop support for 10.5 (#511)
* drop support for 10.5

* more documentation fixes

Co-authored-by: John Melas <john@jmelas.gr>
2021-04-28 17:38:18 -07:00
Be
b184fe82ed
remove deprecated pablio (#437)
This is deprecated code from 1999.
2021-04-28 17:35:03 -07:00
MichalPetryka
a563f2d39d
Whitespace cleanup in Java and C++ bindings#458) 2021-04-28 17:23:52 -07:00
Be
3e782f2494 CMake: clean up including headers for examples 2021-04-28 17:13:32 -07:00
Be
640d26cdea CMake: build qa executables 2021-04-28 17:13:32 -07:00
Be
ee2c707495 CMake: build all tests 2021-04-28 17:13:32 -07:00
Be
dfa969b3d9 GH Actions: add separate workflow for CMake testing every OS 2021-04-28 17:13:32 -07:00
Be
c5d6563d1c CMake: bump minimum version to 3.0.0 to fix deprecation warning 2021-04-28 17:13:32 -07:00
Phil Burk
32f5cbda7e
paqa_devs.c: define _USE_MATH_DEFINES (#554)
before including math.h

Fixes #551
2021-04-17 13:00:18 -07:00
Phil Burk
df2be4e048
patest_unplug.c: change int32_t to int (#553)
To prevent compiler errors and to avoid controversy over
stdint.h vs inttypes.h.

Fixes #550
2021-04-17 12:56:16 -07:00
dmitrykos
c6178e8592 wasapi: Fixed compilation with MinGW (W64) when targeting 32-bit platform 2021-04-15 11:39:02 +03:00
Phil Burk
67caa13f19
fix patest_converters.c argc argv order (#544)
They were reversed.
Also added void casts to prevent unused parameter warnings.
2021-04-12 06:29:03 -07:00
Ross Bencina
147dd72254
Improve JACK regex pattern escape code (see ticket #534). Improves previously merged PR #405 master commit eec7bb7 by performing string conversion directly in to the target buffer, thus avoiding one allocation and one strncpy per client/device name. (#536) 2021-03-31 17:17:30 -07:00
Be
eec7bb7397
JACK PipeWire fixes (escape regex chars) (#504)
This patch fixes a problem caused by special regex characters
appearing in the device names when using the Jack interface to PipeWire.

It is uncommon for JACK ports to have any characters that need to
be escaped in a regex. jackd simply calls the audio interface
"system". However PipeWire uses the device name from ALSA for the
JACK port names. If this contains any special regex characters,
BuildDeviceList would find the device but determine it has 0
input channels and 0 output channels. In my case, I have an RME
Babyface Pro which puts its serial number in parentheses:

$ aplay -l
card 0: Pro70785713 [Babyface Pro (70785713)], device 0: USB Audio [USB Audio]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
2021-03-19 10:51:31 -07:00
Phil Burk
3f7bee79a6 Bump version to 19.7.0 2021-03-07 07:33:41 -08:00
Phil Burk
b14e866b27 configure: better test for Mac OS arch
Use AC_COMPILE_IFELSE because AC_TRY_COMPILE is deprecated.
Include cdefs.h because it has checks for architcture.
2021-02-25 07:06:33 -08:00
petris
793c7ffc18 WASAPI final whitespace fix 2021-02-24 17:34:47 -08:00
MichalPetryka
78415a838a
Add .editorconfig (#394) 2021-02-18 12:49:18 +11:00
Ross Bencina
79932a5919
Clean up whitespace in src/hostapi/coreaudio in preparation for .editorconfig. (#502)
* Clean up whitespace in src/hostapi/coreaudio in preparation for .editorconfig. Convert tabs to 4 spaces. Indent by 4 spaces. Strip trailing whitespace. Ensure only one EOL at EOF.
2021-02-18 12:11:14 +11:00
Dmitry Kostjuchenko
078fc760c5
Merge pull request #510 from alienpenguin/fix-vs2010-compilation
wasapi: Fix compilation for VS2010.
2021-02-17 09:13:45 +02:00
Francesco Lamonica
9ef2c28bb8 fixed VS2010 compilation 2021-02-16 23:15:53 +01:00
Dmitry Kostjuchenko
8ccd53fe7c
Merge pull request #509 from PortAudio/winrt
wasapi: Fixed compilation for UWP platform, minor cleanup and refactoring.
2021-02-16 12:54:24 +02:00
dmitrykos
712685c71a wasapi: Fixed compilation for UWP platform, minor cleanup and refactoring. 2021-02-16 12:43:58 +02:00
Dmitry Kostjuchenko
c47aa44c1c
Merge pull request #508 from PortAudio/winrt
wasapi: Fixed glitchy audio in case of Exclusive polling mode and 24-bit packed format.
2021-02-16 12:34:26 +02:00
dmitrykos
7926e3a8ee wasapi: Fixed glitchy audio in case of Exclusive mode, 24-bit packed format and USB DAC (other audio devices using the same audio format could be affected too). 2021-02-16 12:15:00 +02:00
Phil Burk
0ac93f8634 coreaudio: remove pa_mac_core_old.c
It has not been used for years.

Fixes #493
2021-02-12 08:13:07 -08:00
MichalPetryka
73291bb1f5
Cleanup newlines at EOF in oss (#491) 2021-02-11 14:02:46 +11:00
MichalPetryka
94e4cf69c3
Cleanup newlines at EOF in dsound (#490) 2021-02-11 14:02:22 +11:00
Peter Ross
b2a4d5cb80
configure/make: export PaWasapi_* and PaWasapiWinrt_* symbols (#500) 2021-02-11 12:37:23 +11:00
Phil Burk
fa42d1284e macos: consider major version 11
Change version logic to allow for major 11 or later.

Partial fix for #492
2021-02-10 17:11:52 -08:00
Dmitry Kostjuchenko
0b73f1589c
Merge pull request #496 from rouseabout/master
wasapi: add PaWasapi_GetIMMDevice function
2021-02-09 23:39:33 +02:00
Peter Ross
38eba25bcc WASAPI: Add PaWaspi_GetIMMDevice function
The IMMDevice pointer enables access to audio device capabiltiies not exposed by PortAudio.
https://docs.microsoft.com/en-us/windows/win32/api/mmdeviceapi/nn-mmdeviceapi-immdevice
2021-02-10 08:10:21 +11:00
Dmitry Kostjuchenko
ec3dd05855
Merge pull request #499 from rouseabout/consistent-export-symbol-numbers
cmake_support/template_portaudio.def: make symbol numbers consistent …
2021-02-09 23:03:29 +02:00
Peter Ross
0f26679b88 cmake_support/template_portaudio.def: make symbol numbers consistent with build/msvc/portaudio.def 2021-02-10 07:29:15 +11:00
orbea
4932b488c5 build: Fix builds with parallel make. 2021-02-05 15:40:33 -08:00
John Melas
dd857f6108 replace Carbon with CoreFoundation and CoreServices 2021-02-05 11:06:09 -08:00
Ed Maste
607b7d94d0
OSS: support 32-bit signed format AFMT_S32_NE (#462)
It may not be provided by all OSS implementations, so wrap the cases in
`#ifdef AFMT_S32_NE`.
2021-02-04 13:11:03 +11:00
Phil Burk
51547aa31c configure: add arm64 for Mac M1
Add additional architecture to builds.

Fixes #445
2021-02-03 17:35:08 -08:00
Phil Burk
9756c86061 configure: add INCLUDES for mingw build
Previously, only portaudio.h was installed when building under mingw using
make. This behavior differs from CMakeLists.txt PA_PUBLIC_INCLUDES where
pa_win_*.h header files are installed.

To cross-compile using MXE (https://mxe.cc/) we need pa_win_*.h headers.
Add them to configure.in so that they are installed.

Patch by Stefan Hajnoczi
2021-02-03 17:31:02 -08:00
MichalPetryka
9a5c7cb346
Cleanup newlines at EOF in skeleton (#480) 2021-02-04 12:20:11 +11:00
MichalPetryka
74fa59a036
Cleanup newlines at EOF in src/os/win (#481) 2021-02-04 12:19:45 +11:00
MichalPetryka
b5a55169b9
Cleanup newlines at EOF in src/common (#482) 2021-02-04 12:19:23 +11:00
MichalPetryka
67dc808f69
Cleanup newlines at EOF in src/hostapi/asio (#483) 2021-02-04 12:18:29 +11:00
Ross Bencina
d36033d5da
Clean up whitespace in src/hostapi/wasapi in preparation for .editorconfig. Indent by 4 spaces. Strip trailing whitespace. (#477) 2021-02-04 12:17:29 +11:00
Ross Bencina
bfb9b7f7e7
Clean up whitespace in src/hostapi/wdmks in preparation for .editorconfig. Indent by 4 spaces. Strip trailing whitespace. (#476) 2021-02-04 12:17:16 +11:00
Ross Bencina
3686f2f053
Clean up whitespace in src/hostapi/alsa in preparation for .editorconfig. Indent by 4 spaces. (#475) 2021-02-04 12:17:00 +11:00
Davide Gerhard
813b281826 pa_mac_core.c: add missing definition to fix build on older systems
thanks to @kencu
2021-01-31 09:08:05 -08:00
luz paz
52b1026c1f Fix user-facing and non-user-facing typos
Found via `codespell v2.1.dev0`  
`codespell -q 3 -L chello,gord,guid,numer,pres,uint,wirth`
2021-01-27 17:40:26 -08:00
John Melas
b50bca981e
use variadic arguments in DEFINE_GUID also for MSVC (#374)
The fix for DEFINE_GUID that was recently added in pa_win_wdmks.c is also needed for the MSVC compiler.
Latest versions of the compiler support the /Zc:preprocessor option which is conforming to C99 and later standards
https://docs.microsoft.com/en-us/cpp/build/reference/zc-preprocessor?view=msvc-160
so it generates the exact same error as Clang (too many arguments error).

Co-authored-by: John Melas <john@jmelas.gr>
2021-01-28 12:29:24 +11:00
Ross Bencina
358d153564
Run MSBuild MSVC project CI for pull requests (#419) 2021-01-27 23:50:10 +11:00
Phil Burk
fa525d6199
mac autoconf: support current and future SDKs (#470)
Improve the way we generate the path to the SDK so that it
it not tied to specific Mac versions.

Also changed macosx-version-min to 10.6

Fixes #378
Fixes #468

Use xcrun instead of xcodebuild

Note that "configure" was generated using autoconf on Linux.
2021-01-26 15:25:10 -08:00
Phil Burk
68e1c5685b
Fix patest1 printf (#467)
* Fix patest1.c printf

Got changed from fprintf() accidentally.

Fixes #466
2021-01-24 14:54:28 -08:00
orbea
6a86d4bd3b autoconf build: add src dir src/hostapi/skeleton to fix out of tree builds." 2021-01-22 07:40:11 -08:00
petris
85f7602a3c Whitespace cleanup in test 2021-01-22 07:34:52 -08:00
petris
92e7210603 Whitespace cleanup in examples 2021-01-22 07:34:09 -08:00
petris
2d0a88a618 Whitespace cleanup in qa 2021-01-22 07:18:08 -08:00
Phil Burk
f7efb6b53c
docs: Pa_OpenStream() fails if sampleRate unavailable (#446)
It was not clear in the previous docs.
Fixes #443
2021-01-21 08:17:27 -08:00
Ross Bencina
0b832f5ff1
Clean up whitespace in qa/ in preparation for .editorconfig. (#418)
* Clean up whitespace in qa/ in preparation for .editorconfig. Convert tabs to 4 spaces. Indent by 4 spaces. Strip trailing whitespace. Ensure EOL at EOF.
2021-01-22 00:00:40 +11:00
Ross Bencina
f58b69dc36
Clean up whitespace in test/ in preparation for .editorconfig. (#417)
* Clean up whitespace in test/ in preparation for .editorconfig. Convert tabs to 4 spaces. Indent by 4 spaces. Strip trailing whitespace. Ensure EOL at EOF.
2021-01-21 23:45:10 +11:00
Ross Bencina
b251bdd7f8
Clean up whitespace in src/os/unix in preparation for .editorconfig. Convert tabs to 4 spaces. Indent by 4 spaces. Strip trailing whitespace. Ensure EOL at EOF. (#410) 2021-01-21 23:27:43 +11:00
Ross Bencina
4c673d1f2b
Clean up whitespace in src/os/win in preparation for .editorconfig. (#409)
* Clean up whitespace in src/os/win in preparation for .editorconfig. Convert tabs to 4 spaces. Indent by 4 spaces. Strip trailing whitespace. Ensure EOL at EOF.
2021-01-21 23:23:00 +11:00
Ross Bencina
fac71001ee
Clean up whitespace in src/common in preparation for .editorconfig. (#408)
* Clean up whitespace in src/common in preparation for .editorconfig. Convert tabs to 4 spaces. Indent by 4 spaces. Strip trailing whitespace.
2021-01-21 23:06:08 +11:00
Ross Bencina
af9f4e3e19
Clean up whitespace in pa_win_wmme.c in preparation for .editorconfig (#413)
* Clean up whitespace in pa_win_wmme.c in preparation for .editorconfig. Convert tabs to 4 spaces. Indent by 4 spaces. Strip trailing whitespace. Ensure EOL at EOF.

* vertically align trailing comments on 4 space boundary
2021-01-21 22:46:49 +11:00
Ross Bencina
fd4cebf2cb
Clean up whitespace in src\hostapi\dsound in preparation for .editorconfig. Convert tabs to 4 spaces. Indent by 4 spaces. Strip trailing whitespace. Ensure EOL at EOF. (#412) 2021-01-21 22:32:05 +11:00
Ross Bencina
238d8db31a
Clean up whitespace in examples/ in preparation for .editorconfig. Convert tabs to 4 spaces. Indent by 4 spaces. Strip trailing whitespace. Ensure EOL at EOF. (#416) 2021-01-21 22:23:23 +11:00
Ross Bencina
f476839ab8
Clean up whitespace in pa_asio.cpp in preparation for .editorconfig. Convert tabs to 4 spaces. Indent by 4 spaces. Strip trailing whitespace. Ensure EOL at EOF. (#411) 2021-01-21 22:17:17 +11:00
Etienne Dechamps
80c5f27120
Ignore the Visual Studio CMake settings file. (#422)
When using CMake, this file is written by Visual Studio to hold custom
CMake parameters.
2021-01-21 22:16:44 +11:00
Ross Bencina
20a971df57
Clean up whitespace in src/hostapi/{asihpi, jack, oss, skeleton} in preparation for .editorconfig. (#414)
* Clean up whitespace in src/hostapi/{asihpi, jack, oss, skeleton} in preparation for .editorconfig. Convert tabs to 4 spaces. Indent by 4 spaces. Strip trailing whitespace. Ensure EOL at EOF.

* Additional formatting cleanups.
2021-01-21 21:58:54 +11:00
Ross Bencina
c441223dfa
Clean up whitespace in include/ in preparation for .editorconfig. (#415)
* Clean up whitespace in include/ in preparation for .editorconfig. Convert tabs to 4 spaces. Indent by 4 spaces. Strip trailing whitespace. Ensure EOL at EOF.
2021-01-21 14:19:22 +11:00
John Melas
51e075d3dc alignment fixes 2021-01-20 18:21:30 -08:00
John Melas
9a1fa58773 remove todo comments 2021-01-20 18:21:30 -08:00
John Melas
ac76dea010 pass input size in AudioConverterFillComplexBuffer as number of packets 2021-01-20 18:21:30 -08:00
John Melas
61c402f941 fix ringBufferIOProc 2021-01-20 18:21:30 -08:00
John Melas
1d3a239fd0 remove support for OS X 10.4, rename functions pa_ -> PaMacCore_ 2021-01-20 18:21:30 -08:00
John Melas
f4ca438599 formatting and #ifdef comment 2021-01-20 18:21:30 -08:00
John Melas
992e84387f fix compile error 2021-01-20 18:21:30 -08:00
John Melas
98ea697d33 new hal 2021-01-20 18:21:30 -08:00
John Melas
afc6591519 fix logging warnings 2021-01-20 18:21:30 -08:00
Ed Maste
fc2a24d394 OSS: correct test for unsupported formats
Previously GetAvailableFormats returned paSampleFormatNotSupported if
AFMT_S16_NE was not supported, regardless of the supported state of any
other formats.  Instead, return paSampleFormatNotSupported if no
supported formats are found.
2021-01-20 18:16:21 -08:00
Ed Maste
f13ab77c46 OSS: include both /dev/dsp and /dev/dsp0
On FreeBSD /dev/dsp is the default device but may not be /dev/dsp0.
PortAudio in the FreeBSD ports collection initially had a patch to
replace the default device with /dev/dsp (for example, with three
devices and /dev/dsp1 as the default we'd have /dev/dsp0, /dev/dsp,
/dev/dsp2).  This caused some trouble (the first device is no longer
default) and was later replaced with this change, leaving /dev/dsp
as the first entry, and just adding each /dev/dsp%d that exists.

FreeBSD bugs 208968 and 236118.
2021-01-20 18:15:56 -08:00
Be
91debabf3f remove unused and undocumented fixdir.bat & fixfile.bat 2021-01-21 12:56:56 +11:00
Be
0377f169b7 remove index.html
This file does not belong in a code repository.
2021-01-20 17:54:15 -08:00
Dmitry Kostjuchenko
93df249256
Merge pull request #429 from bluecataudio/fix_wsapi_failure
wasapi: Device list should not fail with error if no audio device found.
2021-01-07 20:36:10 +02:00
Blue Cat Audio
3532e56784 Fix: WASAPI should not fail with error if no device found 2021-01-07 12:52:09 +01:00
Dmitry Kostjuchenko
00df77e6b1
Merge pull request #421 from dechamps/mixdef
Add missing PaWasapi_GetDeviceMixFormat cmake DLL export
2021-01-02 17:30:05 +02:00
Etienne Dechamps
5b75613f06 Add missing PaWasapi_GetDeviceMixFormat cmake DLL export
This omission made it impossible to use PaWasapi_GetDeviceMixFormat()
from a PortAudio DLL built using CMake.
2021-01-01 15:42:20 +00:00
Dmitry Kostjuchenko
d6fc190012
Merge pull request #376 from jmelas/wasapi_mismatch
wasapi: Fix signed/unsigned mismatch warning.
2020-12-29 17:30:48 +02:00
John Melas
159b415af0 fix signed/unsigned mismatch warning 2020-12-29 17:22:57 +02:00
Dmitry Kostjuchenko
a4cbc426d2
Merge pull request #406 from bear101/startstream_block
WASAPI: Report thread running so Pa_StartStream can return
2020-12-29 10:46:16 +02:00
Bjørn Damstedt Rasmussen
2d8c7eb0f7 Report thread running so Pa_StartStream can return prior to PaStreamCallback
StartStream() calls WaitForSingleObject(stream->hThreadStart, 60*1000)
but it will not be able to return until X number of PaStreamCallback
have been performed by ProcessOutputBuffer().

The above behaviour will cause a deadlock if the user supplied
PaStreamCallback tries to access a shared lock currently held by the
function calling Pa_StartStream().

Also it's a bit weird that you start receiving PaStreamCallbacks
before Pa_StartStream() is able to complete.
2020-12-29 09:27:38 +01:00
MichalPetryka
f4a9023400 Align slashes 2020-12-28 08:22:23 -08:00
MichalPetryka
6f90db9612 Update pa_win_wmme.c 2020-12-28 08:22:23 -08:00
petris
17b895bb8f Fix ANSI in MME and DSound 2020-12-28 08:22:23 -08:00
Ross Bencina
7ffe61ea26 Fix uninitialized variable warnings. Improved solution for PR #377 2020-12-28 23:19:59 +11:00
Ross Bencina
6a676d3ecb wdmks: Reset packet->Header.OptionsFlags = 0 for each packet. Fixes issue with Focusrite Scarlett 2i4 (1st Gen). Fixes #310 2020-12-27 23:04:42 +11:00
Ross Bencina
fb9b6463eb Rename build steps for clarity. 2020-12-27 23:03:46 +11:00
Ross Bencina
cdd1cf69fe Add new GitHub action to build PortAudio using the MSVC project file. Fixes #368. 2020-12-27 23:03:46 +11:00
Jean-Michaël Celerier
a7bda88e6b Fix a GCC warning due to unsigned substraction
Given

    unsigned int reqRate, setRate, deviation;

then 

    setRate - reqRate

is also an unsigned int - the code works "by chance" as `abs` casts that to an int which overflows and is technically undefined behaviour, for instance for setRate = 44100 and reqRate = 48000.

Thus cast them to int when computing the absolute value to ensure no UB.
2020-12-26 15:41:53 -08:00
Phil Burk
63bbb63343 paqa_devs.c: improve file comment 2020-12-26 08:47:56 -08:00
Phil Burk
d68a78d30b paqa_devs.c: remove some white space 2020-12-26 08:47:56 -08:00
Phil Burk
5f869e787e paqa_devs: test default device
Use sine wave instead of sawtooth because it is
easier to hear glitches.

Add some options:
    -a - Test ALL devices, otherwise just the default devices.
    -i - Test INPUT only.
    -o - Test OUTPUT only.
2020-12-26 08:47:56 -08:00
Ross Bencina
1a5c410f7f return paInternalError from PaWasapi_UpdateDeviceList() when it is disabled 2020-12-21 16:37:38 +11:00
Ross Bencina
4ce9f0d0a8 fix issue #321 broken MSVC build. Always define PaWasapi_UpdateDeviceList() even when it is a no-op because it is mentioned in the .def file. 2020-12-21 16:37:38 +11:00
Ross Bencina
609b998334 Fix compiler warnings: 'type cast': conversion from 'int' to 'HWAVEIN' of greater size. See ticket #370 2020-12-21 16:35:52 +11:00
Phil Burk
cff8571659
Merge pull request #344 from daschuer/ChameleonPatch
Don't crash if alsa_snd_pcm_poll_descriptors fails
2020-12-18 09:57:32 -08:00
Phil Burk
0da139d46d
Merge pull request #373 from jmelas/dword_thread
Change PaWinUtilComInitializationResult::initializingThreadId to DWORD to match the native type of WIN32 thread id
2020-12-18 09:50:36 -08:00
John Melas
7503d9f239 fix non latin1 character in pa_debugprint.c 2020-12-18 22:58:22 +11:00
John Melas
1c54d71e2a use DWORD for thread id 2020-12-18 11:50:44 +02:00
Dmitry Kostjuchenko
3c6337b268
Merge pull request #364 from MichalPetryka/patch-1
Update def files for #340
2020-12-18 09:30:49 +02:00
MichalPetryka
11a3e23917
Update portaudio.def 2020-12-17 10:53:44 +01:00
MichalPetryka
b900df6d9d
Add PaWasapiWinrt_PopulateDeviceList 2020-12-17 09:53:16 +01:00
MichalPetryka
e5cb1a620f
Update def files for #340 2020-12-15 19:39:22 +01:00
Daniel Schürmann
9ddb047ab1 Improve code style 2020-12-14 08:22:54 +01:00
Daniel Schürmann
8f63b51808 Don't crash for alsa_snd_pcm_poll_descriptors fail in another case 2020-12-14 08:03:04 +01:00
Phil Burk
e76f8fdd40
Merge pull request #361 from luzpaz/typos
Fix user-facing and non-user-facing typos
2020-12-13 14:39:55 -08:00
luzpaz
0588b306c4
Revert typo
Co-authored-by: Phil Burk <philburk@mobileer.com>
2020-12-12 21:35:50 -05:00
luz paz
e1c3e59ee8 Fix user-facing and non-user-facing typos
Found via `codespell v2.1.dev0`
2020-12-11 20:24:05 -05:00
Dmitry Kostjuchenko
37a97ac470
Merge pull request #362 from PortAudio/winrt
wasapi: Fixed underruns in the Exclusive mode on UWP platform.
2020-12-11 15:33:26 +02:00
dmitrykos
f3924081ab wasapi: Fixed underruns in the Exclusive mode on UWP platform (or when timeBeginPeriod does not allow to set 1 ms granularity) by assuming that system timer granularity on UWP equals to 10 msec, make sure time to sleep provided by GetNextSleepTime is aligned to the granularity of the system timer. 2020-12-11 15:30:08 +02:00
Nemirtingas
e5279859ce
Fix GUID defines in pa_win_wdmks.c when compiling with clang-cl (#327)
Fix GUID defines in pa_win_wdmks.c when compiling with clang-cl

Co-authored-by: Nemirtingas <nanaki89@hotmail.fr>
2020-12-08 17:28:56 +11:00
Dmitry Kostjuchenko
5f35d35ad0
Fixed breaking strict-aliasing rules (if compiled with GCC with -fstrict-aliasing) in PaWin_InitializeWaveFormatExtensible(). (#342) 2020-12-08 17:26:54 +11:00
Daniel Schürmann
b37657be70 Remove superfluid void cast 2020-11-27 08:40:45 +01:00
Ross Bencina
521209c633
pa_mac_core_utilities: add void to empty function argument list (#355)
Insert "void" in the argument list to turn initializeXRunListenerList and destroyXRunListenerList declarations into valid prototypes. Also update the function definitions to match. Thanks to Paul Boersma.
2020-11-26 13:46:05 +11:00
Paul Boersma
4793ce4fbf
Add missing void argument, and include include pa_jack.h in pa_jack.c (#347)
* Update pa_jack.c

include `pa_jack.h` in `pa_jack.c`, which provides prototypes for PaJack_SetClientName() and PaJack_GetClientName()

* Update pa_unix_util.h

PaUnixThreading_Initialize() is not a prototype in C, make it PaUnixThreading_Initialize(void)

* Update pa_unix_util.c

make PaUnixThreading_Initialize definition correspond to prototype
2020-11-26 12:39:01 +11:00
Colin McEwan
7e2a33c875
Fix crashes on disconnected pins in wmdks topologies. (#300)
* Fix crashes on disconnected pins in wmdks topologies.
* Fix potential assert on disconnected physical output pin in PinNew
2020-11-19 13:22:22 +11:00
Daniel Schürmann
ccc88607b6 Don't crash if alsa_snd_pcm_poll_descriptors fails 2020-11-12 00:25:34 +01:00
Phil Burk
88c71a6ec4
Merge pull request #338 from hoolrory/ticket_218_2
Replace usage of deprecated component manager APIs on 10.6+
2020-10-28 17:32:30 -07:00
Nemirtingas
fd0d181261 Add the install interface. 2020-10-29 11:30:33 +11:00
Dmitry Kostjuchenko
f1cd56e05b
Merge pull request #341 from PortAudio/winrt
wasapi: Fixed compilation with MinGW32 (original mingw32, not mingw-w64).
2020-10-26 22:29:00 +02:00
dmitrykos
b3592b0749 wasapi: Fixed compilation with MinGW (mingw32): gcc version 6.3.0 (MinGW.org GCC-6.3.0-1), include /mingw-include folder explicitly (when compiling with mingw-w64 the /mingw-include folder must not be included). 2020-10-26 21:28:37 +02:00
Dmitry Kostjuchenko
e86babdcb2
Merge pull request #340 from PortAudio/winrt
wasapi: Support multiple devices in the device list on Windows UWP/WiRT platform.
2020-10-26 16:49:44 +02:00
dmitrykos
a5fb8d94aa wasapi: Support multiple devices in the device list on Windows UWP/WinRT platform. All UWP/WinRT functions are now prefixed as PaWasapiWinrt_ to be clearly visible, therefore PaWasapi_SetDefaultInterfaceId() was renamed to PaWasapiWinrt_SetDefaultDeviceId(). Expanded Important notes regarding UWP/WinRT platform and how to make the fully-functional device list with the corresponding pseudo-code example for easier understanding of the functionality. 2020-10-26 16:40:25 +02:00
Hool, Rory
b1a0902852 Replace usage of deprecated component manager APIs on 10.6+
These APIs are deprecated in 10.8+ and are disabled on 11.0(10.16)+ https://developer.apple.com/documentation/coreservices/carbon_core/component_manager?language=objc
> "This application, or a library it uses, is using the deprecated Component Manager for hosting Audio Components. This is not supported when rebuilding against the 10.16 or later SDK. Also, this makes the host incompatible with version 3 audio units. Please transition to the API's in AudioComponent.h."
2020-10-22 13:53:56 -04:00
Etienne Dechamps
9d3e583ce5 Add a GitHub action for building with CMake on MSVC. 2020-10-22 08:16:51 -07:00
Etienne Dechamps
e96c5dbdec Add a GitHub action for building with CMake. 2020-10-22 08:16:51 -07:00
Dmitry Kostjuchenko
da20219f27
Merge pull request #312 from PortAudio/alsa_ignore_all_plugins
alsa: Option to ignore all ALSA plugin devices.
2020-10-22 10:34:51 +03:00
Jean-Michaël Celerier
58fe947b7f Add support for enabling dynamic alsa loading in CMakeLists.txt
It had been added to the source code a long time ago, but was not integrated to the
build system.
2020-10-22 11:50:48 +11:00
Etienne Dechamps
5bc01421c8 Add a GitHub action for cross-compiling to MinGW via CMake. 2020-10-22 11:40:11 +11:00
Etienne Dechamps
bd5b68a62b Ignore files generated by Visual Studio 2017/2019. 2020-10-22 11:31:37 +11:00
dmitrykos
6bb858643b alsa: Introduce possibility to ignore all ALSA plugin devices by setting the environment variable PA_ALSA_IGNORE_ALL_PLUGINS to non-0. Fixed logic of guarding assertion in BuildDeviceList() when only one or none PCM device is available (may occur if PA_ALSA_IGNORE_ALL_PLUGINS is set to non-0 or when device has no any audio device available, including plugin devices). 2020-10-15 11:05:05 +03:00
Dmitry Kostjuchenko
6a90e596b6
Merge pull request #325 from PortAudio/winrt
wasapi: Refactored device list creation, if faulty audio device is re…
2020-10-10 00:43:32 +03:00
dmitrykos
522f982158 wasapi: Refactored device list creation, if faulty audio device is reported as active by WASAPI then it will not break device list creation, silenced warnings when compiling for UWP platform. 2020-10-10 00:42:20 +03:00
Dmitry Kostjuchenko
3913a95a9b
Merge pull request #324 from PortAudio/winrt
wasapi: Replace tabs with 4-spaces to comply with PortAudio code styl…
2020-10-09 00:59:40 +03:00
dmitrykos
aa6ff975af wasapi: Replace tabs with 4-spaces to comply with PortAudio code style guidelines (http://github.com/PortAudio/portaudio/wiki/ImplementationStyleGuidelines). 2020-10-09 00:57:23 +03:00
Ross Bencina
19f638da5a wdmks: ensure that pins that failed creation by PinNew() are set to NULL. Note that PaUtil_AllocateMemory currently calls GlobalAlloc without the GMEM_ZEROINIT flag, so there was no guarantee that filter->pins[pinId] was zero. 2020-10-08 12:03:47 +11:00
Phil Burk
e90b19ef2b docs: change Assembla links to GitHub
Fixes #298
2020-10-08 10:18:37 +11:00
Dmitry Kostjuchenko
7db12305c3
Merge pull request #316 from PortAudio/winrt
wasapi: Fix paInvalidSampleRate (and any other) error code is replaced with paInvalidDevice.
2020-10-05 20:56:42 +03:00
Phil Burk
2a7f8fcd7a build: add new Mac SDKs to configure
Add SDK 10.14 and 10.15 to configure.in

Removed i386 and PPC architectures on Mac because they are
deprecated and make fails if they are used.

The configure file was generated from the configure.in
file by entering this on Linux:

    aclocal
    autoconf

Fixes 308
2020-10-03 17:01:58 -07:00
dmitrykos
dcc2f7fa48 wasapi: Fix paInvalidSampleRate (and any other) error code is replaced with paInvalidDevice if audio client failed to be created due to some reason. 2020-10-03 23:21:11 +03:00
Dmitry Kostjuchenko
8c6cc73265
Merge pull request #307 from PortAudio/winrt
wasapi: Improvement to lower possible cases of underruns due to coarse system timer and time-hungry user-side processing..
2020-10-03 23:00:22 +03:00
dmitrykos
697fcddce5 wasapi: Improve stability of playback in Polling Shared mode with a low host latency requsted (22 ms):
- Implement workaround for system timer coarse granularity causing underruns by using timeBeginPeriod/timeEndPeriod APIs inside the Event and Poll thread handlers.
- Update next sleep time of the Poll rendering loop dynamically depending on time taken for processing/rendering of audio data into the available host buffer to avoid underruns and fit processing time into periodic polling time slots.
- Add support for time slots logging in Poll mode if PA_WASAPI_LOG_TIME_SLOTS is defined. Fixed audible glitches by preloading the whole host buffer before stream is started.
- Fix audible glitches on stream start by preloading the whole host buffer before stream is started.
2020-10-03 22:55:36 +03:00
Tatsuya Matsumoto
519364b9a5 Fix a broken link (Tutorial Start) in README.md. 2020-10-03 07:52:54 -07:00
Ross Bencina
8119355f76
Update bug_report.md with more details 2020-10-01 10:38:48 +10:00
Phil Burk
2a1b7d4ad6 Add bug report template 2020-10-01 10:26:08 +10:00
Phil Burk
df4e0bf405 Create c-cpp.yml
Add continuous integration build test.
2020-09-30 17:16:35 -07:00
Phil Burk
d7c67287b8
Merge pull request #304 from ibauersachs/patch-1
Fix CMake build after renaming readme
2020-09-27 18:28:19 -07:00
Dmitry Kostjuchenko
0326a6573b
Merge pull request #305 from sveinse/feature-wasapi-glitch-fix
wasapi: Implement fix for glitching WASAPI playback in the Shared Mode
2020-09-27 21:17:23 +03:00
Svein Seldal
9ebe293dc5 Implement fix for glitching WASAPI playback #303 2020-09-27 18:28:19 +02:00
Ingo Bauersachs
e1443bae25
Fix CMake build after renaming readme 2020-09-27 00:02:53 +02:00
Phil Burk
a63ed32b99
Merge pull request #299 from RossBencina/RossBencina-README-patch-1
Fix doc and examples references in README.md
2020-09-24 09:55:49 -07:00
Ross Bencina
ffa556a475
Fix doc and examples references in README.md 2020-09-24 14:11:42 +10:00
Ross Bencina
be86be4b8e
Merge pull request #297 from philburk/philburk-patch-readme
Update and rename README.txt to README.md
2020-09-24 14:01:04 +10:00
Phil Burk
7273b8de27
Update and rename README.txt to README.md
Use markdown
2020-09-23 20:36:04 -07:00
Ross Bencina
09087cf5a6 Merge branch 'edechamps-remove-testcvs' into 'master'
Get rid of the garbage testcvs/ directory

+1: Phil Burk, Ross Bencina

Merged-on: https://assembla.com/code/portaudio/git/merge_requests/7106691
2020-08-06 00:38:10 +00:00
Ross Bencina
f828ad5fdc Merge branch 'alsa_uninitialized_dir_fixes' into 'master'
Fix additional cases of uninitialized dir variable in pa_linux_alsa.c

+1: Phil Burk

Merged-on: https://assembla.com/code/portaudio/git/merge_requests/7613051
2020-08-06 00:25:37 +00:00
Ross Bencina
b107f0853a Merge branch 'ticket_263_alsa_uninitialized_var_2' into 'master'
Fix uninitialized dir variable in pa_linux_alsa.c (Version 2)

+1: Ross Bencina, Phil Burk

Merged-on: https://assembla.com/code/portaudio/git/merge_requests/7612921
2020-08-06 00:23:46 +00:00
dmitrykos
799a6834a5 wasapi: Fixed OSVERSIONINFO initialization (patch provided by Carlo Bramini). 2020-03-26 20:05:53 +02:00
Ross Bencina
f269bf93e6 follow up fix related to 933b05c331 (ticket #263 uninitialized dir variable): fix the three other places where dir parameter wasn't set prior to entry to a snd_pcm_*_get_* function. There is some ambiguity about (a) whether this is intentional (i.e. use the rounding dir returned by previous *_get_* call, the PA source code does not indicate), and (b) whether it is meaningful (i.e. whether *_get_* functions actually use the value upon input -- the ALSA docs are not clear. regarding (a): I don't think it's intentional, i think it was just oversight. In any case thr risk is low: the underlying values of period_size, periods_max, periods_min, are all integer and should not be rounded, get_rate_min/get_rate_max are used only for debug reporting (I've set them to 0,0 for a minimal change from the current code, but -1,1 makes more sense). 2019-05-14 07:36:24 +10:00
Ross Bencina
933b05c331 fix uninitialized dir variable in pa_linux_alsa.c GropeDevice() by removing it. pass NULL as parameter to ALSA functions instead. see ticket #263. 2019-05-14 07:00:47 +10:00
Phil Burk
c5d2c51bd6 Merge branch 'removeasio' into 'master'
asio: remove unnecessary ASIO SDK files

+1: Phil Burk

Merged-on: https://assembla.com/code/portaudio/git/merge_requests/7559751
2019-04-26 16:48:28 +00:00
Phil Burk
ab665735ad asio: remove unnecessary ASIO SDK files
These files should be obtained directly from Steinberg.
2019-04-26 09:43:52 -07:00
Dmitry Kostjuchenko
eb6b5e2598 Merge branch 'winrt' into 'master'
WASAPI: Add paWinWasapiAutoConvert flag, which sets AUDCLNT_STREAMFLAGS_AUTOCONVERTPCM | AUDCLNT_STREAMFLAGS_SRC_DEFAULT_QUALITY for Shared mode streams.

Merged-on: https://assembla.com/code/portaudio/git/merge_requests/7481081
2019-04-05 07:42:43 +00:00
dmitrykos
c40b969e1b wasapi: some cleanup of Jörn Heusipp's patch 2019-04-05 10:38:44 +03:00
Jörn Heusipp
aa0748a5b5 wasapi: Add paWinWasapiAutoConvert flag, which sets AUDCLNT_STREAMFLAGS_AUTOCONVERTPCM | AUDCLNT_STREAMFLAGS_SRC_DEFAULT_QUALITY for Shared mode streams.
AUDCLNT_STREAMFLAGS_AUTOCONVERTPCM is required in order to allow for sample rates other than the system mixer configured sample rate. Otherwise, WASAPI is limited to a single system configured sample rate in Shared mode, which is a severe limitation compared to other APIs supported by PortAudio.
AUDCLNT_STREAMFLAGS_SRC_DEFAULT_QUALITY is recommended to be used additionally.
See <https://docs.microsoft.com/en-us/windows/desktop/coreaudio/audclnt-streamflags-xxx-constants> for documentation.

GetClosestFormat is modified to exit early when paWinWasapiAutoConvert is set in Shared mode because we trust the WASAPI conversions to succeed.

We restrict these changes to Windows 7 (and later) because documentation does not clearly state the minimum required Windows version. Windows Vista was not available for testing.

This patch has been in production in OpenMPT (<https://openmpt.org/>) since version 1.27.01.00 (2017-09-27). PortAudio WASAPI Shared mode is the default output device type in OpenMPT for Windows 7 (and later) and also for Wine setups.
2019-04-05 10:02:17 +03:00
Dmitry Kostjuchenko
d7229de83b Merge branch 'winrt' into 'master'
WASAPI: Fix failing with unsupported format error if PaWasapiStreamCategory is other than default

Merged-on: https://assembla.com/code/portaudio/git/merge_requests/7376301
2019-04-05 06:53:39 +00:00
dmitrykos
d99940b26e wasapi: set IAudioClient2+ properties before GetClosestFormat() in order to avoid failing with unsupported format error if PaWasapiStreamCategory is other than default, for example eAudioCategorySpeech 2019-03-09 12:43:14 +02:00
Dmitry Kostjuchenko
7bfa11f463 Merge branch 'winrt' into 'master'
WASAPI: Improved audio output stability in Exclusive mode for some UAC2 DACs

Merged-on: https://assembla.com/code/portaudio/git/merge_requests/7327181
2019-02-23 21:04:57 +00:00
dmitrykos
96f81c0ec1 wasapi: Improved audio output stability in Exclusive mode for some UAC2 DACs with custom USB Audio driver by calculating buffer periodicity being equal (or almost equal) to the requested user frames (Capturing is excluded from this implementation as it has not yet been tested but can be included if tests show the improvement), cleanup/refactor some code to make it better readable 2019-02-23 23:02:38 +02:00
Dmitry Kostjuchenko
b7870b08f7 Merge branch 'winrt' into 'master'
WASAPI: new API PaWasapi_SetStreamStateHandler(), header cleanup and minor fix

Merged-on: https://assembla.com/code/portaudio/git/merge_requests/7129721
2018-12-24 12:22:35 +00:00
dmitrykos
83ab55b62d wasapi: new API PaWasapi_SetStreamStateHandler() to be able to catch WASAPI error inside the rendering thread loop (and handle it gracefully, for example restart the stream), protect from dangling pointer during device list update, cleanup header 2018-12-24 14:20:29 +02:00
Etienne Dechamps
8d0e18f87b Get rid of the garbage testcvs/ directory. 2018-12-15 15:15:59 +00:00
313 changed files with 138863 additions and 30929 deletions

13
.editorconfig Normal file
View file

@ -0,0 +1,13 @@
# EditorConfig info: https://editorconfig.org/
root = true
[Makefile*]
indent_style = tab
[*.{c,cpp,h,cxx,hxx}]
indent_style = space
indent_size = 4
charset = utf-8
trim_trailing_whitespace = true
insert_final_newline = true
max_line_length = 120

34
.github/ISSUE_TEMPLATE/bug_report.md vendored Normal file
View file

@ -0,0 +1,34 @@
---
name: Bug report
about: Create a report to help us improve
title: ''
labels: ''
assignees: ''
---
(Please use the mailing list for support requests and general discussion. This is only for actual bugs.)
**Describe the bug**
A clear and concise description of what the bug is.
**To Reproduce**
Steps to reproduce the behavior. Include code if applicable.
1.
**Expected behavior**
A clear and concise description of what you expected to happen.
**Actual behavior**
What actually happened.
Include a recording if helpful.
Error messages or logs longer than a page should be attached as a .txt file.
**Desktop (please complete the following information):**
- OS: [e.g. Mac OS]
- OS Version [e.g. 22]
- PortAudio version: stable, nightly snapshot (which?), current (please give date and/or Git hash):
- If Windows or Linux, which Host API (e.g. WASAPI):
**Additional context**
Add any other context about the problem here.

96
.github/workflows/MSBuild.yml vendored Normal file
View file

@ -0,0 +1,96 @@
name: MSBuild MSVC Project File CI
on: [push, pull_request]
env:
# Path to the solution file relative to the root of the project.
SOLUTION_FILE_PATH: ./build/msvc/portaudio.sln
VCPROJ_FILE_PATH: ./build/msvc/portaudio.vcproj
VCXPROJ_FILE_PATH: ./build/msvc/portaudio.vcxproj
VCXPROJ_FILTERS_FILE_PATH: ./build/msvc/portaudio.vcxproj.filters
VCXPROJ_USER_FILE_PATH: ./build/msvc/portaudio.vcxproj.user
DEF_FILE_PATH: ./build/msvc/portaudio.def
jobs:
build:
runs-on: windows-latest
strategy:
matrix:
BUILD_CONFIGURATION: [Release]
BUILD_PLATFORM: [Win32, x64]
steps:
- name: Add MSBuild to PATH
uses: microsoft/setup-msbuild@v1
- uses: actions/checkout@v2
- name: Upgrade VC Project File
# We maintain our vcproj file in an old format to maintain backwards compatibility
# This step upgrades the project to the latest version of MSVC
# see https://docs.microsoft.com/en-us/visualstudio/ide/reference/upgrade-devenv-exe?view=vs-2019
# pipe to file to ensure that it terminates https://stackoverflow.com/questions/48896010/occasionally-occurring-msbuild-error-msb3428/48918105#48918105
# discussion of using vswhere.exe here: https://stackoverflow.com/questions/65287456/how-to-upgrade-a-visual-studio-project-from-within-a-github-action/65311868#65311868
run: |
$devenv = & vswhere.exe '-property' productPath
Write-Output "$devenv"
& $devenv "${{env.VCPROJ_FILE_PATH}}" /Upgrade /NoSplash | Out-Null
Write-Output "devenv launched"
while (!(Test-Path "${{env.VCXPROJ_FILE_PATH}}")) { Start-Sleep -Seconds 10 }
Write-Output "vcxproj found"
while (!(Test-Path "${{env.VCXPROJ_FILTERS_FILE_PATH}}")) { Start-Sleep -Seconds 10 }
Write-Output "vcxproj.filters found"
Start-Sleep -Seconds 10
Write-Output "done."
- name: Remove ASIO Files and Enable PA_USE_DS=1
# Process the project files to remove ASIO-related sources and includes (since we can not access the ASIO SDK in a public build)
run: |
# Process .vcxproj file: remove source files
$xdoc = new-object System.Xml.XmlDocument
$vcxprojFile = resolve-path("${{env.VCXPROJ_FILE_PATH}}")
$xdoc.load($vcxprojFile)
$namespace = New-Object -TypeName "Xml.XmlNamespaceManager" -ArgumentList $xdoc.NameTable
$namespace.AddNamespace("vs", $xdoc.DocumentElement.NamespaceURI)
$nodes = $xdoc.SelectNodes("//vs:ClCompile[contains(@Include, '..\src\hostapi\asio')]", $namespace)
Write-Output "deleting ASIO related compilation nodes from .vcxproj:"
Write-Output $nodes
ForEach($node in $nodes) {
$parent = $node.ParentNode
$parent.RemoveChild($node)
}
# Enable DirectSound host API
$nodes = $xdoc.SelectNodes("//vs:PreprocessorDefinitions[contains(., 'PA_USE_DS=0')]", $namespace)
ForEach($node in $nodes) {
$text = $node.InnerText
$node.InnerText = $text -replace 'PA_USE_DS=0', 'PA_USE_DS=1'
}
$xdoc.save($vcxprojFile)
# Process .vcxproj.filters file: remove source files and includes
$vcxprojFiltersFile = resolve-path("${{env.VCXPROJ_FILTERS_FILE_PATH}}")
$xdoc.load($vcxprojFiltersFile)
$namespace = New-Object -TypeName "Xml.XmlNamespaceManager" -ArgumentList $xdoc.NameTable
$namespace.AddNamespace("vs", $xdoc.DocumentElement.NamespaceURI)
$nodes = $xdoc.SelectNodes("//vs:ClCompile[contains(@Include, '..\src\hostapi\asio')]", $namespace)
Write-Output "deleting ASIO related compilation nodes from .vcxproj.filters:"
Write-Output $nodes
ForEach($node in $nodes) {
$parent = $node.ParentNode
$parent.RemoveChild($node)
}
$nodes = $xdoc.SelectNodes("//vs:ClInclude[contains(@Include, 'pa_asio.h')]", $namespace)
Write-Output "deleting ASIO related include nodes from .vcxproj.filters:"
Write-Output $nodes
ForEach($node in $nodes) {
$parent = $node.ParentNode
$parent.RemoveChild($node)
}
$xdoc.save($vcxprojFiltersFile)
# Process .def file: remove PaAsio_ symbols
Set-Content -Path "${{env.DEF_FILE_PATH}}" -Value (Get-Content -Path "${{env.DEF_FILE_PATH}}" | Select-String -Pattern 'PaAsio_' -NotMatch)
- name: Build
working-directory: ${{env.GITHUB_WORKSPACE}}
# Add additional options to the MSBuild command line here (like platform or verbosity level).
# See https://docs.microsoft.com/visualstudio/msbuild/msbuild-command-line-reference
run: msbuild /m /p:Configuration=${{matrix.BUILD_CONFIGURATION}} /p:Platform=${{matrix.BUILD_PLATFORM}} ${{env.VCXPROJ_FILE_PATH}}

20
.github/workflows/autotools.yml vendored Normal file
View file

@ -0,0 +1,20 @@
name: autotools build
on:
push:
branches: [ master ]
pull_request:
branches: [ master ]
jobs:
build-autotools:
runs-on: ubuntu-latest
name: Ubuntu
steps:
- uses: actions/checkout@v2
- name: configure
run: ./configure
- name: make
run: make

56
.github/workflows/cmake.yml vendored Normal file
View file

@ -0,0 +1,56 @@
name: CMake build
on:
push:
branches: [ master ]
pull_request:
branches: [ master ]
jobs:
build:
strategy:
fail-fast: false
matrix:
include:
- name: Ubuntu
os: ubuntu-latest
install_dir: ~/portaudio
- name: Ubuntu mingw64
os: ubuntu-latest
install_dir: ~/portaudio
dependencies_extras: mingw-w64
cmake_extras: -DCMAKE_TOOLCHAIN_FILE=i686-w64-mingw32.cmake
- name: Windows
os: windows-latest
install_dir: C:\portaudio
- name: macOS
os: macOS-latest
install_dir: ~/portaudio
runs-on: ${{ matrix.os }}
name: ${{ matrix.name }}
env:
cmake_build_type: RelWithDebInfo
steps:
- name: checkout Git repository
uses: actions/checkout@v2
- name: "[Ubuntu] install dependencies"
run: sudo apt-get install libasound2-dev libjack-dev ${{ matrix.dependencies_extras }}
if: matrix.os == 'ubuntu-latest'
- name: configure
run: cmake ${{ matrix.cmake_extras }}
-DCMAKE_INSTALL_PREFIX=${{ matrix.install_dir }}
-DCMAKE_BUILD_TYPE=${{ env.cmake_build_type }}
-DPA_BUILD_TESTS=ON
-DPA_BUILD_EXAMPLES=ON
-S .
-B build
- name: build
run: cmake --build build --config ${{ env.cmake_build_type }} --parallel 2
- name: install
run: cmake --install build --config ${{ env.cmake_build_type }}
- name: "Upload GitHub Actions artifacts"
uses: actions/upload-artifact@v2
with:
name: ${{ matrix.name }} PortAudio build
path: ${{ matrix.install_dir }}

10
.gitignore vendored
View file

@ -17,6 +17,7 @@ lib-stamp
lib/*
libtool
portaudio-2.0.pc
autom4te.cache/*
# Precompiled Headers
*.gch
@ -40,3 +41,12 @@ portaudio-2.0.pc
*.exe
*.out
*.app
# Visual Studio 2017/2019 state folder
.vs/
# Visual Studio CMake build output folder
out/
# Visual Studio CMake settings file
CMakeSettings.json

View file

@ -4,7 +4,7 @@
# http://www.portaudio.com/trac/wiki/TutorialDir/Compile/CMake
#
CMAKE_MINIMUM_REQUIRED(VERSION 2.8)
CMAKE_MINIMUM_REQUIRED(VERSION 3.0.0)
# Check if the user is building PortAudio stand-alone or as part of a larger
# project. If this is part of a larger project (i.e. the CMakeLists.txt has
@ -126,6 +126,7 @@ IF(WIN32)
src/os/win/pa_win_wdmks_utils.c
src/os/win/pa_win_coinitialize.c)
SET(PA_PLATFORM_INCLUDES
src/os/win/pa_win_util.h
src/os/win/pa_win_coinitialize.h
src/os/win/pa_win_wdmks_utils.h)
@ -264,11 +265,12 @@ ELSE()
FIND_LIBRARY(COREAUDIO_LIBRARY CoreAudio REQUIRED)
FIND_LIBRARY(AUDIOTOOLBOX_LIBRARY AudioToolbox REQUIRED)
FIND_LIBRARY(AUDIOUNIT_LIBRARY AudioUnit REQUIRED)
FIND_LIBRARY(CARBON_LIBRARY Carbon REQUIRED)
MARK_AS_ADVANCED(COREAUDIO_LIBRARY AUDIOTOOLBOX_LIBRARY AUDIOUNIT_LIBRARY CARBON_LIBRARY)
SET(PA_LIBRARY_DEPENDENCIES ${PA_LIBRARY_DEPENDENCIES} ${COREAUDIO_LIBRARY} ${AUDIOTOOLBOX_LIBRARY} ${AUDIOUNIT_LIBRARY} ${CARBON_LIBRARY})
FIND_LIBRARY(COREFOUNDATION_LIBRARY CoreFoundation REQUIRED)
FIND_LIBRARY(CORESERVICES_LIBRARY CoreServices REQUIRED)
MARK_AS_ADVANCED(COREAUDIO_LIBRARY AUDIOTOOLBOX_LIBRARY AUDIOUNIT_LIBRARY COREFOUNDATION_LIBRARY CORESERVICES_LIBRARY)
SET(PA_LIBRARY_DEPENDENCIES ${PA_LIBRARY_DEPENDENCIES} ${COREAUDIO_LIBRARY} ${AUDIOTOOLBOX_LIBRARY} ${AUDIOUNIT_LIBRARY} ${COREFOUNDATION_LIBRARY} ${CORESERVICES_LIBRARY})
SET(PA_PRIVATE_COMPILE_DEFINITIONS ${PA_PRIVATE_COMPILE_DEFINITIONS} PA_USE_COREAUDIO)
SET(PA_PKGCONFIG_LDFLAGS "${PA_PKGCONFIG_LDFLAGS} -framework CoreAudio -framework AudioToolbox -framework AudioUnit -framework Carbon")
SET(PA_PKGCONFIG_LDFLAGS "${PA_PKGCONFIG_LDFLAGS} -framework CoreAudio -framework AudioToolbox -framework AudioUnit -framework CoreFoundation -framework CoreServices")
ENDIF()
ELSEIF(UNIX)
@ -293,6 +295,7 @@ ELSE()
FIND_PACKAGE(ALSA)
IF(ALSA_FOUND)
OPTION(PA_USE_ALSA "Enable support for ALSA" ON)
OPTION(PA_ALSA_DYNAMIC "Enable loading ALSA through dlopen" OFF)
ELSE()
OPTION(PA_USE_ALSA "Enable support for ALSA" OFF)
ENDIF()
@ -303,8 +306,14 @@ ELSE()
SET(PA_PUBLIC_INCLUDES ${PA_PUBLIC_INCLUDES} include/pa_linux_alsa.h)
SET(PA_SOURCES ${PA_SOURCES} ${PA_ALSA_SOURCES})
SET(PA_PRIVATE_COMPILE_DEFINITIONS ${PA_PRIVATE_COMPILE_DEFINITIONS} PA_USE_ALSA)
SET(PA_LIBRARY_DEPENDENCIES ${PA_LIBRARY_DEPENDENCIES} ${ALSA_LIBRARIES})
SET(PA_PKGCONFIG_LDFLAGS "${PA_PKGCONFIG_LDFLAGS} -lasound")
IF(PA_ALSA_DYNAMIC)
SET(PA_PRIVATE_COMPILE_DEFINITIONS ${PA_PRIVATE_COMPILE_DEFINITIONS} PA_ALSA_DYNAMIC)
SET(PA_LIBRARY_DEPENDENCIES ${PA_LIBRARY_DEPENDENCIES} ${CMAKE_DL_LIBS})
SET(PA_PKGCONFIG_LDFLAGS "${PA_PKGCONFIG_LDFLAGS} -l${CMAKE_DL_LIBS}")
ELSE()
SET(PA_LIBRARY_DEPENDENCIES ${PA_LIBRARY_DEPENDENCIES} ${ALSA_LIBRARIES})
SET(PA_PKGCONFIG_LDFLAGS "${PA_PKGCONFIG_LDFLAGS} -lasound")
ENDIF()
ENDIF()
ENDIF()
@ -365,7 +374,7 @@ IF(PA_BUILD_SHARED)
ADD_LIBRARY(portaudio SHARED ${PA_INCLUDES} ${PA_COMMON_INCLUDES} ${PA_SOURCES} ${PA_NON_UNICODE_SOURCES} ${PA_EXTRA_SHARED_SOURCES})
SET_PROPERTY(TARGET portaudio APPEND_STRING PROPERTY COMPILE_DEFINITIONS ${PA_PRIVATE_COMPILE_DEFINITIONS})
TARGET_INCLUDE_DIRECTORIES(portaudio PRIVATE ${PA_PRIVATE_INCLUDE_PATHS})
TARGET_INCLUDE_DIRECTORIES(portaudio PUBLIC "$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>")
TARGET_INCLUDE_DIRECTORIES(portaudio PUBLIC "$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>" "$<INSTALL_INTERFACE:include>")
TARGET_LINK_LIBRARIES(portaudio ${PA_LIBRARY_DEPENDENCIES})
ENDIF()
@ -374,7 +383,7 @@ IF(PA_BUILD_STATIC)
ADD_LIBRARY(portaudio_static STATIC ${PA_INCLUDES} ${PA_COMMON_INCLUDES} ${PA_SOURCES} ${PA_NON_UNICODE_SOURCES})
SET_PROPERTY(TARGET portaudio_static APPEND_STRING PROPERTY COMPILE_DEFINITIONS ${PA_PRIVATE_COMPILE_DEFINITIONS})
TARGET_INCLUDE_DIRECTORIES(portaudio_static PRIVATE ${PA_PRIVATE_INCLUDE_PATHS})
TARGET_INCLUDE_DIRECTORIES(portaudio_static PUBLIC "$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>")
TARGET_INCLUDE_DIRECTORIES(portaudio_static PUBLIC "$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>" "$<INSTALL_INTERFACE:include>")
TARGET_LINK_LIBRARIES(portaudio_static ${PA_LIBRARY_DEPENDENCIES})
IF(NOT PA_LIBNAME_ADD_SUFFIX)
SET_PROPERTY(TARGET portaudio_static PROPERTY OUTPUT_NAME portaudio)
@ -441,7 +450,7 @@ IF(NOT PA_OUTPUT_OSX_FRAMEWORK AND NOT PA_DISABLE_INSTALL)
VERSION ${PA_VERSION}
COMPATIBILITY SameMajorVersion)
CONFIGURE_FILE(cmake_support/portaudio-2.0.pc.in ${CMAKE_CURRENT_BINARY_DIR}/portaudio-2.0.pc @ONLY)
INSTALL(FILES README.txt DESTINATION share/doc/portaudio)
INSTALL(FILES README.md DESTINATION share/doc/portaudio)
INSTALL(FILES LICENSE.txt DESTINATION share/doc/portaudio)
INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/portaudio-2.0.pc DESTINATION lib/pkgconfig)
INSTALL(FILES ${PA_PUBLIC_INCLUDES} DESTINATION include)
@ -469,7 +478,18 @@ ENDIF()
# Prepared for inclusion of test files
OPTION(PA_BUILD_TESTS "Include test projects" OFF)
IF(PA_BUILD_TESTS)
MACRO(ADD_TEST appl_name)
ADD_EXECUTABLE(${appl_name} "${appl_name}.c")
TARGET_LINK_LIBRARIES(${appl_name} portaudio_static)
TARGET_INCLUDE_DIRECTORIES(${appl_name} PRIVATE "${CMAKE_SOURCE_DIR}/src/common")
SET_TARGET_PROPERTIES(${appl_name}
PROPERTIES
FOLDER "Test"
)
ENDMACRO(ADD_TEST)
SUBDIRS(test)
SUBDIRS(qa)
ENDIF()
# Prepared for inclusion of test files

View file

@ -44,7 +44,7 @@ PALIB = libportaudio.la
PAINC = include/portaudio.h
PA_LDFLAGS = $(LDFLAGS) $(SHARED_FLAGS) -rpath $(libdir) -no-undefined \
-export-symbols-regex "(Pa|PaMacCore|PaJack|PaAlsa|PaAsio|PaOSS)_.*" \
-export-symbols-regex "(Pa|PaMacCore|PaJack|PaAlsa|PaAsio|PaOSS|PaWasapi|PaWasapiWinrt)_.*" \
-version-info $(LT_CURRENT):$(LT_REVISION):$(LT_AGE)
COMMON_OBJS = \
@ -146,6 +146,7 @@ SRC_DIRS = \
src/hostapi/dsound \
src/hostapi/jack \
src/hostapi/oss \
src/hostapi/skeleton \
src/hostapi/wasapi \
src/hostapi/wdmks \
src/hostapi/wmme \
@ -220,16 +221,16 @@ clean:
distclean: clean
$(RM) config.log config.status Makefile libtool portaudio-2.0.pc
%.o: %.c $(MAKEFILE) $(PAINC)
%.o: %.c $(MAKEFILE) $(PAINC) lib-stamp
$(CC) -c $(CFLAGS) $< -o $@
%.lo: %.c $(MAKEFILE) $(PAINC)
%.lo: %.c $(MAKEFILE) $(PAINC) lib-stamp
$(LIBTOOL) --mode=compile $(CC) -c $(CFLAGS) $< -o $@
%.lo: %.cpp $(MAKEFILE) $(PAINC)
%.lo: %.cpp $(MAKEFILE) $(PAINC) lib-stamp
$(LIBTOOL) --mode=compile --tag=CXX $(CXX) -c $(CXXFLAGS) $< -o $@
%.o: %.cpp $(MAKEFILE) $(PAINC)
%.o: %.cpp $(MAKEFILE) $(PAINC) lib-stamp
$(CXX) -c $(CXXFLAGS) $< -o $@
%.o: %.asm

103
README.md Normal file
View file

@ -0,0 +1,103 @@
# PortAudio - portable audio I/O library
This is a fork of PortAudio that adds `Pa_RefreshDevice` functionality (see commit `1f01a3ddc05df7ee3bb3cad5ef960d335aff018b`), which allows runtime detection of audio device changes without restarting your application.
PortAudio is a portable audio I/O library designed for cross-platform
support of audio. It uses either a callback mechanism to request audio
processing, or blocking read/write calls to buffer data between the
native audio subsystem and the client. Audio can be processed in various
formats, including 32 bit floating point, and will be converted to the
native format internally.
## Documentation:
* Documentation is available at http://www.portaudio.com/docs/
* Or at `/doc/html/index.html` after running Doxygen.
* Also see `src/common/portaudio.h` for the API spec.
* And see the `examples/` and `test/` directories for many examples of usage. (We suggest `examples/paex_saw.c` for an example.)
For information on compiling programs with PortAudio, please see the
tutorial at:
http://portaudio.com/docs/v19-doxydocs/tutorial_start.html
We have an active mailing list for user and developer discussions.
Please feel free to join. See http://www.portaudio.com for details.
## Important Files and Folders:
include/portaudio.h = header file for PortAudio API. Specifies API.
src/common/ = platform independent code, host independent
code for all implementations.
src/os = os specific (but host api neutral) code
src/hostapi = implementations for different host apis
### Host API Implementations:
src/hostapi/alsa = Advanced Linux Sound Architecture (ALSA)
src/hostapi/asihpi = AudioScience HPI
src/hostapi/asio = ASIO for Windows and Macintosh
src/hostapi/coreaudio = Macintosh Core Audio for OS X
src/hostapi/dsound = Windows Direct Sound
src/hostapi/jack = JACK Audio Connection Kit
src/hostapi/oss = Unix Open Sound System (OSS)
src/hostapi/wasapi = Windows Vista WASAPI
src/hostapi/wdmks = Windows WDM Kernel Streaming
src/hostapi/wmme = Windows MultiMedia Extensions (MME)
### Test Programs:
test/pa_fuzz.c = guitar fuzz box
test/pa_devs.c = print a list of available devices
test/pa_minlat.c = determine minimum latency for your machine
test/paqa_devs.c = self test that opens all devices
test/paqa_errs.c = test error detection and reporting
test/patest_clip.c = hear a sine wave clipped and unclipped
test/patest_dither.c = hear effects of dithering (extremely subtle)
test/patest_pink.c = fun with pink noise
test/patest_record.c = record and playback some audio
test/patest_maxsines.c = how many sine waves can we play? Tests Pa_GetCPULoad().
test/patest_sine.c = output a sine wave in a simple PA app
test/patest_sync.c = test synchronization of audio and video
test/patest_wire.c = pass input to output, wire simulator
## Using with Node.js
This fork can be used with the [nodeaudio](https://andrewgundersen.net/repos/nodeaudio) Node.js bindings, which provide native audio I/O capabilities to JavaScript/TypeScript applications.
### Building PortAudio
Build portaudio:
./configure and make
At the time of writing (MacOS 12.1) I initially received build errors (-WError) about unused variables, so I had to remove -WError flag from the build rules.
Anytime the build configuration changes, make sure to run (see PortAudio docs):
autoreconf -if
Use find command in usr/local/lib to see install state:
find /usr/local/lib -name "libport*" -maxdepth 1
The default build of PortAudio sets an absolute install path (usr/local/lib) which causes issues if you want to package the .dylib in a project. To fix this, use install_name_tool to rename the binary using a relative @loader_path:
install_name_tool -id "@loader_path/libportaudio.dylib" libportaudio.dylib
Ideally, this would be set in the build config settings of PortAudio, but I haven't figured out how to do that yet.
### Using with nodeaudio
The [nodeaudio](https://andrewgundersen.net/repos/nodeaudio) bindings wrap this PortAudio fork to expose audio I/O capabilities to Node.js applications. Clone and build the nodeaudio project to get started:
git clone https://andrewgundersen.net/repos/nodeaudio
cd nodeaudio
node-gyp rebuild
This will link against the PortAudio library you've built, allowing you to use audio functionality from JavaScript.
TODO: Sign on build
Of course, any binary (e.g. libportaudio.dylib) must be signed before distribution.

View file

@ -1,98 +0,0 @@
README for PortAudio
/*
* PortAudio Portable Real-Time Audio Library
* Latest Version at: http://www.portaudio.com
*
* Copyright (c) 1999-2008 Phil Burk 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.
*/
PortAudio is a portable audio I/O library designed for cross-platform
support of audio. It uses either a callback mechanism to request audio
processing, or blocking read/write calls to buffer data between the
native audio subsystem and the client. Audio can be processed in various
formats, including 32 bit floating point, and will be converted to the
native format internally.
Documentation:
Documentation is available in "/doc/html/index.html"
Also see "src/common/portaudio.h" for API spec.
Also see http://www.portaudio.com/docs/
And see the "test/" directory for many examples of usage
(we suggest "test/patest_saw.c" for an example)
For information on compiling programs with PortAudio, please see the
tutorial at:
http://portaudio.com/trac/wiki/TutorialDir/TutorialStart
We have an active mailing list for user and developer discussions.
Please feel free to join. See http://www.portaudio.com for details.
Important Files and Folders:
include/portaudio.h = header file for PortAudio API. Specifies API.
src/common/ = platform independant code, host independant
code for all implementations.
src/os = os specific (but host api neutral) code
src/hostapi = implementations for different host apis
Host API Implementations:
src/hostapi/alsa = Advanced Linux Sound Architecture (ALSA)
src/hostapi/asihpi = AudioScience HPI
src/hostapi/asio = ASIO for Windows and Macintosh
src/hostapi/coreaudio = Macintosh Core Audio for OS X
src/hostapi/dsound = Windows Direct Sound
src/hostapi/jack = JACK Audio Connection Kit
src/hostapi/oss = Unix Open Sound System (OSS)
src/hostapi/wasapi = Windows Vista WASAPI
src/hostapi/wdmks = Windows WDM Kernel Streaming
src/hostapi/wmme = Windows MultiMedia Extensions (MME)
Test Programs:
test/pa_fuzz.c = guitar fuzz box
test/pa_devs.c = print a list of available devices
test/pa_minlat.c = determine minimum latency for your machine
test/paqa_devs.c = self test that opens all devices
test/paqa_errs.c = test error detection and reporting
test/patest_clip.c = hear a sine wave clipped and unclipped
test/patest_dither.c = hear effects of dithering (extremely subtle)
test/patest_pink.c = fun with pink noise
test/patest_record.c = record and playback some audio
test/patest_maxsines.c = how many sine waves can we play? Tests Pa_GetCPULoad().
test/patest_sine.c = output a sine wave in a simple PA app
test/patest_sync.c = test syncronization of audio and video
test/patest_wire.c = pass input to output, wire simulator

2942
aclocal.m4 vendored

File diff suppressed because it is too large Load diff

View file

@ -12,7 +12,7 @@ PortAudioCpp v19 revision 15 (unknown release date):
mblaauw:
- Changed some exception handling code in HostApi's constructor.
- Added accessors to PortAudio PaStream from PortAudioCpp Stream (their absense being pointed out
- Added accessors to PortAudio PaStream from PortAudioCpp Stream (their absence being pointed out
by Tom Jordan).
- Fixed a bug/typo in MemFunToCallbackInterfaceAdapter::init() thanks to Fredrik Viklund.
- Fixed issue with concrete Stream classes possibly throwing an exception and fixed documentation w.r.t. this.
@ -37,14 +37,14 @@ PortAudioCpp v19 revision 13 03/10/19:
the std::exception base class's what() member function (which had throw(), i.e. no-throw guarantee).
- Changed the iterators so that they have a set of public typedefs instead of deriving the C++ standard
library std::iterator<> struct. G++ 2.95 doesn't support std::exception<> and composition-by-aggregation
is prefered over composition-by-inheritance in this case.
is preferred over composition-by-inheritance in this case.
- Changed some minor things to avoid G++ warning messages.
mblaauw:
- Renamed this file (/WHATSNEW.txt) to /CHANGELOG.
- Renamed /PA_ISSUES.txt to /PA_ISSUES.
- Added /INSTALL file with some build info for GNU/Linux and VC6.
- Added MSVC 6.0 projects for building PortAudioCpp as a staticly or dynamically linkable library.
- Added MSVC 6.0 projects for building PortAudioCpp as a statically or dynamically linkable library.
- Moved build files to /build/(gnu/ or vc6/).
- Moved Doxygen configuration files to /doc/ and output to /doc/api_reference/.
- Added a /doc/README with some info how to generate Doxygen documentation.
@ -82,7 +82,7 @@ PortAudioCpp v19 revision 09 03/06/25:
mblaauw:
- Changed some things in SingleDirectionStreamParameters to ease it's usage.
- Placed all SingleDirectionStreamParameters stuff into a separate file.
+ Totally redid the callback stuff, now it's less ackward and supports C++ functions.
+ Totally redid the callback stuff, now it's less awkward and supports C++ functions.
PortAudioCpp v19 revision 08 03/06/20:

View file

@ -1,8 +1,8 @@
Installation Instructions
*************************
Copyright (C) 1994-1996, 1999-2002, 2004-2013 Free Software Foundation,
Inc.
Copyright (C) 1994-1996, 1999-2002, 2004-2017, 2020-2021 Free
Software Foundation, Inc.
Copying and distribution of this file, with or without modification,
are permitted in any medium without royalty provided the copyright
@ -12,97 +12,96 @@ without warranty of any kind.
Basic Installation
==================
Briefly, the shell command `./configure && make && make install'
Briefly, the shell command './configure && make && make install'
should configure, build, and install this package. The following
more-detailed instructions are generic; see the `README' file for
more-detailed instructions are generic; see the 'README' file for
instructions specific to this package. Some packages provide this
`INSTALL' file but do not implement all of the features documented
'INSTALL' file but do not implement all of the features documented
below. The lack of an optional feature in a given package is not
necessarily a bug. More recommendations for GNU packages can be found
in *note Makefile Conventions: (standards)Makefile Conventions.
The `configure' shell script attempts to guess correct values for
The 'configure' shell script attempts to guess correct values for
various system-dependent variables used during compilation. It uses
those values to create a `Makefile' in each directory of the package.
It may also create one or more `.h' files containing system-dependent
definitions. Finally, it creates a shell script `config.status' that
those values to create a 'Makefile' in each directory of the package.
It may also create one or more '.h' files containing system-dependent
definitions. Finally, it creates a shell script 'config.status' that
you can run in the future to recreate the current configuration, and a
file `config.log' containing compiler output (useful mainly for
debugging `configure').
file 'config.log' containing compiler output (useful mainly for
debugging 'configure').
It can also use an optional file (typically called `config.cache'
and enabled with `--cache-file=config.cache' or simply `-C') that saves
the results of its tests to speed up reconfiguring. Caching is
disabled by default to prevent problems with accidental use of stale
cache files.
It can also use an optional file (typically called 'config.cache' and
enabled with '--cache-file=config.cache' or simply '-C') that saves the
results of its tests to speed up reconfiguring. Caching is disabled by
default to prevent problems with accidental use of stale cache files.
If you need to do unusual things to compile the package, please try
to figure out how `configure' could check whether to do them, and mail
diffs or instructions to the address given in the `README' so they can
to figure out how 'configure' could check whether to do them, and mail
diffs or instructions to the address given in the 'README' so they can
be considered for the next release. If you are using the cache, and at
some point `config.cache' contains results you don't want to keep, you
some point 'config.cache' contains results you don't want to keep, you
may remove or edit it.
The file `configure.ac' (or `configure.in') is used to create
`configure' by a program called `autoconf'. You need `configure.ac' if
you want to change it or regenerate `configure' using a newer version
of `autoconf'.
The file 'configure.ac' (or 'configure.in') is used to create
'configure' by a program called 'autoconf'. You need 'configure.ac' if
you want to change it or regenerate 'configure' using a newer version of
'autoconf'.
The simplest way to compile this package is:
1. `cd' to the directory containing the package's source code and type
`./configure' to configure the package for your system.
1. 'cd' to the directory containing the package's source code and type
'./configure' to configure the package for your system.
Running `configure' might take a while. While running, it prints
Running 'configure' might take a while. While running, it prints
some messages telling which features it is checking for.
2. Type `make' to compile the package.
2. Type 'make' to compile the package.
3. Optionally, type `make check' to run any self-tests that come with
3. Optionally, type 'make check' to run any self-tests that come with
the package, generally using the just-built uninstalled binaries.
4. Type `make install' to install the programs and any data files and
4. Type 'make install' to install the programs and any data files and
documentation. When installing into a prefix owned by root, it is
recommended that the package be configured and built as a regular
user, and only the `make install' phase executed with root
user, and only the 'make install' phase executed with root
privileges.
5. Optionally, type `make installcheck' to repeat any self-tests, but
5. Optionally, type 'make installcheck' to repeat any self-tests, but
this time using the binaries in their final installed location.
This target does not install anything. Running this target as a
regular user, particularly if the prior `make install' required
regular user, particularly if the prior 'make install' required
root privileges, verifies that the installation completed
correctly.
6. You can remove the program binaries and object files from the
source code directory by typing `make clean'. To also remove the
files that `configure' created (so you can compile the package for
a different kind of computer), type `make distclean'. There is
also a `make maintainer-clean' target, but that is intended mainly
source code directory by typing 'make clean'. To also remove the
files that 'configure' created (so you can compile the package for
a different kind of computer), type 'make distclean'. There is
also a 'make maintainer-clean' target, but that is intended mainly
for the package's developers. If you use it, you may have to get
all sorts of other programs in order to regenerate files that came
with the distribution.
7. Often, you can also type `make uninstall' to remove the installed
7. Often, you can also type 'make uninstall' to remove the installed
files again. In practice, not all packages have tested that
uninstallation works correctly, even though it is required by the
GNU Coding Standards.
8. Some packages, particularly those that use Automake, provide `make
8. Some packages, particularly those that use Automake, provide 'make
distcheck', which can by used by developers to test that all other
targets like `make install' and `make uninstall' work correctly.
targets like 'make install' and 'make uninstall' work correctly.
This target is generally not run by end users.
Compilers and Options
=====================
Some systems require unusual options for compilation or linking that
the `configure' script does not know about. Run `./configure --help'
the 'configure' script does not know about. Run './configure --help'
for details on some of the pertinent environment variables.
You can give `configure' initial values for configuration parameters
by setting variables in the command line or in the environment. Here
is an example:
You can give 'configure' initial values for configuration parameters
by setting variables in the command line or in the environment. Here is
an example:
./configure CC=c99 CFLAGS=-g LIBS=-lposix
@ -113,21 +112,21 @@ Compiling For Multiple Architectures
You can compile the package for more than one kind of computer at the
same time, by placing the object files for each architecture in their
own directory. To do this, you can use GNU `make'. `cd' to the
own directory. To do this, you can use GNU 'make'. 'cd' to the
directory where you want the object files and executables to go and run
the `configure' script. `configure' automatically checks for the
source code in the directory that `configure' is in and in `..'. This
is known as a "VPATH" build.
the 'configure' script. 'configure' automatically checks for the source
code in the directory that 'configure' is in and in '..'. This is known
as a "VPATH" build.
With a non-GNU `make', it is safer to compile the package for one
With a non-GNU 'make', it is safer to compile the package for one
architecture at a time in the source code directory. After you have
installed the package for one architecture, use `make distclean' before
installed the package for one architecture, use 'make distclean' before
reconfiguring for another architecture.
On MacOS X 10.5 and later systems, you can create libraries and
executables that work on multiple system types--known as "fat" or
"universal" binaries--by specifying multiple `-arch' options to the
compiler but only a single `-arch' option to the preprocessor. Like
"universal" binaries--by specifying multiple '-arch' options to the
compiler but only a single '-arch' option to the preprocessor. Like
this:
./configure CC="gcc -arch i386 -arch x86_64 -arch ppc -arch ppc64" \
@ -136,105 +135,104 @@ this:
This is not guaranteed to produce working output in all cases, you
may have to build one architecture at a time and combine the results
using the `lipo' tool if you have problems.
using the 'lipo' tool if you have problems.
Installation Names
==================
By default, `make install' installs the package's commands under
`/usr/local/bin', include files under `/usr/local/include', etc. You
can specify an installation prefix other than `/usr/local' by giving
`configure' the option `--prefix=PREFIX', where PREFIX must be an
By default, 'make install' installs the package's commands under
'/usr/local/bin', include files under '/usr/local/include', etc. You
can specify an installation prefix other than '/usr/local' by giving
'configure' the option '--prefix=PREFIX', where PREFIX must be an
absolute file name.
You can specify separate installation prefixes for
architecture-specific files and architecture-independent files. If you
pass the option `--exec-prefix=PREFIX' to `configure', the package uses
pass the option '--exec-prefix=PREFIX' to 'configure', the package uses
PREFIX as the prefix for installing programs and libraries.
Documentation and other data files still use the regular prefix.
In addition, if you use an unusual directory layout you can give
options like `--bindir=DIR' to specify different values for particular
kinds of files. Run `configure --help' for a list of the directories
you can set and what kinds of files go in them. In general, the
default for these options is expressed in terms of `${prefix}', so that
specifying just `--prefix' will affect all of the other directory
options like '--bindir=DIR' to specify different values for particular
kinds of files. Run 'configure --help' for a list of the directories
you can set and what kinds of files go in them. In general, the default
for these options is expressed in terms of '${prefix}', so that
specifying just '--prefix' will affect all of the other directory
specifications that were not explicitly provided.
The most portable way to affect installation locations is to pass the
correct locations to `configure'; however, many packages provide one or
correct locations to 'configure'; however, many packages provide one or
both of the following shortcuts of passing variable assignments to the
`make install' command line to change installation locations without
'make install' command line to change installation locations without
having to reconfigure or recompile.
The first method involves providing an override variable for each
affected directory. For example, `make install
affected directory. For example, 'make install
prefix=/alternate/directory' will choose an alternate location for all
directory configuration variables that were expressed in terms of
`${prefix}'. Any directories that were specified during `configure',
but not in terms of `${prefix}', must each be overridden at install
time for the entire installation to be relocated. The approach of
makefile variable overrides for each directory variable is required by
the GNU Coding Standards, and ideally causes no recompilation.
However, some platforms have known limitations with the semantics of
shared libraries that end up requiring recompilation when using this
method, particularly noticeable in packages that use GNU Libtool.
'${prefix}'. Any directories that were specified during 'configure',
but not in terms of '${prefix}', must each be overridden at install time
for the entire installation to be relocated. The approach of makefile
variable overrides for each directory variable is required by the GNU
Coding Standards, and ideally causes no recompilation. However, some
platforms have known limitations with the semantics of shared libraries
that end up requiring recompilation when using this method, particularly
noticeable in packages that use GNU Libtool.
The second method involves providing the `DESTDIR' variable. For
example, `make install DESTDIR=/alternate/directory' will prepend
`/alternate/directory' before all installation names. The approach of
`DESTDIR' overrides is not required by the GNU Coding Standards, and
The second method involves providing the 'DESTDIR' variable. For
example, 'make install DESTDIR=/alternate/directory' will prepend
'/alternate/directory' before all installation names. The approach of
'DESTDIR' overrides is not required by the GNU Coding Standards, and
does not work on platforms that have drive letters. On the other hand,
it does better at avoiding recompilation issues, and works well even
when some directory options were not specified in terms of `${prefix}'
at `configure' time.
when some directory options were not specified in terms of '${prefix}'
at 'configure' time.
Optional Features
=================
If the package supports it, you can cause programs to be installed
with an extra prefix or suffix on their names by giving `configure' the
option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'.
with an extra prefix or suffix on their names by giving 'configure' the
option '--program-prefix=PREFIX' or '--program-suffix=SUFFIX'.
Some packages pay attention to `--enable-FEATURE' options to
`configure', where FEATURE indicates an optional part of the package.
They may also pay attention to `--with-PACKAGE' options, where PACKAGE
is something like `gnu-as' or `x' (for the X Window System). The
`README' should mention any `--enable-' and `--with-' options that the
Some packages pay attention to '--enable-FEATURE' options to
'configure', where FEATURE indicates an optional part of the package.
They may also pay attention to '--with-PACKAGE' options, where PACKAGE
is something like 'gnu-as' or 'x' (for the X Window System). The
'README' should mention any '--enable-' and '--with-' options that the
package recognizes.
For packages that use the X Window System, `configure' can usually
For packages that use the X Window System, 'configure' can usually
find the X include and library files automatically, but if it doesn't,
you can use the `configure' options `--x-includes=DIR' and
`--x-libraries=DIR' to specify their locations.
you can use the 'configure' options '--x-includes=DIR' and
'--x-libraries=DIR' to specify their locations.
Some packages offer the ability to configure how verbose the
execution of `make' will be. For these packages, running `./configure
execution of 'make' will be. For these packages, running './configure
--enable-silent-rules' sets the default to minimal output, which can be
overridden with `make V=1'; while running `./configure
overridden with 'make V=1'; while running './configure
--disable-silent-rules' sets the default to verbose, which can be
overridden with `make V=0'.
overridden with 'make V=0'.
Particular systems
==================
On HP-UX, the default C compiler is not ANSI C compatible. If GNU
CC is not installed, it is recommended to use the following options in
On HP-UX, the default C compiler is not ANSI C compatible. If GNU CC
is not installed, it is recommended to use the following options in
order to use an ANSI C compiler:
./configure CC="cc -Ae -D_XOPEN_SOURCE=500"
and if that doesn't work, install pre-built binaries of GCC for HP-UX.
HP-UX `make' updates targets which have the same time stamps as
their prerequisites, which makes it generally unusable when shipped
generated files such as `configure' are involved. Use GNU `make'
instead.
HP-UX 'make' updates targets which have the same timestamps as their
prerequisites, which makes it generally unusable when shipped generated
files such as 'configure' are involved. Use GNU 'make' instead.
On OSF/1 a.k.a. Tru64, some versions of the default C compiler cannot
parse its `<wchar.h>' header file. The option `-nodtk' can be used as
a workaround. If GNU CC is not installed, it is therefore recommended
to try
parse its '<wchar.h>' header file. The option '-nodtk' can be used as a
workaround. If GNU CC is not installed, it is therefore recommended to
try
./configure CC="cc"
@ -242,26 +240,26 @@ and if that doesn't work, try
./configure CC="cc -nodtk"
On Solaris, don't put `/usr/ucb' early in your `PATH'. This
On Solaris, don't put '/usr/ucb' early in your 'PATH'. This
directory contains several dysfunctional programs; working variants of
these programs are available in `/usr/bin'. So, if you need `/usr/ucb'
in your `PATH', put it _after_ `/usr/bin'.
these programs are available in '/usr/bin'. So, if you need '/usr/ucb'
in your 'PATH', put it _after_ '/usr/bin'.
On Haiku, software installed for all users goes in `/boot/common',
not `/usr/local'. It is recommended to use the following options:
On Haiku, software installed for all users goes in '/boot/common',
not '/usr/local'. It is recommended to use the following options:
./configure --prefix=/boot/common
Specifying the System Type
==========================
There may be some features `configure' cannot figure out
There may be some features 'configure' cannot figure out
automatically, but needs to determine by the type of machine the package
will run on. Usually, assuming the package is built to be run on the
_same_ architectures, `configure' can figure that out, but if it prints
_same_ architectures, 'configure' can figure that out, but if it prints
a message saying it cannot guess the machine type, give it the
`--build=TYPE' option. TYPE can either be a short name for the system
type, such as `sun4', or a canonical name which has the form:
'--build=TYPE' option. TYPE can either be a short name for the system
type, such as 'sun4', or a canonical name which has the form:
CPU-COMPANY-SYSTEM
@ -270,101 +268,101 @@ where SYSTEM can have one of these forms:
OS
KERNEL-OS
See the file `config.sub' for the possible values of each field. If
`config.sub' isn't included in this package, then this package doesn't
See the file 'config.sub' for the possible values of each field. If
'config.sub' isn't included in this package, then this package doesn't
need to know the machine type.
If you are _building_ compiler tools for cross-compiling, you should
use the option `--target=TYPE' to select the type of system they will
use the option '--target=TYPE' to select the type of system they will
produce code for.
If you want to _use_ a cross compiler, that generates code for a
platform different from the build platform, you should specify the
"host" platform (i.e., that on which the generated programs will
eventually be run) with `--host=TYPE'.
eventually be run) with '--host=TYPE'.
Sharing Defaults
================
If you want to set default values for `configure' scripts to share,
you can create a site shell script called `config.site' that gives
default values for variables like `CC', `cache_file', and `prefix'.
`configure' looks for `PREFIX/share/config.site' if it exists, then
`PREFIX/etc/config.site' if it exists. Or, you can set the
`CONFIG_SITE' environment variable to the location of the site script.
A warning: not all `configure' scripts look for a site script.
If you want to set default values for 'configure' scripts to share,
you can create a site shell script called 'config.site' that gives
default values for variables like 'CC', 'cache_file', and 'prefix'.
'configure' looks for 'PREFIX/share/config.site' if it exists, then
'PREFIX/etc/config.site' if it exists. Or, you can set the
'CONFIG_SITE' environment variable to the location of the site script.
A warning: not all 'configure' scripts look for a site script.
Defining Variables
==================
Variables not defined in a site shell script can be set in the
environment passed to `configure'. However, some packages may run
environment passed to 'configure'. However, some packages may run
configure again during the build, and the customized values of these
variables may be lost. In order to avoid this problem, you should set
them in the `configure' command line, using `VAR=value'. For example:
them in the 'configure' command line, using 'VAR=value'. For example:
./configure CC=/usr/local2/bin/gcc
causes the specified `gcc' to be used as the C compiler (unless it is
causes the specified 'gcc' to be used as the C compiler (unless it is
overridden in the site shell script).
Unfortunately, this technique does not work for `CONFIG_SHELL' due to
an Autoconf limitation. Until the limitation is lifted, you can use
this workaround:
Unfortunately, this technique does not work for 'CONFIG_SHELL' due to an
Autoconf limitation. Until the limitation is lifted, you can use this
workaround:
CONFIG_SHELL=/bin/bash ./configure CONFIG_SHELL=/bin/bash
`configure' Invocation
'configure' Invocation
======================
`configure' recognizes the following options to control how it
'configure' recognizes the following options to control how it
operates.
`--help'
`-h'
Print a summary of all of the options to `configure', and exit.
'--help'
'-h'
Print a summary of all of the options to 'configure', and exit.
`--help=short'
`--help=recursive'
'--help=short'
'--help=recursive'
Print a summary of the options unique to this package's
`configure', and exit. The `short' variant lists options used
only in the top level, while the `recursive' variant lists options
also present in any nested packages.
'configure', and exit. The 'short' variant lists options used only
in the top level, while the 'recursive' variant lists options also
present in any nested packages.
`--version'
`-V'
Print the version of Autoconf used to generate the `configure'
'--version'
'-V'
Print the version of Autoconf used to generate the 'configure'
script, and exit.
`--cache-file=FILE'
'--cache-file=FILE'
Enable the cache: use and save the results of the tests in FILE,
traditionally `config.cache'. FILE defaults to `/dev/null' to
traditionally 'config.cache'. FILE defaults to '/dev/null' to
disable caching.
`--config-cache'
`-C'
Alias for `--cache-file=config.cache'.
'--config-cache'
'-C'
Alias for '--cache-file=config.cache'.
`--quiet'
`--silent'
`-q'
'--quiet'
'--silent'
'-q'
Do not print messages saying which checks are being made. To
suppress all normal output, redirect it to `/dev/null' (any error
suppress all normal output, redirect it to '/dev/null' (any error
messages will still be shown).
`--srcdir=DIR'
'--srcdir=DIR'
Look for the package's source code in directory DIR. Usually
`configure' can determine that directory automatically.
'configure' can determine that directory automatically.
`--prefix=DIR'
Use DIR as the installation prefix. *note Installation Names::
for more details, including other options available for fine-tuning
the installation locations.
'--prefix=DIR'
Use DIR as the installation prefix. *note Installation Names:: for
more details, including other options available for fine-tuning the
installation locations.
`--no-create'
`-n'
'--no-create'
'-n'
Run the configure checks, but stop before creating any output
files.
`configure' also accepts some other, not widely useful, options. Run
`configure --help' for more details.
'configure' also accepts some other, not widely useful, options. Run
'configure --help' for more details.

View file

@ -1,7 +1,7 @@
# Makefile.in generated by automake 1.14.1 from Makefile.am.
# Makefile.in generated by automake 1.16.5 from Makefile.am.
# @configure_input@
# Copyright (C) 1994-2013 Free Software Foundation, Inc.
# Copyright (C) 1994-2021 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
@ -15,7 +15,17 @@
@SET_MAKE@
VPATH = @srcdir@
am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)'
am__is_gnu_make = { \
if test -z '$(MAKELEVEL)'; then \
false; \
elif test -n '$(MAKE_HOST)'; then \
true; \
elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
true; \
else \
false; \
fi; \
}
am__make_running_with_option = \
case $${target_option-} in \
?) ;; \
@ -79,17 +89,12 @@ POST_UNINSTALL = :
build_triplet = @build@
host_triplet = @host@
subdir = .
DIST_COMMON = INSTALL NEWS README AUTHORS ChangeLog \
$(srcdir)/Makefile.in $(srcdir)/Makefile.am \
$(top_srcdir)/configure $(am__configure_deps) \
$(srcdir)/portaudiocpp.pc.in COPYING \
$(top_srcdir)/../../compile $(top_srcdir)/../../config.guess \
$(top_srcdir)/../../config.sub $(top_srcdir)/../../install-sh \
$(top_srcdir)/../../ltmain.sh $(top_srcdir)/../../missing
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
DIST_COMMON = $(srcdir)/Makefile.am $(top_srcdir)/configure \
$(am__configure_deps) $(am__DIST_COMMON)
am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \
configure.lineno config.status.lineno
mkinstalldirs = $(install_sh) -d
@ -158,7 +163,7 @@ am__recursive_targets = \
$(RECURSIVE_CLEAN_TARGETS) \
$(am__extra_recursive_targets)
AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \
cscope distdir dist dist-all distcheck
cscope distdir distdir-am dist dist-all distcheck
am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
# Read a list of newline-separated strings from the standard input,
# and print each of them once, without duplicates. Input order is
@ -176,10 +181,10 @@ am__define_uniq_tagged_files = \
unique=`for i in $$list; do \
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
done | $(am__uniquify_input)`
ETAGS = etags
CTAGS = ctags
CSCOPE = cscope
DIST_SUBDIRS = $(SUBDIRS)
am__DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/portaudiocpp.pc.in \
AUTHORS COPYING ChangeLog INSTALL NEWS README compile \
config.guess config.sub install-sh ltmain.sh missing
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
distdir = $(PACKAGE)-$(VERSION)
top_distdir = $(distdir)
@ -218,6 +223,8 @@ am__relativize = \
DIST_ARCHIVES = $(distdir).tar.gz
GZIP_ENV = --best
DIST_TARGETS = dist-gzip
# Exists only to be overridden by the user if desired.
AM_DISTCHECK_DVI_TARGET = dvi
distuninstallcheck_listfiles = find . -type f -print
am__distuninstallcheck_listfiles = $(distuninstallcheck_listfiles) \
| sed 's|^\./|$(prefix)/|' | grep -v '$(infodir)/dir$$'
@ -234,8 +241,9 @@ AWK = @AWK@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
CPP = @CPP@
CPPFLAGS = @CPPFLAGS@
CSCOPE = @CSCOPE@
CTAGS = @CTAGS@
CXX = @CXX@
CXXCPP = @CXXCPP@
CXXDEPMODE = @CXXDEPMODE@
@ -251,6 +259,7 @@ ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
EGREP = @EGREP@
ETAGS = @ETAGS@
EXEEXT = @EXEEXT@
FGREP = @FGREP@
GREP = @GREP@
@ -267,6 +276,7 @@ LIBTOOL = @LIBTOOL@
LIPO = @LIPO@
LN_S = @LN_S@
LTLIBOBJS = @LTLIBOBJS@
LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
LT_VERSION_INFO = @LT_VERSION_INFO@
MAINT = @MAINT@
MAKEINFO = @MAKEINFO@
@ -338,6 +348,7 @@ pdfdir = @pdfdir@
prefix = @prefix@
program_transform_name = @program_transform_name@
psdir = @psdir@
runstatedir = @runstatedir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
srcdir = @srcdir@
@ -369,15 +380,14 @@ $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__confi
echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu Makefile'; \
$(am__cd) $(top_srcdir) && \
$(AUTOMAKE) --gnu Makefile
.PRECIOUS: Makefile
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
@case '$?' in \
*config.status*) \
echo ' $(SHELL) ./config.status'; \
$(SHELL) ./config.status;; \
*) \
echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \
cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \
echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__maybe_remake_depfiles)'; \
cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__maybe_remake_depfiles);; \
esac;
$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
@ -526,8 +536,10 @@ cscopelist-am: $(am__tagged_files)
distclean-tags:
-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
-rm -f cscope.out cscope.in.out cscope.po.out cscope.files
distdir: $(BUILT_SOURCES)
$(MAKE) $(AM_MAKEFLAGS) distdir-am
distdir: $(DISTFILES)
distdir-am: $(DISTFILES)
$(am__remove_distdir)
test -d "$(distdir)" || mkdir "$(distdir)"
@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
@ -592,7 +604,7 @@ distdir: $(DISTFILES)
! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \
|| chmod -R a+r "$(distdir)"
dist-gzip: distdir
tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz
tardir=$(distdir) && $(am__tar) | eval GZIP= gzip $(GZIP_ENV) -c >$(distdir).tar.gz
$(am__post_remove_distdir)
dist-bzip2: distdir
@ -607,18 +619,22 @@ dist-xz: distdir
tardir=$(distdir) && $(am__tar) | XZ_OPT=$${XZ_OPT--e} xz -c >$(distdir).tar.xz
$(am__post_remove_distdir)
dist-zstd: distdir
tardir=$(distdir) && $(am__tar) | zstd -c $${ZSTD_CLEVEL-$${ZSTD_OPT--19}} >$(distdir).tar.zst
$(am__post_remove_distdir)
dist-tarZ: distdir
@echo WARNING: "Support for shar distribution archives is" \
"deprecated." >&2
@echo WARNING: "Support for distribution archives compressed with" \
"legacy program 'compress' is deprecated." >&2
@echo WARNING: "It will be removed altogether in Automake 2.0" >&2
tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z
$(am__post_remove_distdir)
dist-shar: distdir
@echo WARNING: "Support for distribution archives compressed with" \
"legacy program 'compress' is deprecated." >&2
@echo WARNING: "Support for shar distribution archives is" \
"deprecated." >&2
@echo WARNING: "It will be removed altogether in Automake 2.0" >&2
shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz
shar $(distdir) | eval GZIP= gzip $(GZIP_ENV) -c >$(distdir).shar.gz
$(am__post_remove_distdir)
dist-zip: distdir
@ -636,7 +652,7 @@ dist dist-all:
distcheck: dist
case '$(DIST_ARCHIVES)' in \
*.tar.gz*) \
GZIP=$(GZIP_ENV) gzip -dc $(distdir).tar.gz | $(am__untar) ;;\
eval GZIP= gzip $(GZIP_ENV) -dc $(distdir).tar.gz | $(am__untar) ;;\
*.tar.bz2*) \
bzip2 -dc $(distdir).tar.bz2 | $(am__untar) ;;\
*.tar.lz*) \
@ -646,25 +662,27 @@ distcheck: dist
*.tar.Z*) \
uncompress -c $(distdir).tar.Z | $(am__untar) ;;\
*.shar.gz*) \
GZIP=$(GZIP_ENV) gzip -dc $(distdir).shar.gz | unshar ;;\
eval GZIP= gzip $(GZIP_ENV) -dc $(distdir).shar.gz | unshar ;;\
*.zip*) \
unzip $(distdir).zip ;;\
*.tar.zst*) \
zstd -dc $(distdir).tar.zst | $(am__untar) ;;\
esac
chmod -R a-w $(distdir)
chmod u+w $(distdir)
mkdir $(distdir)/_build $(distdir)/_inst
mkdir $(distdir)/_build $(distdir)/_build/sub $(distdir)/_inst
chmod a-w $(distdir)
test -d $(distdir)/_build || exit 0; \
dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \
&& dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \
&& am__cwd=`pwd` \
&& $(am__cd) $(distdir)/_build \
&& ../configure \
&& $(am__cd) $(distdir)/_build/sub \
&& ../../configure \
$(AM_DISTCHECK_CONFIGURE_FLAGS) \
$(DISTCHECK_CONFIGURE_FLAGS) \
--srcdir=.. --prefix="$$dc_install_base" \
--srcdir=../.. --prefix="$$dc_install_base" \
&& $(MAKE) $(AM_MAKEFLAGS) \
&& $(MAKE) $(AM_MAKEFLAGS) dvi \
&& $(MAKE) $(AM_MAKEFLAGS) $(AM_DISTCHECK_DVI_TARGET) \
&& $(MAKE) $(AM_MAKEFLAGS) check \
&& $(MAKE) $(AM_MAKEFLAGS) install \
&& $(MAKE) $(AM_MAKEFLAGS) installcheck \
@ -829,18 +847,20 @@ uninstall-am: uninstall-pkgconfigDATA
am--refresh check check-am clean clean-cscope clean-generic \
clean-libtool cscope cscopelist-am ctags ctags-am dist \
dist-all dist-bzip2 dist-gzip dist-lzip dist-shar dist-tarZ \
dist-xz dist-zip distcheck distclean distclean-generic \
distclean-libtool distclean-tags distcleancheck distdir \
distuninstallcheck dvi dvi-am html html-am info info-am \
install install-am install-data install-data-am install-dvi \
install-dvi-am install-exec install-exec-am install-html \
install-html-am install-info install-info-am install-man \
install-pdf install-pdf-am install-pkgconfigDATA install-ps \
install-ps-am install-strip installcheck installcheck-am \
installdirs installdirs-am maintainer-clean \
maintainer-clean-generic mostlyclean mostlyclean-generic \
mostlyclean-libtool pdf pdf-am ps ps-am tags tags-am uninstall \
uninstall-am uninstall-pkgconfigDATA
dist-xz dist-zip dist-zstd distcheck distclean \
distclean-generic distclean-libtool distclean-tags \
distcleancheck distdir distuninstallcheck dvi dvi-am html \
html-am info info-am install install-am install-data \
install-data-am install-dvi install-dvi-am install-exec \
install-exec-am install-html install-html-am install-info \
install-info-am install-man install-pdf install-pdf-am \
install-pkgconfigDATA install-ps install-ps-am install-strip \
installcheck installcheck-am installdirs installdirs-am \
maintainer-clean maintainer-clean-generic mostlyclean \
mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
tags tags-am uninstall uninstall-am uninstall-pkgconfigDATA
.PRECIOUS: Makefile
# Tell versions [3.59,3.63) of GNU make to not export all variables.

2951
bindings/cpp/aclocal.m4 vendored

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,382 @@
# This file was generated by Autom4te 2.71.
# It contains the lists of macros which have been traced.
# It can be safely removed.
@request = (
bless( [
'0',
1,
[
'/usr/local/Cellar/autoconf/2.71/share/autoconf'
],
[
'/usr/local/Cellar/autoconf/2.71/share/autoconf/autoconf/autoconf.m4f',
'/usr/local/Cellar/automake/1.16.5/share/aclocal-1.16/internal/ac-config-macro-dirs.m4',
'/usr/local/share/aclocal/libtool.m4',
'/usr/local/share/aclocal/ltargz.m4',
'/usr/local/share/aclocal/ltdl.m4',
'/usr/local/share/aclocal/ltoptions.m4',
'/usr/local/share/aclocal/ltsugar.m4',
'/usr/local/share/aclocal/ltversion.m4',
'/usr/local/share/aclocal/lt~obsolete.m4',
'/usr/local/Cellar/automake/1.16.5/share/aclocal-1.16/amversion.m4',
'/usr/local/Cellar/automake/1.16.5/share/aclocal-1.16/auxdir.m4',
'/usr/local/Cellar/automake/1.16.5/share/aclocal-1.16/cond.m4',
'/usr/local/Cellar/automake/1.16.5/share/aclocal-1.16/depend.m4',
'/usr/local/Cellar/automake/1.16.5/share/aclocal-1.16/depout.m4',
'/usr/local/Cellar/automake/1.16.5/share/aclocal-1.16/init.m4',
'/usr/local/Cellar/automake/1.16.5/share/aclocal-1.16/install-sh.m4',
'/usr/local/Cellar/automake/1.16.5/share/aclocal-1.16/lead-dot.m4',
'/usr/local/Cellar/automake/1.16.5/share/aclocal-1.16/maintainer.m4',
'/usr/local/Cellar/automake/1.16.5/share/aclocal-1.16/make.m4',
'/usr/local/Cellar/automake/1.16.5/share/aclocal-1.16/missing.m4',
'/usr/local/Cellar/automake/1.16.5/share/aclocal-1.16/options.m4',
'/usr/local/Cellar/automake/1.16.5/share/aclocal-1.16/prog-cc-c-o.m4',
'/usr/local/Cellar/automake/1.16.5/share/aclocal-1.16/runlog.m4',
'/usr/local/Cellar/automake/1.16.5/share/aclocal-1.16/sanity.m4',
'/usr/local/Cellar/automake/1.16.5/share/aclocal-1.16/silent.m4',
'/usr/local/Cellar/automake/1.16.5/share/aclocal-1.16/strip.m4',
'/usr/local/Cellar/automake/1.16.5/share/aclocal-1.16/substnot.m4',
'/usr/local/Cellar/automake/1.16.5/share/aclocal-1.16/tar.m4',
'configure.ac'
],
{
'AC_LIBTOOL_LINKER_OPTION' => 1,
'LT_WITH_LTDL' => 1,
'AC_LIBLTDL_CONVENIENCE' => 1,
'AC_LTDL_SYSSEARCHPATH' => 1,
'LT_LIB_DLLOAD' => 1,
'AM_AUTOMAKE_VERSION' => 1,
'AC_CONFIG_MACRO_DIR_TRACE' => 1,
'LTOBSOLETE_VERSION' => 1,
'_AM_MANGLE_OPTION' => 1,
'AM_DEP_TRACK' => 1,
'LTDL_INSTALLABLE' => 1,
'AM_PROG_INSTALL_SH' => 1,
'AM_PROG_LD' => 1,
'AM_SET_DEPDIR' => 1,
'AC_LIBTOOL_SYS_OLD_ARCHIVE' => 1,
'AM_INIT_AUTOMAKE' => 1,
'm4_pattern_forbid' => 1,
'_AC_PROG_LIBTOOL' => 1,
'AC_LIBTOOL_SYS_MAX_CMD_LEN' => 1,
'LT_SYS_SYMBOL_USCORE' => 1,
'AC_LIBTOOL_RC' => 1,
'_LT_REQUIRED_DARWIN_CHECKS' => 1,
'AM_DISABLE_SHARED' => 1,
'AC_PATH_TOOL_PREFIX' => 1,
'_LT_AC_LANG_CXX_CONFIG' => 1,
'LT_AC_PROG_SED' => 1,
'AC_PROG_NM' => 1,
'AM_ENABLE_SHARED' => 1,
'AC_LIBTOOL_LANG_GCJ_CONFIG' => 1,
'LTDL_CONVENIENCE' => 1,
'AC_CONFIG_MACRO_DIR' => 1,
'_LT_AC_LANG_GCJ_CONFIG' => 1,
'AM_PROG_CC_C_O' => 1,
'LT_AC_PROG_EGREP' => 1,
'AC_LTDL_SHLIBEXT' => 1,
'AM_ENABLE_STATIC' => 1,
'_LT_COMPILER_BOILERPLATE' => 1,
'_AM_SET_OPTIONS' => 1,
'_LT_AC_LANG_F77_CONFIG' => 1,
'AM_SILENT_RULES' => 1,
'AC_LIBTOOL_LANG_CXX_CONFIG' => 1,
'_AM_CONFIG_MACRO_DIRS' => 1,
'm4_pattern_allow' => 1,
'AU_DEFUN' => 1,
'AM_RUN_LOG' => 1,
'AC_PROG_LD_RELOAD_FLAG' => 1,
'_AM_DEPENDENCIES' => 1,
'LTOPTIONS_VERSION' => 1,
'AM_SUBST_NOTMAKE' => 1,
'LT_SYS_DLSEARCH_PATH' => 1,
'LT_FUNC_DLSYM_USCORE' => 1,
'AC_LIBTOOL_CXX' => 1,
'AC_LTDL_SYMBOL_USCORE' => 1,
'AM_PROG_LIBTOOL' => 1,
'LT_PROG_GO' => 1,
'AM_MAINTAINER_MODE' => 1,
'AC_LTDL_SHLIBPATH' => 1,
'_AM_SET_OPTION' => 1,
'AC_DEFUN' => 1,
'AM_CONDITIONAL' => 1,
'LT_INIT' => 1,
'_LT_AC_CHECK_DLFCN' => 1,
'_LT_PROG_F77' => 1,
'_AM_IF_OPTION' => 1,
'AC_LIBTOOL_SETUP' => 1,
'_LT_PATH_TOOL_PREFIX' => 1,
'AC_PROG_LD_GNU' => 1,
'_AM_SUBST_NOTMAKE' => 1,
'AC_LIBTOOL_PROG_CC_C_O' => 1,
'AC_LIBTOOL_PROG_LD_SHLIBS' => 1,
'AC_CHECK_LIBM' => 1,
'_m4_warn' => 1,
'AC_LIBTOOL_FC' => 1,
'LT_PATH_LD' => 1,
'_LT_WITH_SYSROOT' => 1,
'LT_SYS_DLOPEN_SELF' => 1,
'_LT_PROG_CXX' => 1,
'LT_AC_PROG_RC' => 1,
'_LT_AC_LOCK' => 1,
'LT_SYS_MODULE_EXT' => 1,
'AM_DISABLE_STATIC' => 1,
'_LT_LIBOBJ' => 1,
'_LT_AC_PROG_CXXCPP' => 1,
'AC_LIBTOOL_LANG_RC_CONFIG' => 1,
'LTDL_INIT' => 1,
'LT_OUTPUT' => 1,
'LT_PROG_GCJ' => 1,
'_LT_COMPILER_OPTION' => 1,
'LT_SYS_DLOPEN_DEPLIBS' => 1,
'AC_WITH_LTDL' => 1,
'_LT_LINKER_BOILERPLATE' => 1,
'_LT_AC_SHELL_INIT' => 1,
'LT_SUPPORTED_TAG' => 1,
'AC_LTDL_ENABLE_INSTALL' => 1,
'LTVERSION_VERSION' => 1,
'AC_LIBTOOL_WIN32_DLL' => 1,
'AM_MISSING_HAS_RUN' => 1,
'AC_LIBTOOL_PROG_COMPILER_NO_RTTI' => 1,
'_LT_AC_LANG_RC_CONFIG' => 1,
'AC_DISABLE_STATIC' => 1,
'AC_DISABLE_FAST_INSTALL' => 1,
'_LT_PROG_LTMAIN' => 1,
'_LT_AC_PROG_ECHO_BACKSLASH' => 1,
'AM_AUX_DIR_EXPAND' => 1,
'_LT_AC_SYS_COMPILER' => 1,
'AM_SANITY_CHECK' => 1,
'_LT_PROG_FC' => 1,
'AC_LIBTOOL_PROG_COMPILER_PIC' => 1,
'AC_LIBTOOL_GCJ' => 1,
'AC_LIBTOOL_SYS_HARD_LINK_LOCKS' => 1,
'AC_PROG_LIBTOOL' => 1,
'_AM_AUTOCONF_VERSION' => 1,
'AC_ENABLE_FAST_INSTALL' => 1,
'LT_PATH_NM' => 1,
'_LT_CC_BASENAME' => 1,
'AC_DEFUN_ONCE' => 1,
'_LTDL_SETUP' => 1,
'_AM_OUTPUT_DEPENDENCY_COMMANDS' => 1,
'AC_LIBTOOL_CONFIG' => 1,
'LT_CONFIG_LTDL_DIR' => 1,
'AC_LTDL_OBJDIR' => 1,
'_LT_AC_FILE_LTDLL_C' => 1,
'AC_LTDL_DLSYM_USCORE' => 1,
'AC_LIBTOOL_OBJDIR' => 1,
'AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH' => 1,
'AC_LIBLTDL_INSTALLABLE' => 1,
'AC_LTDL_DLLIB' => 1,
'AC_LIBTOOL_LANG_C_CONFIG' => 1,
'AC_DISABLE_SHARED' => 1,
'AM_OUTPUT_DEPENDENCY_COMMANDS' => 1,
'_LT_AC_TAGVAR' => 1,
'AC_ENABLE_SHARED' => 1,
'AM_PROG_NM' => 1,
'AC_LIBTOOL_COMPILER_OPTION' => 1,
'AM_PROG_INSTALL_STRIP' => 1,
'AC_LIBTOOL_PICMODE' => 1,
'AM_SET_LEADING_DOT' => 1,
'AC_DEPLIBS_CHECK_METHOD' => 1,
'_LT_PREPARE_SED_QUOTE_VARS' => 1,
'AC_LIBTOOL_DLOPEN_SELF' => 1,
'AC_LIB_LTDL' => 1,
'LT_LIB_M' => 1,
'AC_ENABLE_STATIC' => 1,
'AC_PATH_MAGIC' => 1,
'AC_LIBTOOL_F77' => 1,
'AC_LIBTOOL_LANG_F77_CONFIG' => 1,
'LT_LANG' => 1,
'_LT_LINKER_OPTION' => 1,
'AM_MISSING_PROG' => 1,
'LTSUGAR_VERSION' => 1,
'include' => 1,
'_AM_PROG_CC_C_O' => 1,
'LT_AC_PROG_GCJ' => 1,
'AC_LIBTOOL_SYS_LIB_STRIP' => 1,
'_LT_AC_TAGCONFIG' => 1,
'_AM_PROG_TAR' => 1,
'AM_MAKE_INCLUDE' => 1,
'_LT_AC_LANG_F77' => 1,
'AC_LTDL_PREOPEN' => 1,
'AC_LIBTOOL_DLOPEN' => 1,
'LT_CMD_MAX_LEN' => 1,
'AC_LIBTOOL_POSTDEP_PREDEP' => 1,
'_LT_AC_SYS_LIBPATH_AIX' => 1,
'_LT_AC_TRY_DLOPEN_SELF' => 1,
'AC_PROG_EGREP' => 1,
'LT_PROG_RC' => 1,
'AC_LTDL_SYS_DLOPEN_DEPLIBS' => 1,
'_AC_AM_CONFIG_HEADER_HOOK' => 1,
'AC_LIBTOOL_SYS_DYNAMIC_LINKER' => 1,
'AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE' => 1,
'LT_FUNC_ARGZ' => 1,
'AM_SET_CURRENT_AUTOMAKE_VERSION' => 1,
'_LT_PROG_ECHO_BACKSLASH' => 1,
'_LT_AC_LANG_CXX' => 1,
'LT_SYS_MODULE_PATH' => 1,
'_LT_AC_LANG_C_CONFIG' => 1,
'AC_PROG_LD' => 1,
'_LT_DLL_DEF_P' => 1,
'_LT_AC_LANG_GCJ' => 1,
'm4_include' => 1
}
], 'Autom4te::Request' ),
bless( [
'1',
1,
[
'/usr/local/Cellar/autoconf/2.71/share/autoconf'
],
[
'/usr/local/Cellar/autoconf/2.71/share/autoconf/autoconf/autoconf.m4f',
'aclocal.m4',
'configure.ac'
],
{
'_m4_warn' => 1,
'AC_PROG_LIBTOOL' => 1,
'AM_PROG_CC_C_O' => 1,
'AM_PROG_FC_C_O' => 1,
'AM_PROG_MKDIR_P' => 1,
'sinclude' => 1,
'GTK_DOC_CHECK' => 1,
'AC_LIBSOURCE' => 1,
'AC_CONFIG_FILES' => 1,
'AM_PROG_F77_C_O' => 1,
'AC_CANONICAL_SYSTEM' => 1,
'AC_REQUIRE_AUX_FILE' => 1,
'_AM_SUBST_NOTMAKE' => 1,
'm4_sinclude' => 1,
'AM_PROG_AR' => 1,
'm4_include' => 1,
'AM_NLS' => 1,
'AM_XGETTEXT_OPTION' => 1,
'LT_CONFIG_LTDL_DIR' => 1,
'AM_SILENT_RULES' => 1,
'm4_pattern_allow' => 1,
'_AM_COND_ENDIF' => 1,
'AC_CANONICAL_HOST' => 1,
'AM_PATH_GUILE' => 1,
'AC_SUBST_TRACE' => 1,
'IT_PROG_INTLTOOL' => 1,
'AM_PROG_LIBTOOL' => 1,
'AM_ENABLE_MULTILIB' => 1,
'AC_CONFIG_MACRO_DIR_TRACE' => 1,
'AM_AUTOMAKE_VERSION' => 1,
'AM_MAINTAINER_MODE' => 1,
'AC_CANONICAL_BUILD' => 1,
'AM_PROG_MOC' => 1,
'AC_CONFIG_LIBOBJ_DIR' => 1,
'AM_PROG_CXX_C_O' => 1,
'AC_CONFIG_AUX_DIR' => 1,
'LT_SUPPORTED_TAG' => 1,
'AM_EXTRA_RECURSIVE_TARGETS' => 1,
'_AM_COND_ELSE' => 1,
'AC_FC_PP_DEFINE' => 1,
'AM_MAKEFILE_INCLUDE' => 1,
'AH_OUTPUT' => 1,
'AM_POT_TOOLS' => 1,
'AC_FC_FREEFORM' => 1,
'AC_FC_SRCEXT' => 1,
'AC_DEFINE_TRACE_LITERAL' => 1,
'AC_CONFIG_HEADERS' => 1,
'AC_CANONICAL_TARGET' => 1,
'_LT_AC_TAGCONFIG' => 1,
'include' => 1,
'_AM_MAKEFILE_INCLUDE' => 1,
'AM_INIT_AUTOMAKE' => 1,
'm4_pattern_forbid' => 1,
'AC_CONFIG_SUBDIRS' => 1,
'AC_SUBST' => 1,
'AM_GNU_GETTEXT_INTL_SUBDIR' => 1,
'AM_CONDITIONAL' => 1,
'AC_CONFIG_LINKS' => 1,
'LT_INIT' => 1,
'AC_FC_PP_SRCEXT' => 1,
'AM_GNU_GETTEXT' => 1,
'_AM_COND_IF' => 1,
'AC_INIT' => 1
}
], 'Autom4te::Request' ),
bless( [
'2',
1,
[
'/usr/local/Cellar/autoconf/2.71/share/autoconf'
],
[
'/usr/local/Cellar/autoconf/2.71/share/autoconf/autoconf/autoconf.m4f',
'aclocal.m4',
'/usr/local/Cellar/autoconf/2.71/share/autoconf/autoconf/trailer.m4',
'configure.ac'
],
{
'GTK_DOC_CHECK' => 1,
'AC_LIBSOURCE' => 1,
'AM_PROG_MKDIR_P' => 1,
'sinclude' => 1,
'AM_PROG_CC_C_O' => 1,
'AM_PROG_FC_C_O' => 1,
'_m4_warn' => 1,
'AC_PROG_LIBTOOL' => 1,
'm4_sinclude' => 1,
'AM_PROG_AR' => 1,
'_AM_SUBST_NOTMAKE' => 1,
'AC_REQUIRE_AUX_FILE' => 1,
'AM_PROG_F77_C_O' => 1,
'AC_CANONICAL_SYSTEM' => 1,
'AC_CONFIG_FILES' => 1,
'm4_pattern_allow' => 1,
'_AM_COND_ENDIF' => 1,
'LT_CONFIG_LTDL_DIR' => 1,
'AM_SILENT_RULES' => 1,
'AM_XGETTEXT_OPTION' => 1,
'm4_include' => 1,
'AM_NLS' => 1,
'AC_SUBST_TRACE' => 1,
'IT_PROG_INTLTOOL' => 1,
'AC_CANONICAL_HOST' => 1,
'AM_PATH_GUILE' => 1,
'AC_CONFIG_AUX_DIR' => 1,
'LT_SUPPORTED_TAG' => 1,
'AM_EXTRA_RECURSIVE_TARGETS' => 1,
'AM_PROG_MOC' => 1,
'AC_CONFIG_LIBOBJ_DIR' => 1,
'AM_PROG_CXX_C_O' => 1,
'AM_MAINTAINER_MODE' => 1,
'AC_CANONICAL_BUILD' => 1,
'AM_PROG_LIBTOOL' => 1,
'AM_ENABLE_MULTILIB' => 1,
'AC_CONFIG_MACRO_DIR_TRACE' => 1,
'AM_AUTOMAKE_VERSION' => 1,
'AC_FC_SRCEXT' => 1,
'AC_DEFINE_TRACE_LITERAL' => 1,
'AH_OUTPUT' => 1,
'AM_MAKEFILE_INCLUDE' => 1,
'AM_POT_TOOLS' => 1,
'AC_FC_FREEFORM' => 1,
'_AM_COND_ELSE' => 1,
'AC_FC_PP_DEFINE' => 1,
'_AM_MAKEFILE_INCLUDE' => 1,
'AM_INIT_AUTOMAKE' => 1,
'm4_pattern_forbid' => 1,
'include' => 1,
'AC_CANONICAL_TARGET' => 1,
'AC_CONFIG_HEADERS' => 1,
'_LT_AC_TAGCONFIG' => 1,
'AM_GNU_GETTEXT' => 1,
'AC_FC_PP_SRCEXT' => 1,
'AC_INIT' => 1,
'_AM_COND_IF' => 1,
'AM_GNU_GETTEXT_INTL_SUBDIR' => 1,
'AM_CONDITIONAL' => 1,
'LT_INIT' => 1,
'AC_CONFIG_LINKS' => 1,
'AC_CONFIG_SUBDIRS' => 1,
'AC_SUBST' => 1
}
], 'Autom4te::Request' )
);

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,618 @@
m4trace:aclocal.m4:9759: -1- AC_SUBST([am__quote])
m4trace:aclocal.m4:9759: -1- AC_SUBST_TRACE([am__quote])
m4trace:aclocal.m4:9759: -1- m4_pattern_allow([^am__quote$])
m4trace:configure.ac:15: -1- AC_INIT([PortAudioCpp], [12])
m4trace:configure.ac:15: -1- m4_pattern_forbid([^_?A[CHUM]_])
m4trace:configure.ac:15: -1- m4_pattern_forbid([_AC_])
m4trace:configure.ac:15: -1- m4_pattern_forbid([^LIBOBJS$], [do not use LIBOBJS directly, use AC_LIBOBJ (see section `AC_LIBOBJ vs LIBOBJS'])
m4trace:configure.ac:15: -1- m4_pattern_allow([^AS_FLAGS$])
m4trace:configure.ac:15: -1- m4_pattern_forbid([^_?m4_])
m4trace:configure.ac:15: -1- m4_pattern_forbid([^dnl$])
m4trace:configure.ac:15: -1- m4_pattern_forbid([^_?AS_])
m4trace:configure.ac:15: -1- AC_SUBST([SHELL])
m4trace:configure.ac:15: -1- AC_SUBST_TRACE([SHELL])
m4trace:configure.ac:15: -1- m4_pattern_allow([^SHELL$])
m4trace:configure.ac:15: -1- AC_SUBST([PATH_SEPARATOR])
m4trace:configure.ac:15: -1- AC_SUBST_TRACE([PATH_SEPARATOR])
m4trace:configure.ac:15: -1- m4_pattern_allow([^PATH_SEPARATOR$])
m4trace:configure.ac:15: -1- AC_SUBST([PACKAGE_NAME], [m4_ifdef([AC_PACKAGE_NAME], ['AC_PACKAGE_NAME'])])
m4trace:configure.ac:15: -1- AC_SUBST_TRACE([PACKAGE_NAME])
m4trace:configure.ac:15: -1- m4_pattern_allow([^PACKAGE_NAME$])
m4trace:configure.ac:15: -1- AC_SUBST([PACKAGE_TARNAME], [m4_ifdef([AC_PACKAGE_TARNAME], ['AC_PACKAGE_TARNAME'])])
m4trace:configure.ac:15: -1- AC_SUBST_TRACE([PACKAGE_TARNAME])
m4trace:configure.ac:15: -1- m4_pattern_allow([^PACKAGE_TARNAME$])
m4trace:configure.ac:15: -1- AC_SUBST([PACKAGE_VERSION], [m4_ifdef([AC_PACKAGE_VERSION], ['AC_PACKAGE_VERSION'])])
m4trace:configure.ac:15: -1- AC_SUBST_TRACE([PACKAGE_VERSION])
m4trace:configure.ac:15: -1- m4_pattern_allow([^PACKAGE_VERSION$])
m4trace:configure.ac:15: -1- AC_SUBST([PACKAGE_STRING], [m4_ifdef([AC_PACKAGE_STRING], ['AC_PACKAGE_STRING'])])
m4trace:configure.ac:15: -1- AC_SUBST_TRACE([PACKAGE_STRING])
m4trace:configure.ac:15: -1- m4_pattern_allow([^PACKAGE_STRING$])
m4trace:configure.ac:15: -1- AC_SUBST([PACKAGE_BUGREPORT], [m4_ifdef([AC_PACKAGE_BUGREPORT], ['AC_PACKAGE_BUGREPORT'])])
m4trace:configure.ac:15: -1- AC_SUBST_TRACE([PACKAGE_BUGREPORT])
m4trace:configure.ac:15: -1- m4_pattern_allow([^PACKAGE_BUGREPORT$])
m4trace:configure.ac:15: -1- AC_SUBST([PACKAGE_URL], [m4_ifdef([AC_PACKAGE_URL], ['AC_PACKAGE_URL'])])
m4trace:configure.ac:15: -1- AC_SUBST_TRACE([PACKAGE_URL])
m4trace:configure.ac:15: -1- m4_pattern_allow([^PACKAGE_URL$])
m4trace:configure.ac:15: -1- AC_SUBST([exec_prefix], [NONE])
m4trace:configure.ac:15: -1- AC_SUBST_TRACE([exec_prefix])
m4trace:configure.ac:15: -1- m4_pattern_allow([^exec_prefix$])
m4trace:configure.ac:15: -1- AC_SUBST([prefix], [NONE])
m4trace:configure.ac:15: -1- AC_SUBST_TRACE([prefix])
m4trace:configure.ac:15: -1- m4_pattern_allow([^prefix$])
m4trace:configure.ac:15: -1- AC_SUBST([program_transform_name], [s,x,x,])
m4trace:configure.ac:15: -1- AC_SUBST_TRACE([program_transform_name])
m4trace:configure.ac:15: -1- m4_pattern_allow([^program_transform_name$])
m4trace:configure.ac:15: -1- AC_SUBST([bindir], ['${exec_prefix}/bin'])
m4trace:configure.ac:15: -1- AC_SUBST_TRACE([bindir])
m4trace:configure.ac:15: -1- m4_pattern_allow([^bindir$])
m4trace:configure.ac:15: -1- AC_SUBST([sbindir], ['${exec_prefix}/sbin'])
m4trace:configure.ac:15: -1- AC_SUBST_TRACE([sbindir])
m4trace:configure.ac:15: -1- m4_pattern_allow([^sbindir$])
m4trace:configure.ac:15: -1- AC_SUBST([libexecdir], ['${exec_prefix}/libexec'])
m4trace:configure.ac:15: -1- AC_SUBST_TRACE([libexecdir])
m4trace:configure.ac:15: -1- m4_pattern_allow([^libexecdir$])
m4trace:configure.ac:15: -1- AC_SUBST([datarootdir], ['${prefix}/share'])
m4trace:configure.ac:15: -1- AC_SUBST_TRACE([datarootdir])
m4trace:configure.ac:15: -1- m4_pattern_allow([^datarootdir$])
m4trace:configure.ac:15: -1- AC_SUBST([datadir], ['${datarootdir}'])
m4trace:configure.ac:15: -1- AC_SUBST_TRACE([datadir])
m4trace:configure.ac:15: -1- m4_pattern_allow([^datadir$])
m4trace:configure.ac:15: -1- AC_SUBST([sysconfdir], ['${prefix}/etc'])
m4trace:configure.ac:15: -1- AC_SUBST_TRACE([sysconfdir])
m4trace:configure.ac:15: -1- m4_pattern_allow([^sysconfdir$])
m4trace:configure.ac:15: -1- AC_SUBST([sharedstatedir], ['${prefix}/com'])
m4trace:configure.ac:15: -1- AC_SUBST_TRACE([sharedstatedir])
m4trace:configure.ac:15: -1- m4_pattern_allow([^sharedstatedir$])
m4trace:configure.ac:15: -1- AC_SUBST([localstatedir], ['${prefix}/var'])
m4trace:configure.ac:15: -1- AC_SUBST_TRACE([localstatedir])
m4trace:configure.ac:15: -1- m4_pattern_allow([^localstatedir$])
m4trace:configure.ac:15: -1- AC_SUBST([runstatedir], ['${localstatedir}/run'])
m4trace:configure.ac:15: -1- AC_SUBST_TRACE([runstatedir])
m4trace:configure.ac:15: -1- m4_pattern_allow([^runstatedir$])
m4trace:configure.ac:15: -1- AC_SUBST([includedir], ['${prefix}/include'])
m4trace:configure.ac:15: -1- AC_SUBST_TRACE([includedir])
m4trace:configure.ac:15: -1- m4_pattern_allow([^includedir$])
m4trace:configure.ac:15: -1- AC_SUBST([oldincludedir], ['/usr/include'])
m4trace:configure.ac:15: -1- AC_SUBST_TRACE([oldincludedir])
m4trace:configure.ac:15: -1- m4_pattern_allow([^oldincludedir$])
m4trace:configure.ac:15: -1- AC_SUBST([docdir], [m4_ifset([AC_PACKAGE_TARNAME],
['${datarootdir}/doc/${PACKAGE_TARNAME}'],
['${datarootdir}/doc/${PACKAGE}'])])
m4trace:configure.ac:15: -1- AC_SUBST_TRACE([docdir])
m4trace:configure.ac:15: -1- m4_pattern_allow([^docdir$])
m4trace:configure.ac:15: -1- AC_SUBST([infodir], ['${datarootdir}/info'])
m4trace:configure.ac:15: -1- AC_SUBST_TRACE([infodir])
m4trace:configure.ac:15: -1- m4_pattern_allow([^infodir$])
m4trace:configure.ac:15: -1- AC_SUBST([htmldir], ['${docdir}'])
m4trace:configure.ac:15: -1- AC_SUBST_TRACE([htmldir])
m4trace:configure.ac:15: -1- m4_pattern_allow([^htmldir$])
m4trace:configure.ac:15: -1- AC_SUBST([dvidir], ['${docdir}'])
m4trace:configure.ac:15: -1- AC_SUBST_TRACE([dvidir])
m4trace:configure.ac:15: -1- m4_pattern_allow([^dvidir$])
m4trace:configure.ac:15: -1- AC_SUBST([pdfdir], ['${docdir}'])
m4trace:configure.ac:15: -1- AC_SUBST_TRACE([pdfdir])
m4trace:configure.ac:15: -1- m4_pattern_allow([^pdfdir$])
m4trace:configure.ac:15: -1- AC_SUBST([psdir], ['${docdir}'])
m4trace:configure.ac:15: -1- AC_SUBST_TRACE([psdir])
m4trace:configure.ac:15: -1- m4_pattern_allow([^psdir$])
m4trace:configure.ac:15: -1- AC_SUBST([libdir], ['${exec_prefix}/lib'])
m4trace:configure.ac:15: -1- AC_SUBST_TRACE([libdir])
m4trace:configure.ac:15: -1- m4_pattern_allow([^libdir$])
m4trace:configure.ac:15: -1- AC_SUBST([localedir], ['${datarootdir}/locale'])
m4trace:configure.ac:15: -1- AC_SUBST_TRACE([localedir])
m4trace:configure.ac:15: -1- m4_pattern_allow([^localedir$])
m4trace:configure.ac:15: -1- AC_SUBST([mandir], ['${datarootdir}/man'])
m4trace:configure.ac:15: -1- AC_SUBST_TRACE([mandir])
m4trace:configure.ac:15: -1- m4_pattern_allow([^mandir$])
m4trace:configure.ac:15: -1- AC_DEFINE_TRACE_LITERAL([PACKAGE_NAME])
m4trace:configure.ac:15: -1- m4_pattern_allow([^PACKAGE_NAME$])
m4trace:configure.ac:15: -1- AH_OUTPUT([PACKAGE_NAME], [/* Define to the full name of this package. */
@%:@undef PACKAGE_NAME])
m4trace:configure.ac:15: -1- AC_DEFINE_TRACE_LITERAL([PACKAGE_TARNAME])
m4trace:configure.ac:15: -1- m4_pattern_allow([^PACKAGE_TARNAME$])
m4trace:configure.ac:15: -1- AH_OUTPUT([PACKAGE_TARNAME], [/* Define to the one symbol short name of this package. */
@%:@undef PACKAGE_TARNAME])
m4trace:configure.ac:15: -1- AC_DEFINE_TRACE_LITERAL([PACKAGE_VERSION])
m4trace:configure.ac:15: -1- m4_pattern_allow([^PACKAGE_VERSION$])
m4trace:configure.ac:15: -1- AH_OUTPUT([PACKAGE_VERSION], [/* Define to the version of this package. */
@%:@undef PACKAGE_VERSION])
m4trace:configure.ac:15: -1- AC_DEFINE_TRACE_LITERAL([PACKAGE_STRING])
m4trace:configure.ac:15: -1- m4_pattern_allow([^PACKAGE_STRING$])
m4trace:configure.ac:15: -1- AH_OUTPUT([PACKAGE_STRING], [/* Define to the full name and version of this package. */
@%:@undef PACKAGE_STRING])
m4trace:configure.ac:15: -1- AC_DEFINE_TRACE_LITERAL([PACKAGE_BUGREPORT])
m4trace:configure.ac:15: -1- m4_pattern_allow([^PACKAGE_BUGREPORT$])
m4trace:configure.ac:15: -1- AH_OUTPUT([PACKAGE_BUGREPORT], [/* Define to the address where bug reports for this package should be sent. */
@%:@undef PACKAGE_BUGREPORT])
m4trace:configure.ac:15: -1- AC_DEFINE_TRACE_LITERAL([PACKAGE_URL])
m4trace:configure.ac:15: -1- m4_pattern_allow([^PACKAGE_URL$])
m4trace:configure.ac:15: -1- AH_OUTPUT([PACKAGE_URL], [/* Define to the home page for this package. */
@%:@undef PACKAGE_URL])
m4trace:configure.ac:15: -1- AC_SUBST([DEFS])
m4trace:configure.ac:15: -1- AC_SUBST_TRACE([DEFS])
m4trace:configure.ac:15: -1- m4_pattern_allow([^DEFS$])
m4trace:configure.ac:15: -1- AC_SUBST([ECHO_C])
m4trace:configure.ac:15: -1- AC_SUBST_TRACE([ECHO_C])
m4trace:configure.ac:15: -1- m4_pattern_allow([^ECHO_C$])
m4trace:configure.ac:15: -1- AC_SUBST([ECHO_N])
m4trace:configure.ac:15: -1- AC_SUBST_TRACE([ECHO_N])
m4trace:configure.ac:15: -1- m4_pattern_allow([^ECHO_N$])
m4trace:configure.ac:15: -1- AC_SUBST([ECHO_T])
m4trace:configure.ac:15: -1- AC_SUBST_TRACE([ECHO_T])
m4trace:configure.ac:15: -1- m4_pattern_allow([^ECHO_T$])
m4trace:configure.ac:15: -1- AC_SUBST([LIBS])
m4trace:configure.ac:15: -1- AC_SUBST_TRACE([LIBS])
m4trace:configure.ac:15: -1- m4_pattern_allow([^LIBS$])
m4trace:configure.ac:15: -1- AC_SUBST([build_alias])
m4trace:configure.ac:15: -1- AC_SUBST_TRACE([build_alias])
m4trace:configure.ac:15: -1- m4_pattern_allow([^build_alias$])
m4trace:configure.ac:15: -1- AC_SUBST([host_alias])
m4trace:configure.ac:15: -1- AC_SUBST_TRACE([host_alias])
m4trace:configure.ac:15: -1- m4_pattern_allow([^host_alias$])
m4trace:configure.ac:15: -1- AC_SUBST([target_alias])
m4trace:configure.ac:15: -1- AC_SUBST_TRACE([target_alias])
m4trace:configure.ac:15: -1- m4_pattern_allow([^target_alias$])
m4trace:configure.ac:17: -1- AM_INIT_AUTOMAKE
m4trace:configure.ac:17: -1- m4_pattern_allow([^AM_[A-Z]+FLAGS$])
m4trace:configure.ac:17: -1- AM_AUTOMAKE_VERSION([1.16.5])
m4trace:configure.ac:17: -1- AC_REQUIRE_AUX_FILE([install-sh])
m4trace:configure.ac:17: -1- AC_SUBST([INSTALL_PROGRAM])
m4trace:configure.ac:17: -1- AC_SUBST_TRACE([INSTALL_PROGRAM])
m4trace:configure.ac:17: -1- m4_pattern_allow([^INSTALL_PROGRAM$])
m4trace:configure.ac:17: -1- AC_SUBST([INSTALL_SCRIPT])
m4trace:configure.ac:17: -1- AC_SUBST_TRACE([INSTALL_SCRIPT])
m4trace:configure.ac:17: -1- m4_pattern_allow([^INSTALL_SCRIPT$])
m4trace:configure.ac:17: -1- AC_SUBST([INSTALL_DATA])
m4trace:configure.ac:17: -1- AC_SUBST_TRACE([INSTALL_DATA])
m4trace:configure.ac:17: -1- m4_pattern_allow([^INSTALL_DATA$])
m4trace:configure.ac:17: -1- AC_SUBST([am__isrc], [' -I$(srcdir)'])
m4trace:configure.ac:17: -1- AC_SUBST_TRACE([am__isrc])
m4trace:configure.ac:17: -1- m4_pattern_allow([^am__isrc$])
m4trace:configure.ac:17: -1- _AM_SUBST_NOTMAKE([am__isrc])
m4trace:configure.ac:17: -1- AC_SUBST([CYGPATH_W])
m4trace:configure.ac:17: -1- AC_SUBST_TRACE([CYGPATH_W])
m4trace:configure.ac:17: -1- m4_pattern_allow([^CYGPATH_W$])
m4trace:configure.ac:17: -1- AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])
m4trace:configure.ac:17: -1- AC_SUBST_TRACE([PACKAGE])
m4trace:configure.ac:17: -1- m4_pattern_allow([^PACKAGE$])
m4trace:configure.ac:17: -1- AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])
m4trace:configure.ac:17: -1- AC_SUBST_TRACE([VERSION])
m4trace:configure.ac:17: -1- m4_pattern_allow([^VERSION$])
m4trace:configure.ac:17: -1- AC_DEFINE_TRACE_LITERAL([PACKAGE])
m4trace:configure.ac:17: -1- m4_pattern_allow([^PACKAGE$])
m4trace:configure.ac:17: -1- AH_OUTPUT([PACKAGE], [/* Name of package */
@%:@undef PACKAGE])
m4trace:configure.ac:17: -1- AC_DEFINE_TRACE_LITERAL([VERSION])
m4trace:configure.ac:17: -1- m4_pattern_allow([^VERSION$])
m4trace:configure.ac:17: -1- AH_OUTPUT([VERSION], [/* Version number of package */
@%:@undef VERSION])
m4trace:configure.ac:17: -1- AC_REQUIRE_AUX_FILE([missing])
m4trace:configure.ac:17: -1- AC_SUBST([ACLOCAL])
m4trace:configure.ac:17: -1- AC_SUBST_TRACE([ACLOCAL])
m4trace:configure.ac:17: -1- m4_pattern_allow([^ACLOCAL$])
m4trace:configure.ac:17: -1- AC_SUBST([AUTOCONF])
m4trace:configure.ac:17: -1- AC_SUBST_TRACE([AUTOCONF])
m4trace:configure.ac:17: -1- m4_pattern_allow([^AUTOCONF$])
m4trace:configure.ac:17: -1- AC_SUBST([AUTOMAKE])
m4trace:configure.ac:17: -1- AC_SUBST_TRACE([AUTOMAKE])
m4trace:configure.ac:17: -1- m4_pattern_allow([^AUTOMAKE$])
m4trace:configure.ac:17: -1- AC_SUBST([AUTOHEADER])
m4trace:configure.ac:17: -1- AC_SUBST_TRACE([AUTOHEADER])
m4trace:configure.ac:17: -1- m4_pattern_allow([^AUTOHEADER$])
m4trace:configure.ac:17: -1- AC_SUBST([MAKEINFO])
m4trace:configure.ac:17: -1- AC_SUBST_TRACE([MAKEINFO])
m4trace:configure.ac:17: -1- m4_pattern_allow([^MAKEINFO$])
m4trace:configure.ac:17: -1- AC_SUBST([install_sh])
m4trace:configure.ac:17: -1- AC_SUBST_TRACE([install_sh])
m4trace:configure.ac:17: -1- m4_pattern_allow([^install_sh$])
m4trace:configure.ac:17: -1- AC_SUBST([STRIP])
m4trace:configure.ac:17: -1- AC_SUBST_TRACE([STRIP])
m4trace:configure.ac:17: -1- m4_pattern_allow([^STRIP$])
m4trace:configure.ac:17: -1- AC_SUBST([INSTALL_STRIP_PROGRAM])
m4trace:configure.ac:17: -1- AC_SUBST_TRACE([INSTALL_STRIP_PROGRAM])
m4trace:configure.ac:17: -1- m4_pattern_allow([^INSTALL_STRIP_PROGRAM$])
m4trace:configure.ac:17: -1- AC_REQUIRE_AUX_FILE([install-sh])
m4trace:configure.ac:17: -1- AC_SUBST([MKDIR_P])
m4trace:configure.ac:17: -1- AC_SUBST_TRACE([MKDIR_P])
m4trace:configure.ac:17: -1- m4_pattern_allow([^MKDIR_P$])
m4trace:configure.ac:17: -1- AC_SUBST([mkdir_p], ['$(MKDIR_P)'])
m4trace:configure.ac:17: -1- AC_SUBST_TRACE([mkdir_p])
m4trace:configure.ac:17: -1- m4_pattern_allow([^mkdir_p$])
m4trace:configure.ac:17: -1- AC_SUBST([AWK])
m4trace:configure.ac:17: -1- AC_SUBST_TRACE([AWK])
m4trace:configure.ac:17: -1- m4_pattern_allow([^AWK$])
m4trace:configure.ac:17: -1- AC_SUBST([SET_MAKE])
m4trace:configure.ac:17: -1- AC_SUBST_TRACE([SET_MAKE])
m4trace:configure.ac:17: -1- m4_pattern_allow([^SET_MAKE$])
m4trace:configure.ac:17: -1- AC_SUBST([am__leading_dot])
m4trace:configure.ac:17: -1- AC_SUBST_TRACE([am__leading_dot])
m4trace:configure.ac:17: -1- m4_pattern_allow([^am__leading_dot$])
m4trace:configure.ac:17: -1- AC_SUBST([AMTAR], ['$${TAR-tar}'])
m4trace:configure.ac:17: -1- AC_SUBST_TRACE([AMTAR])
m4trace:configure.ac:17: -1- m4_pattern_allow([^AMTAR$])
m4trace:configure.ac:17: -1- AC_SUBST([am__tar])
m4trace:configure.ac:17: -1- AC_SUBST_TRACE([am__tar])
m4trace:configure.ac:17: -1- m4_pattern_allow([^am__tar$])
m4trace:configure.ac:17: -1- AC_SUBST([am__untar])
m4trace:configure.ac:17: -1- AC_SUBST_TRACE([am__untar])
m4trace:configure.ac:17: -1- m4_pattern_allow([^am__untar$])
m4trace:configure.ac:17: -1- AC_SUBST([CTAGS])
m4trace:configure.ac:17: -1- AC_SUBST_TRACE([CTAGS])
m4trace:configure.ac:17: -1- m4_pattern_allow([^CTAGS$])
m4trace:configure.ac:17: -1- AC_SUBST([ETAGS])
m4trace:configure.ac:17: -1- AC_SUBST_TRACE([ETAGS])
m4trace:configure.ac:17: -1- m4_pattern_allow([^ETAGS$])
m4trace:configure.ac:17: -1- AC_SUBST([CSCOPE])
m4trace:configure.ac:17: -1- AC_SUBST_TRACE([CSCOPE])
m4trace:configure.ac:17: -1- m4_pattern_allow([^CSCOPE$])
m4trace:configure.ac:17: -1- AM_SILENT_RULES
m4trace:configure.ac:17: -1- AC_SUBST([AM_V])
m4trace:configure.ac:17: -1- AC_SUBST_TRACE([AM_V])
m4trace:configure.ac:17: -1- m4_pattern_allow([^AM_V$])
m4trace:configure.ac:17: -1- _AM_SUBST_NOTMAKE([AM_V])
m4trace:configure.ac:17: -1- AC_SUBST([AM_DEFAULT_V])
m4trace:configure.ac:17: -1- AC_SUBST_TRACE([AM_DEFAULT_V])
m4trace:configure.ac:17: -1- m4_pattern_allow([^AM_DEFAULT_V$])
m4trace:configure.ac:17: -1- _AM_SUBST_NOTMAKE([AM_DEFAULT_V])
m4trace:configure.ac:17: -1- AC_SUBST([AM_DEFAULT_VERBOSITY])
m4trace:configure.ac:17: -1- AC_SUBST_TRACE([AM_DEFAULT_VERBOSITY])
m4trace:configure.ac:17: -1- m4_pattern_allow([^AM_DEFAULT_VERBOSITY$])
m4trace:configure.ac:17: -1- AC_SUBST([AM_BACKSLASH])
m4trace:configure.ac:17: -1- AC_SUBST_TRACE([AM_BACKSLASH])
m4trace:configure.ac:17: -1- m4_pattern_allow([^AM_BACKSLASH$])
m4trace:configure.ac:17: -1- _AM_SUBST_NOTMAKE([AM_BACKSLASH])
m4trace:configure.ac:18: -1- AM_MAINTAINER_MODE
m4trace:configure.ac:18: -1- AM_CONDITIONAL([MAINTAINER_MODE], [test $USE_MAINTAINER_MODE = yes])
m4trace:configure.ac:18: -1- AC_SUBST([MAINTAINER_MODE_TRUE])
m4trace:configure.ac:18: -1- AC_SUBST_TRACE([MAINTAINER_MODE_TRUE])
m4trace:configure.ac:18: -1- m4_pattern_allow([^MAINTAINER_MODE_TRUE$])
m4trace:configure.ac:18: -1- AC_SUBST([MAINTAINER_MODE_FALSE])
m4trace:configure.ac:18: -1- AC_SUBST_TRACE([MAINTAINER_MODE_FALSE])
m4trace:configure.ac:18: -1- m4_pattern_allow([^MAINTAINER_MODE_FALSE$])
m4trace:configure.ac:18: -1- _AM_SUBST_NOTMAKE([MAINTAINER_MODE_TRUE])
m4trace:configure.ac:18: -1- _AM_SUBST_NOTMAKE([MAINTAINER_MODE_FALSE])
m4trace:configure.ac:18: -1- AC_SUBST([MAINT])
m4trace:configure.ac:18: -1- AC_SUBST_TRACE([MAINT])
m4trace:configure.ac:18: -1- m4_pattern_allow([^MAINT$])
m4trace:configure.ac:35: -1- AC_SUBST([CC])
m4trace:configure.ac:35: -1- AC_SUBST_TRACE([CC])
m4trace:configure.ac:35: -1- m4_pattern_allow([^CC$])
m4trace:configure.ac:35: -1- AC_SUBST([CFLAGS])
m4trace:configure.ac:35: -1- AC_SUBST_TRACE([CFLAGS])
m4trace:configure.ac:35: -1- m4_pattern_allow([^CFLAGS$])
m4trace:configure.ac:35: -1- AC_SUBST([LDFLAGS])
m4trace:configure.ac:35: -1- AC_SUBST_TRACE([LDFLAGS])
m4trace:configure.ac:35: -1- m4_pattern_allow([^LDFLAGS$])
m4trace:configure.ac:35: -1- AC_SUBST([LIBS])
m4trace:configure.ac:35: -1- AC_SUBST_TRACE([LIBS])
m4trace:configure.ac:35: -1- m4_pattern_allow([^LIBS$])
m4trace:configure.ac:35: -1- AC_SUBST([CPPFLAGS])
m4trace:configure.ac:35: -1- AC_SUBST_TRACE([CPPFLAGS])
m4trace:configure.ac:35: -1- m4_pattern_allow([^CPPFLAGS$])
m4trace:configure.ac:35: -1- AC_SUBST([CC])
m4trace:configure.ac:35: -1- AC_SUBST_TRACE([CC])
m4trace:configure.ac:35: -1- m4_pattern_allow([^CC$])
m4trace:configure.ac:35: -1- AC_SUBST([CC])
m4trace:configure.ac:35: -1- AC_SUBST_TRACE([CC])
m4trace:configure.ac:35: -1- m4_pattern_allow([^CC$])
m4trace:configure.ac:35: -1- AC_SUBST([CC])
m4trace:configure.ac:35: -1- AC_SUBST_TRACE([CC])
m4trace:configure.ac:35: -1- m4_pattern_allow([^CC$])
m4trace:configure.ac:35: -1- AC_SUBST([CC])
m4trace:configure.ac:35: -1- AC_SUBST_TRACE([CC])
m4trace:configure.ac:35: -1- m4_pattern_allow([^CC$])
m4trace:configure.ac:35: -1- AC_SUBST([ac_ct_CC])
m4trace:configure.ac:35: -1- AC_SUBST_TRACE([ac_ct_CC])
m4trace:configure.ac:35: -1- m4_pattern_allow([^ac_ct_CC$])
m4trace:configure.ac:35: -1- AC_SUBST([CC])
m4trace:configure.ac:35: -1- AC_SUBST_TRACE([CC])
m4trace:configure.ac:35: -1- m4_pattern_allow([^CC$])
m4trace:configure.ac:35: -1- AC_SUBST([EXEEXT], [$ac_cv_exeext])
m4trace:configure.ac:35: -1- AC_SUBST_TRACE([EXEEXT])
m4trace:configure.ac:35: -1- m4_pattern_allow([^EXEEXT$])
m4trace:configure.ac:35: -1- AC_SUBST([OBJEXT], [$ac_cv_objext])
m4trace:configure.ac:35: -1- AC_SUBST_TRACE([OBJEXT])
m4trace:configure.ac:35: -1- m4_pattern_allow([^OBJEXT$])
m4trace:configure.ac:35: -1- AC_REQUIRE_AUX_FILE([compile])
m4trace:configure.ac:35: -1- AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])
m4trace:configure.ac:35: -1- AC_SUBST_TRACE([DEPDIR])
m4trace:configure.ac:35: -1- m4_pattern_allow([^DEPDIR$])
m4trace:configure.ac:35: -1- AC_SUBST([am__include])
m4trace:configure.ac:35: -1- AC_SUBST_TRACE([am__include])
m4trace:configure.ac:35: -1- m4_pattern_allow([^am__include$])
m4trace:configure.ac:35: -1- AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno])
m4trace:configure.ac:35: -1- AC_SUBST([AMDEP_TRUE])
m4trace:configure.ac:35: -1- AC_SUBST_TRACE([AMDEP_TRUE])
m4trace:configure.ac:35: -1- m4_pattern_allow([^AMDEP_TRUE$])
m4trace:configure.ac:35: -1- AC_SUBST([AMDEP_FALSE])
m4trace:configure.ac:35: -1- AC_SUBST_TRACE([AMDEP_FALSE])
m4trace:configure.ac:35: -1- m4_pattern_allow([^AMDEP_FALSE$])
m4trace:configure.ac:35: -1- _AM_SUBST_NOTMAKE([AMDEP_TRUE])
m4trace:configure.ac:35: -1- _AM_SUBST_NOTMAKE([AMDEP_FALSE])
m4trace:configure.ac:35: -1- AC_SUBST([AMDEPBACKSLASH])
m4trace:configure.ac:35: -1- AC_SUBST_TRACE([AMDEPBACKSLASH])
m4trace:configure.ac:35: -1- m4_pattern_allow([^AMDEPBACKSLASH$])
m4trace:configure.ac:35: -1- _AM_SUBST_NOTMAKE([AMDEPBACKSLASH])
m4trace:configure.ac:35: -1- AC_SUBST([am__nodep])
m4trace:configure.ac:35: -1- AC_SUBST_TRACE([am__nodep])
m4trace:configure.ac:35: -1- m4_pattern_allow([^am__nodep$])
m4trace:configure.ac:35: -1- _AM_SUBST_NOTMAKE([am__nodep])
m4trace:configure.ac:35: -1- AC_SUBST([CCDEPMODE], [depmode=$am_cv_CC_dependencies_compiler_type])
m4trace:configure.ac:35: -1- AC_SUBST_TRACE([CCDEPMODE])
m4trace:configure.ac:35: -1- m4_pattern_allow([^CCDEPMODE$])
m4trace:configure.ac:35: -1- AM_CONDITIONAL([am__fastdepCC], [
test "x$enable_dependency_tracking" != xno \
&& test "$am_cv_CC_dependencies_compiler_type" = gcc3])
m4trace:configure.ac:35: -1- AC_SUBST([am__fastdepCC_TRUE])
m4trace:configure.ac:35: -1- AC_SUBST_TRACE([am__fastdepCC_TRUE])
m4trace:configure.ac:35: -1- m4_pattern_allow([^am__fastdepCC_TRUE$])
m4trace:configure.ac:35: -1- AC_SUBST([am__fastdepCC_FALSE])
m4trace:configure.ac:35: -1- AC_SUBST_TRACE([am__fastdepCC_FALSE])
m4trace:configure.ac:35: -1- m4_pattern_allow([^am__fastdepCC_FALSE$])
m4trace:configure.ac:35: -1- _AM_SUBST_NOTMAKE([am__fastdepCC_TRUE])
m4trace:configure.ac:35: -1- _AM_SUBST_NOTMAKE([am__fastdepCC_FALSE])
m4trace:configure.ac:36: -1- AC_SUBST([CXX])
m4trace:configure.ac:36: -1- AC_SUBST_TRACE([CXX])
m4trace:configure.ac:36: -1- m4_pattern_allow([^CXX$])
m4trace:configure.ac:36: -1- AC_SUBST([CXXFLAGS])
m4trace:configure.ac:36: -1- AC_SUBST_TRACE([CXXFLAGS])
m4trace:configure.ac:36: -1- m4_pattern_allow([^CXXFLAGS$])
m4trace:configure.ac:36: -1- AC_SUBST([LDFLAGS])
m4trace:configure.ac:36: -1- AC_SUBST_TRACE([LDFLAGS])
m4trace:configure.ac:36: -1- m4_pattern_allow([^LDFLAGS$])
m4trace:configure.ac:36: -1- AC_SUBST([LIBS])
m4trace:configure.ac:36: -1- AC_SUBST_TRACE([LIBS])
m4trace:configure.ac:36: -1- m4_pattern_allow([^LIBS$])
m4trace:configure.ac:36: -1- AC_SUBST([CPPFLAGS])
m4trace:configure.ac:36: -1- AC_SUBST_TRACE([CPPFLAGS])
m4trace:configure.ac:36: -1- m4_pattern_allow([^CPPFLAGS$])
m4trace:configure.ac:36: -1- AC_SUBST([CXX])
m4trace:configure.ac:36: -1- AC_SUBST_TRACE([CXX])
m4trace:configure.ac:36: -1- m4_pattern_allow([^CXX$])
m4trace:configure.ac:36: -1- AC_SUBST([ac_ct_CXX])
m4trace:configure.ac:36: -1- AC_SUBST_TRACE([ac_ct_CXX])
m4trace:configure.ac:36: -1- m4_pattern_allow([^ac_ct_CXX$])
m4trace:configure.ac:36: -1- AC_SUBST([CXXDEPMODE], [depmode=$am_cv_CXX_dependencies_compiler_type])
m4trace:configure.ac:36: -1- AC_SUBST_TRACE([CXXDEPMODE])
m4trace:configure.ac:36: -1- m4_pattern_allow([^CXXDEPMODE$])
m4trace:configure.ac:36: -1- AM_CONDITIONAL([am__fastdepCXX], [
test "x$enable_dependency_tracking" != xno \
&& test "$am_cv_CXX_dependencies_compiler_type" = gcc3])
m4trace:configure.ac:36: -1- AC_SUBST([am__fastdepCXX_TRUE])
m4trace:configure.ac:36: -1- AC_SUBST_TRACE([am__fastdepCXX_TRUE])
m4trace:configure.ac:36: -1- m4_pattern_allow([^am__fastdepCXX_TRUE$])
m4trace:configure.ac:36: -1- AC_SUBST([am__fastdepCXX_FALSE])
m4trace:configure.ac:36: -1- AC_SUBST_TRACE([am__fastdepCXX_FALSE])
m4trace:configure.ac:36: -1- m4_pattern_allow([^am__fastdepCXX_FALSE$])
m4trace:configure.ac:36: -1- _AM_SUBST_NOTMAKE([am__fastdepCXX_TRUE])
m4trace:configure.ac:36: -1- _AM_SUBST_NOTMAKE([am__fastdepCXX_FALSE])
m4trace:configure.ac:37: -1- _m4_warn([obsolete], [The macro `AC_LIBTOOL_WIN32_DLL' is obsolete.
You should run autoupdate.], [aclocal.m4:8510: AC_LIBTOOL_WIN32_DLL is expanded from...
configure.ac:37: the top level])
m4trace:configure.ac:37: -1- AC_CANONICAL_HOST
m4trace:configure.ac:37: -1- AC_CANONICAL_BUILD
m4trace:configure.ac:37: -1- AC_REQUIRE_AUX_FILE([config.sub])
m4trace:configure.ac:37: -1- AC_REQUIRE_AUX_FILE([config.guess])
m4trace:configure.ac:37: -1- AC_SUBST([build], [$ac_cv_build])
m4trace:configure.ac:37: -1- AC_SUBST_TRACE([build])
m4trace:configure.ac:37: -1- m4_pattern_allow([^build$])
m4trace:configure.ac:37: -1- AC_SUBST([build_cpu], [$[1]])
m4trace:configure.ac:37: -1- AC_SUBST_TRACE([build_cpu])
m4trace:configure.ac:37: -1- m4_pattern_allow([^build_cpu$])
m4trace:configure.ac:37: -1- AC_SUBST([build_vendor], [$[2]])
m4trace:configure.ac:37: -1- AC_SUBST_TRACE([build_vendor])
m4trace:configure.ac:37: -1- m4_pattern_allow([^build_vendor$])
m4trace:configure.ac:37: -1- AC_SUBST([build_os])
m4trace:configure.ac:37: -1- AC_SUBST_TRACE([build_os])
m4trace:configure.ac:37: -1- m4_pattern_allow([^build_os$])
m4trace:configure.ac:37: -1- AC_SUBST([host], [$ac_cv_host])
m4trace:configure.ac:37: -1- AC_SUBST_TRACE([host])
m4trace:configure.ac:37: -1- m4_pattern_allow([^host$])
m4trace:configure.ac:37: -1- AC_SUBST([host_cpu], [$[1]])
m4trace:configure.ac:37: -1- AC_SUBST_TRACE([host_cpu])
m4trace:configure.ac:37: -1- m4_pattern_allow([^host_cpu$])
m4trace:configure.ac:37: -1- AC_SUBST([host_vendor], [$[2]])
m4trace:configure.ac:37: -1- AC_SUBST_TRACE([host_vendor])
m4trace:configure.ac:37: -1- m4_pattern_allow([^host_vendor$])
m4trace:configure.ac:37: -1- AC_SUBST([host_os])
m4trace:configure.ac:37: -1- AC_SUBST_TRACE([host_os])
m4trace:configure.ac:37: -1- m4_pattern_allow([^host_os$])
m4trace:configure.ac:37: -1- AC_SUBST([AS])
m4trace:configure.ac:37: -1- AC_SUBST_TRACE([AS])
m4trace:configure.ac:37: -1- m4_pattern_allow([^AS$])
m4trace:configure.ac:37: -1- AC_SUBST([DLLTOOL])
m4trace:configure.ac:37: -1- AC_SUBST_TRACE([DLLTOOL])
m4trace:configure.ac:37: -1- m4_pattern_allow([^DLLTOOL$])
m4trace:configure.ac:37: -1- AC_SUBST([OBJDUMP])
m4trace:configure.ac:37: -1- AC_SUBST_TRACE([OBJDUMP])
m4trace:configure.ac:37: -1- m4_pattern_allow([^OBJDUMP$])
m4trace:configure.ac:37: -1- _m4_warn([obsolete], [AC_LIBTOOL_WIN32_DLL: Remove this warning and the call to _LT_SET_OPTION when you
put the 'win32-dll' option into LT_INIT's first parameter.], [./lib/autoconf/general.m4:2434: AC_DIAGNOSE is expanded from...
aclocal.m4:8510: AC_LIBTOOL_WIN32_DLL is expanded from...
configure.ac:37: the top level])
m4trace:configure.ac:38: -1- AC_PROG_LIBTOOL
m4trace:configure.ac:38: -1- _m4_warn([obsolete], [The macro `AC_PROG_LIBTOOL' is obsolete.
You should run autoupdate.], [aclocal.m4:121: AC_PROG_LIBTOOL is expanded from...
configure.ac:38: the top level])
m4trace:configure.ac:38: -1- LT_INIT
m4trace:configure.ac:38: -1- m4_pattern_forbid([^_?LT_[A-Z_]+$])
m4trace:configure.ac:38: -1- m4_pattern_allow([^(_LT_EOF|LT_DLGLOBAL|LT_DLLAZY_OR_NOW|LT_MULTI_MODULE)$])
m4trace:configure.ac:38: -1- AC_REQUIRE_AUX_FILE([ltmain.sh])
m4trace:configure.ac:38: -1- AC_SUBST([LIBTOOL])
m4trace:configure.ac:38: -1- AC_SUBST_TRACE([LIBTOOL])
m4trace:configure.ac:38: -1- m4_pattern_allow([^LIBTOOL$])
m4trace:configure.ac:38: -1- AC_SUBST([SED])
m4trace:configure.ac:38: -1- AC_SUBST_TRACE([SED])
m4trace:configure.ac:38: -1- m4_pattern_allow([^SED$])
m4trace:configure.ac:38: -1- AC_SUBST([GREP])
m4trace:configure.ac:38: -1- AC_SUBST_TRACE([GREP])
m4trace:configure.ac:38: -1- m4_pattern_allow([^GREP$])
m4trace:configure.ac:38: -1- AC_SUBST([EGREP])
m4trace:configure.ac:38: -1- AC_SUBST_TRACE([EGREP])
m4trace:configure.ac:38: -1- m4_pattern_allow([^EGREP$])
m4trace:configure.ac:38: -1- AC_SUBST([FGREP])
m4trace:configure.ac:38: -1- AC_SUBST_TRACE([FGREP])
m4trace:configure.ac:38: -1- m4_pattern_allow([^FGREP$])
m4trace:configure.ac:38: -1- AC_SUBST([GREP])
m4trace:configure.ac:38: -1- AC_SUBST_TRACE([GREP])
m4trace:configure.ac:38: -1- m4_pattern_allow([^GREP$])
m4trace:configure.ac:38: -1- AC_SUBST([LD])
m4trace:configure.ac:38: -1- AC_SUBST_TRACE([LD])
m4trace:configure.ac:38: -1- m4_pattern_allow([^LD$])
m4trace:configure.ac:38: -1- AC_SUBST([DUMPBIN])
m4trace:configure.ac:38: -1- AC_SUBST_TRACE([DUMPBIN])
m4trace:configure.ac:38: -1- m4_pattern_allow([^DUMPBIN$])
m4trace:configure.ac:38: -1- AC_SUBST([ac_ct_DUMPBIN])
m4trace:configure.ac:38: -1- AC_SUBST_TRACE([ac_ct_DUMPBIN])
m4trace:configure.ac:38: -1- m4_pattern_allow([^ac_ct_DUMPBIN$])
m4trace:configure.ac:38: -1- AC_SUBST([DUMPBIN])
m4trace:configure.ac:38: -1- AC_SUBST_TRACE([DUMPBIN])
m4trace:configure.ac:38: -1- m4_pattern_allow([^DUMPBIN$])
m4trace:configure.ac:38: -1- AC_SUBST([NM])
m4trace:configure.ac:38: -1- AC_SUBST_TRACE([NM])
m4trace:configure.ac:38: -1- m4_pattern_allow([^NM$])
m4trace:configure.ac:38: -1- AC_SUBST([LN_S], [$as_ln_s])
m4trace:configure.ac:38: -1- AC_SUBST_TRACE([LN_S])
m4trace:configure.ac:38: -1- m4_pattern_allow([^LN_S$])
m4trace:configure.ac:38: -1- AC_SUBST([OBJDUMP])
m4trace:configure.ac:38: -1- AC_SUBST_TRACE([OBJDUMP])
m4trace:configure.ac:38: -1- m4_pattern_allow([^OBJDUMP$])
m4trace:configure.ac:38: -1- AC_SUBST([OBJDUMP])
m4trace:configure.ac:38: -1- AC_SUBST_TRACE([OBJDUMP])
m4trace:configure.ac:38: -1- m4_pattern_allow([^OBJDUMP$])
m4trace:configure.ac:38: -1- AC_SUBST([DLLTOOL])
m4trace:configure.ac:38: -1- AC_SUBST_TRACE([DLLTOOL])
m4trace:configure.ac:38: -1- m4_pattern_allow([^DLLTOOL$])
m4trace:configure.ac:38: -1- AC_SUBST([DLLTOOL])
m4trace:configure.ac:38: -1- AC_SUBST_TRACE([DLLTOOL])
m4trace:configure.ac:38: -1- m4_pattern_allow([^DLLTOOL$])
m4trace:configure.ac:38: -1- AC_SUBST([AR])
m4trace:configure.ac:38: -1- AC_SUBST_TRACE([AR])
m4trace:configure.ac:38: -1- m4_pattern_allow([^AR$])
m4trace:configure.ac:38: -1- AC_SUBST([ac_ct_AR])
m4trace:configure.ac:38: -1- AC_SUBST_TRACE([ac_ct_AR])
m4trace:configure.ac:38: -1- m4_pattern_allow([^ac_ct_AR$])
m4trace:configure.ac:38: -1- AC_SUBST([STRIP])
m4trace:configure.ac:38: -1- AC_SUBST_TRACE([STRIP])
m4trace:configure.ac:38: -1- m4_pattern_allow([^STRIP$])
m4trace:configure.ac:38: -1- AC_SUBST([RANLIB])
m4trace:configure.ac:38: -1- AC_SUBST_TRACE([RANLIB])
m4trace:configure.ac:38: -1- m4_pattern_allow([^RANLIB$])
m4trace:configure.ac:38: -1- m4_pattern_allow([LT_OBJDIR])
m4trace:configure.ac:38: -1- AC_DEFINE_TRACE_LITERAL([LT_OBJDIR])
m4trace:configure.ac:38: -1- m4_pattern_allow([^LT_OBJDIR$])
m4trace:configure.ac:38: -1- AH_OUTPUT([LT_OBJDIR], [/* Define to the sub-directory where libtool stores uninstalled libraries. */
@%:@undef LT_OBJDIR])
m4trace:configure.ac:38: -1- LT_SUPPORTED_TAG([CC])
m4trace:configure.ac:38: -1- AC_SUBST([MANIFEST_TOOL])
m4trace:configure.ac:38: -1- AC_SUBST_TRACE([MANIFEST_TOOL])
m4trace:configure.ac:38: -1- m4_pattern_allow([^MANIFEST_TOOL$])
m4trace:configure.ac:38: -1- AC_SUBST([DSYMUTIL])
m4trace:configure.ac:38: -1- AC_SUBST_TRACE([DSYMUTIL])
m4trace:configure.ac:38: -1- m4_pattern_allow([^DSYMUTIL$])
m4trace:configure.ac:38: -1- AC_SUBST([NMEDIT])
m4trace:configure.ac:38: -1- AC_SUBST_TRACE([NMEDIT])
m4trace:configure.ac:38: -1- m4_pattern_allow([^NMEDIT$])
m4trace:configure.ac:38: -1- AC_SUBST([LIPO])
m4trace:configure.ac:38: -1- AC_SUBST_TRACE([LIPO])
m4trace:configure.ac:38: -1- m4_pattern_allow([^LIPO$])
m4trace:configure.ac:38: -1- AC_SUBST([OTOOL])
m4trace:configure.ac:38: -1- AC_SUBST_TRACE([OTOOL])
m4trace:configure.ac:38: -1- m4_pattern_allow([^OTOOL$])
m4trace:configure.ac:38: -1- AC_SUBST([OTOOL64])
m4trace:configure.ac:38: -1- AC_SUBST_TRACE([OTOOL64])
m4trace:configure.ac:38: -1- m4_pattern_allow([^OTOOL64$])
m4trace:configure.ac:38: -1- AC_SUBST([LT_SYS_LIBRARY_PATH])
m4trace:configure.ac:38: -1- AC_SUBST_TRACE([LT_SYS_LIBRARY_PATH])
m4trace:configure.ac:38: -1- m4_pattern_allow([^LT_SYS_LIBRARY_PATH$])
m4trace:configure.ac:38: -1- AH_OUTPUT([HAVE_DLFCN_H], [/* Define to 1 if you have the <dlfcn.h> header file. */
@%:@undef HAVE_DLFCN_H])
m4trace:configure.ac:38: -1- AH_OUTPUT([HAVE_STDIO_H], [/* Define to 1 if you have the <stdio.h> header file. */
@%:@undef HAVE_STDIO_H])
m4trace:configure.ac:38: -1- AH_OUTPUT([HAVE_STDLIB_H], [/* Define to 1 if you have the <stdlib.h> header file. */
@%:@undef HAVE_STDLIB_H])
m4trace:configure.ac:38: -1- AH_OUTPUT([HAVE_STRING_H], [/* Define to 1 if you have the <string.h> header file. */
@%:@undef HAVE_STRING_H])
m4trace:configure.ac:38: -1- AH_OUTPUT([HAVE_INTTYPES_H], [/* Define to 1 if you have the <inttypes.h> header file. */
@%:@undef HAVE_INTTYPES_H])
m4trace:configure.ac:38: -1- AH_OUTPUT([HAVE_STDINT_H], [/* Define to 1 if you have the <stdint.h> header file. */
@%:@undef HAVE_STDINT_H])
m4trace:configure.ac:38: -1- AH_OUTPUT([HAVE_STRINGS_H], [/* Define to 1 if you have the <strings.h> header file. */
@%:@undef HAVE_STRINGS_H])
m4trace:configure.ac:38: -1- AH_OUTPUT([HAVE_SYS_STAT_H], [/* Define to 1 if you have the <sys/stat.h> header file. */
@%:@undef HAVE_SYS_STAT_H])
m4trace:configure.ac:38: -1- AH_OUTPUT([HAVE_SYS_TYPES_H], [/* Define to 1 if you have the <sys/types.h> header file. */
@%:@undef HAVE_SYS_TYPES_H])
m4trace:configure.ac:38: -1- AH_OUTPUT([HAVE_UNISTD_H], [/* Define to 1 if you have the <unistd.h> header file. */
@%:@undef HAVE_UNISTD_H])
m4trace:configure.ac:38: -1- AC_DEFINE_TRACE_LITERAL([STDC_HEADERS])
m4trace:configure.ac:38: -1- m4_pattern_allow([^STDC_HEADERS$])
m4trace:configure.ac:38: -1- AH_OUTPUT([STDC_HEADERS], [/* Define to 1 if all of the C90 standard headers exist (not just the ones
required in a freestanding environment). This macro is provided for
backward compatibility; new code need not use it. */
@%:@undef STDC_HEADERS])
m4trace:configure.ac:38: -1- AC_DEFINE_TRACE_LITERAL([HAVE_DLFCN_H])
m4trace:configure.ac:38: -1- m4_pattern_allow([^HAVE_DLFCN_H$])
m4trace:configure.ac:38: -1- LT_SUPPORTED_TAG([CXX])
m4trace:configure.ac:38: -1- AC_SUBST([CXXCPP])
m4trace:configure.ac:38: -1- AC_SUBST_TRACE([CXXCPP])
m4trace:configure.ac:38: -1- m4_pattern_allow([^CXXCPP$])
m4trace:configure.ac:38: -1- AC_SUBST([CPPFLAGS])
m4trace:configure.ac:38: -1- AC_SUBST_TRACE([CPPFLAGS])
m4trace:configure.ac:38: -1- m4_pattern_allow([^CPPFLAGS$])
m4trace:configure.ac:38: -1- AC_SUBST([CXXCPP])
m4trace:configure.ac:38: -1- AC_SUBST_TRACE([CXXCPP])
m4trace:configure.ac:38: -1- m4_pattern_allow([^CXXCPP$])
m4trace:configure.ac:38: -1- AC_SUBST([LD])
m4trace:configure.ac:38: -1- AC_SUBST_TRACE([LD])
m4trace:configure.ac:38: -1- m4_pattern_allow([^LD$])
m4trace:configure.ac:38: -1- AC_SUBST([LT_SYS_LIBRARY_PATH])
m4trace:configure.ac:38: -1- AC_SUBST_TRACE([LT_SYS_LIBRARY_PATH])
m4trace:configure.ac:38: -1- m4_pattern_allow([^LT_SYS_LIBRARY_PATH$])
m4trace:configure.ac:41: -1- AC_SUBST([DEFAULT_INCLUDES])
m4trace:configure.ac:41: -1- AC_SUBST_TRACE([DEFAULT_INCLUDES])
m4trace:configure.ac:41: -1- m4_pattern_allow([^DEFAULT_INCLUDES$])
m4trace:configure.ac:42: -1- AC_SUBST([PORTAUDIO_ROOT])
m4trace:configure.ac:42: -1- AC_SUBST_TRACE([PORTAUDIO_ROOT])
m4trace:configure.ac:42: -1- m4_pattern_allow([^PORTAUDIO_ROOT$])
m4trace:configure.ac:43: -1- AC_SUBST([CXXFLAGS])
m4trace:configure.ac:43: -1- AC_SUBST_TRACE([CXXFLAGS])
m4trace:configure.ac:43: -1- m4_pattern_allow([^CXXFLAGS$])
m4trace:configure.ac:44: -1- AC_SUBST([LT_VERSION_INFO])
m4trace:configure.ac:44: -1- AC_SUBST_TRACE([LT_VERSION_INFO])
m4trace:configure.ac:44: -1- m4_pattern_allow([^LT_VERSION_INFO$])
m4trace:configure.ac:46: -1- AC_CONFIG_FILES([
Makefile
lib/Makefile
include/Makefile
bin/Makefile
doc/Makefile
portaudiocpp.pc
])
m4trace:configure.ac:54: -1- AC_SUBST([LIB@&t@OBJS], [$ac_libobjs])
m4trace:configure.ac:54: -1- AC_SUBST_TRACE([LIB@&t@OBJS])
m4trace:configure.ac:54: -1- m4_pattern_allow([^LIB@&t@OBJS$])
m4trace:configure.ac:54: -1- AC_SUBST([LTLIBOBJS], [$ac_ltlibobjs])
m4trace:configure.ac:54: -1- AC_SUBST_TRACE([LTLIBOBJS])
m4trace:configure.ac:54: -1- m4_pattern_allow([^LTLIBOBJS$])
m4trace:configure.ac:54: -1- AM_CONDITIONAL([am__EXEEXT], [test -n "$EXEEXT"])
m4trace:configure.ac:54: -1- AC_SUBST([am__EXEEXT_TRUE])
m4trace:configure.ac:54: -1- AC_SUBST_TRACE([am__EXEEXT_TRUE])
m4trace:configure.ac:54: -1- m4_pattern_allow([^am__EXEEXT_TRUE$])
m4trace:configure.ac:54: -1- AC_SUBST([am__EXEEXT_FALSE])
m4trace:configure.ac:54: -1- AC_SUBST_TRACE([am__EXEEXT_FALSE])
m4trace:configure.ac:54: -1- m4_pattern_allow([^am__EXEEXT_FALSE$])
m4trace:configure.ac:54: -1- _AM_SUBST_NOTMAKE([am__EXEEXT_TRUE])
m4trace:configure.ac:54: -1- _AM_SUBST_NOTMAKE([am__EXEEXT_FALSE])
m4trace:configure.ac:54: -1- AC_SUBST_TRACE([top_builddir])
m4trace:configure.ac:54: -1- AC_SUBST_TRACE([top_build_prefix])
m4trace:configure.ac:54: -1- AC_SUBST_TRACE([srcdir])
m4trace:configure.ac:54: -1- AC_SUBST_TRACE([abs_srcdir])
m4trace:configure.ac:54: -1- AC_SUBST_TRACE([top_srcdir])
m4trace:configure.ac:54: -1- AC_SUBST_TRACE([abs_top_srcdir])
m4trace:configure.ac:54: -1- AC_SUBST_TRACE([builddir])
m4trace:configure.ac:54: -1- AC_SUBST_TRACE([abs_builddir])
m4trace:configure.ac:54: -1- AC_SUBST_TRACE([abs_top_builddir])
m4trace:configure.ac:54: -1- AC_SUBST_TRACE([INSTALL])
m4trace:configure.ac:54: -1- AC_SUBST_TRACE([MKDIR_P])
m4trace:configure.ac:54: -1- AC_REQUIRE_AUX_FILE([ltmain.sh])

View file

@ -0,0 +1,618 @@
m4trace:aclocal.m4:9759: -1- AC_SUBST([am__quote])
m4trace:aclocal.m4:9759: -1- AC_SUBST_TRACE([am__quote])
m4trace:aclocal.m4:9759: -1- m4_pattern_allow([^am__quote$])
m4trace:configure.ac:15: -1- AC_INIT([PortAudioCpp], [12])
m4trace:configure.ac:15: -1- m4_pattern_forbid([^_?A[CHUM]_])
m4trace:configure.ac:15: -1- m4_pattern_forbid([_AC_])
m4trace:configure.ac:15: -1- m4_pattern_forbid([^LIBOBJS$], [do not use LIBOBJS directly, use AC_LIBOBJ (see section `AC_LIBOBJ vs LIBOBJS'])
m4trace:configure.ac:15: -1- m4_pattern_allow([^AS_FLAGS$])
m4trace:configure.ac:15: -1- m4_pattern_forbid([^_?m4_])
m4trace:configure.ac:15: -1- m4_pattern_forbid([^dnl$])
m4trace:configure.ac:15: -1- m4_pattern_forbid([^_?AS_])
m4trace:configure.ac:15: -1- AC_SUBST([SHELL])
m4trace:configure.ac:15: -1- AC_SUBST_TRACE([SHELL])
m4trace:configure.ac:15: -1- m4_pattern_allow([^SHELL$])
m4trace:configure.ac:15: -1- AC_SUBST([PATH_SEPARATOR])
m4trace:configure.ac:15: -1- AC_SUBST_TRACE([PATH_SEPARATOR])
m4trace:configure.ac:15: -1- m4_pattern_allow([^PATH_SEPARATOR$])
m4trace:configure.ac:15: -1- AC_SUBST([PACKAGE_NAME], [m4_ifdef([AC_PACKAGE_NAME], ['AC_PACKAGE_NAME'])])
m4trace:configure.ac:15: -1- AC_SUBST_TRACE([PACKAGE_NAME])
m4trace:configure.ac:15: -1- m4_pattern_allow([^PACKAGE_NAME$])
m4trace:configure.ac:15: -1- AC_SUBST([PACKAGE_TARNAME], [m4_ifdef([AC_PACKAGE_TARNAME], ['AC_PACKAGE_TARNAME'])])
m4trace:configure.ac:15: -1- AC_SUBST_TRACE([PACKAGE_TARNAME])
m4trace:configure.ac:15: -1- m4_pattern_allow([^PACKAGE_TARNAME$])
m4trace:configure.ac:15: -1- AC_SUBST([PACKAGE_VERSION], [m4_ifdef([AC_PACKAGE_VERSION], ['AC_PACKAGE_VERSION'])])
m4trace:configure.ac:15: -1- AC_SUBST_TRACE([PACKAGE_VERSION])
m4trace:configure.ac:15: -1- m4_pattern_allow([^PACKAGE_VERSION$])
m4trace:configure.ac:15: -1- AC_SUBST([PACKAGE_STRING], [m4_ifdef([AC_PACKAGE_STRING], ['AC_PACKAGE_STRING'])])
m4trace:configure.ac:15: -1- AC_SUBST_TRACE([PACKAGE_STRING])
m4trace:configure.ac:15: -1- m4_pattern_allow([^PACKAGE_STRING$])
m4trace:configure.ac:15: -1- AC_SUBST([PACKAGE_BUGREPORT], [m4_ifdef([AC_PACKAGE_BUGREPORT], ['AC_PACKAGE_BUGREPORT'])])
m4trace:configure.ac:15: -1- AC_SUBST_TRACE([PACKAGE_BUGREPORT])
m4trace:configure.ac:15: -1- m4_pattern_allow([^PACKAGE_BUGREPORT$])
m4trace:configure.ac:15: -1- AC_SUBST([PACKAGE_URL], [m4_ifdef([AC_PACKAGE_URL], ['AC_PACKAGE_URL'])])
m4trace:configure.ac:15: -1- AC_SUBST_TRACE([PACKAGE_URL])
m4trace:configure.ac:15: -1- m4_pattern_allow([^PACKAGE_URL$])
m4trace:configure.ac:15: -1- AC_SUBST([exec_prefix], [NONE])
m4trace:configure.ac:15: -1- AC_SUBST_TRACE([exec_prefix])
m4trace:configure.ac:15: -1- m4_pattern_allow([^exec_prefix$])
m4trace:configure.ac:15: -1- AC_SUBST([prefix], [NONE])
m4trace:configure.ac:15: -1- AC_SUBST_TRACE([prefix])
m4trace:configure.ac:15: -1- m4_pattern_allow([^prefix$])
m4trace:configure.ac:15: -1- AC_SUBST([program_transform_name], [s,x,x,])
m4trace:configure.ac:15: -1- AC_SUBST_TRACE([program_transform_name])
m4trace:configure.ac:15: -1- m4_pattern_allow([^program_transform_name$])
m4trace:configure.ac:15: -1- AC_SUBST([bindir], ['${exec_prefix}/bin'])
m4trace:configure.ac:15: -1- AC_SUBST_TRACE([bindir])
m4trace:configure.ac:15: -1- m4_pattern_allow([^bindir$])
m4trace:configure.ac:15: -1- AC_SUBST([sbindir], ['${exec_prefix}/sbin'])
m4trace:configure.ac:15: -1- AC_SUBST_TRACE([sbindir])
m4trace:configure.ac:15: -1- m4_pattern_allow([^sbindir$])
m4trace:configure.ac:15: -1- AC_SUBST([libexecdir], ['${exec_prefix}/libexec'])
m4trace:configure.ac:15: -1- AC_SUBST_TRACE([libexecdir])
m4trace:configure.ac:15: -1- m4_pattern_allow([^libexecdir$])
m4trace:configure.ac:15: -1- AC_SUBST([datarootdir], ['${prefix}/share'])
m4trace:configure.ac:15: -1- AC_SUBST_TRACE([datarootdir])
m4trace:configure.ac:15: -1- m4_pattern_allow([^datarootdir$])
m4trace:configure.ac:15: -1- AC_SUBST([datadir], ['${datarootdir}'])
m4trace:configure.ac:15: -1- AC_SUBST_TRACE([datadir])
m4trace:configure.ac:15: -1- m4_pattern_allow([^datadir$])
m4trace:configure.ac:15: -1- AC_SUBST([sysconfdir], ['${prefix}/etc'])
m4trace:configure.ac:15: -1- AC_SUBST_TRACE([sysconfdir])
m4trace:configure.ac:15: -1- m4_pattern_allow([^sysconfdir$])
m4trace:configure.ac:15: -1- AC_SUBST([sharedstatedir], ['${prefix}/com'])
m4trace:configure.ac:15: -1- AC_SUBST_TRACE([sharedstatedir])
m4trace:configure.ac:15: -1- m4_pattern_allow([^sharedstatedir$])
m4trace:configure.ac:15: -1- AC_SUBST([localstatedir], ['${prefix}/var'])
m4trace:configure.ac:15: -1- AC_SUBST_TRACE([localstatedir])
m4trace:configure.ac:15: -1- m4_pattern_allow([^localstatedir$])
m4trace:configure.ac:15: -1- AC_SUBST([runstatedir], ['${localstatedir}/run'])
m4trace:configure.ac:15: -1- AC_SUBST_TRACE([runstatedir])
m4trace:configure.ac:15: -1- m4_pattern_allow([^runstatedir$])
m4trace:configure.ac:15: -1- AC_SUBST([includedir], ['${prefix}/include'])
m4trace:configure.ac:15: -1- AC_SUBST_TRACE([includedir])
m4trace:configure.ac:15: -1- m4_pattern_allow([^includedir$])
m4trace:configure.ac:15: -1- AC_SUBST([oldincludedir], ['/usr/include'])
m4trace:configure.ac:15: -1- AC_SUBST_TRACE([oldincludedir])
m4trace:configure.ac:15: -1- m4_pattern_allow([^oldincludedir$])
m4trace:configure.ac:15: -1- AC_SUBST([docdir], [m4_ifset([AC_PACKAGE_TARNAME],
['${datarootdir}/doc/${PACKAGE_TARNAME}'],
['${datarootdir}/doc/${PACKAGE}'])])
m4trace:configure.ac:15: -1- AC_SUBST_TRACE([docdir])
m4trace:configure.ac:15: -1- m4_pattern_allow([^docdir$])
m4trace:configure.ac:15: -1- AC_SUBST([infodir], ['${datarootdir}/info'])
m4trace:configure.ac:15: -1- AC_SUBST_TRACE([infodir])
m4trace:configure.ac:15: -1- m4_pattern_allow([^infodir$])
m4trace:configure.ac:15: -1- AC_SUBST([htmldir], ['${docdir}'])
m4trace:configure.ac:15: -1- AC_SUBST_TRACE([htmldir])
m4trace:configure.ac:15: -1- m4_pattern_allow([^htmldir$])
m4trace:configure.ac:15: -1- AC_SUBST([dvidir], ['${docdir}'])
m4trace:configure.ac:15: -1- AC_SUBST_TRACE([dvidir])
m4trace:configure.ac:15: -1- m4_pattern_allow([^dvidir$])
m4trace:configure.ac:15: -1- AC_SUBST([pdfdir], ['${docdir}'])
m4trace:configure.ac:15: -1- AC_SUBST_TRACE([pdfdir])
m4trace:configure.ac:15: -1- m4_pattern_allow([^pdfdir$])
m4trace:configure.ac:15: -1- AC_SUBST([psdir], ['${docdir}'])
m4trace:configure.ac:15: -1- AC_SUBST_TRACE([psdir])
m4trace:configure.ac:15: -1- m4_pattern_allow([^psdir$])
m4trace:configure.ac:15: -1- AC_SUBST([libdir], ['${exec_prefix}/lib'])
m4trace:configure.ac:15: -1- AC_SUBST_TRACE([libdir])
m4trace:configure.ac:15: -1- m4_pattern_allow([^libdir$])
m4trace:configure.ac:15: -1- AC_SUBST([localedir], ['${datarootdir}/locale'])
m4trace:configure.ac:15: -1- AC_SUBST_TRACE([localedir])
m4trace:configure.ac:15: -1- m4_pattern_allow([^localedir$])
m4trace:configure.ac:15: -1- AC_SUBST([mandir], ['${datarootdir}/man'])
m4trace:configure.ac:15: -1- AC_SUBST_TRACE([mandir])
m4trace:configure.ac:15: -1- m4_pattern_allow([^mandir$])
m4trace:configure.ac:15: -1- AC_DEFINE_TRACE_LITERAL([PACKAGE_NAME])
m4trace:configure.ac:15: -1- m4_pattern_allow([^PACKAGE_NAME$])
m4trace:configure.ac:15: -1- AH_OUTPUT([PACKAGE_NAME], [/* Define to the full name of this package. */
@%:@undef PACKAGE_NAME])
m4trace:configure.ac:15: -1- AC_DEFINE_TRACE_LITERAL([PACKAGE_TARNAME])
m4trace:configure.ac:15: -1- m4_pattern_allow([^PACKAGE_TARNAME$])
m4trace:configure.ac:15: -1- AH_OUTPUT([PACKAGE_TARNAME], [/* Define to the one symbol short name of this package. */
@%:@undef PACKAGE_TARNAME])
m4trace:configure.ac:15: -1- AC_DEFINE_TRACE_LITERAL([PACKAGE_VERSION])
m4trace:configure.ac:15: -1- m4_pattern_allow([^PACKAGE_VERSION$])
m4trace:configure.ac:15: -1- AH_OUTPUT([PACKAGE_VERSION], [/* Define to the version of this package. */
@%:@undef PACKAGE_VERSION])
m4trace:configure.ac:15: -1- AC_DEFINE_TRACE_LITERAL([PACKAGE_STRING])
m4trace:configure.ac:15: -1- m4_pattern_allow([^PACKAGE_STRING$])
m4trace:configure.ac:15: -1- AH_OUTPUT([PACKAGE_STRING], [/* Define to the full name and version of this package. */
@%:@undef PACKAGE_STRING])
m4trace:configure.ac:15: -1- AC_DEFINE_TRACE_LITERAL([PACKAGE_BUGREPORT])
m4trace:configure.ac:15: -1- m4_pattern_allow([^PACKAGE_BUGREPORT$])
m4trace:configure.ac:15: -1- AH_OUTPUT([PACKAGE_BUGREPORT], [/* Define to the address where bug reports for this package should be sent. */
@%:@undef PACKAGE_BUGREPORT])
m4trace:configure.ac:15: -1- AC_DEFINE_TRACE_LITERAL([PACKAGE_URL])
m4trace:configure.ac:15: -1- m4_pattern_allow([^PACKAGE_URL$])
m4trace:configure.ac:15: -1- AH_OUTPUT([PACKAGE_URL], [/* Define to the home page for this package. */
@%:@undef PACKAGE_URL])
m4trace:configure.ac:15: -1- AC_SUBST([DEFS])
m4trace:configure.ac:15: -1- AC_SUBST_TRACE([DEFS])
m4trace:configure.ac:15: -1- m4_pattern_allow([^DEFS$])
m4trace:configure.ac:15: -1- AC_SUBST([ECHO_C])
m4trace:configure.ac:15: -1- AC_SUBST_TRACE([ECHO_C])
m4trace:configure.ac:15: -1- m4_pattern_allow([^ECHO_C$])
m4trace:configure.ac:15: -1- AC_SUBST([ECHO_N])
m4trace:configure.ac:15: -1- AC_SUBST_TRACE([ECHO_N])
m4trace:configure.ac:15: -1- m4_pattern_allow([^ECHO_N$])
m4trace:configure.ac:15: -1- AC_SUBST([ECHO_T])
m4trace:configure.ac:15: -1- AC_SUBST_TRACE([ECHO_T])
m4trace:configure.ac:15: -1- m4_pattern_allow([^ECHO_T$])
m4trace:configure.ac:15: -1- AC_SUBST([LIBS])
m4trace:configure.ac:15: -1- AC_SUBST_TRACE([LIBS])
m4trace:configure.ac:15: -1- m4_pattern_allow([^LIBS$])
m4trace:configure.ac:15: -1- AC_SUBST([build_alias])
m4trace:configure.ac:15: -1- AC_SUBST_TRACE([build_alias])
m4trace:configure.ac:15: -1- m4_pattern_allow([^build_alias$])
m4trace:configure.ac:15: -1- AC_SUBST([host_alias])
m4trace:configure.ac:15: -1- AC_SUBST_TRACE([host_alias])
m4trace:configure.ac:15: -1- m4_pattern_allow([^host_alias$])
m4trace:configure.ac:15: -1- AC_SUBST([target_alias])
m4trace:configure.ac:15: -1- AC_SUBST_TRACE([target_alias])
m4trace:configure.ac:15: -1- m4_pattern_allow([^target_alias$])
m4trace:configure.ac:17: -1- AM_INIT_AUTOMAKE
m4trace:configure.ac:17: -1- m4_pattern_allow([^AM_[A-Z]+FLAGS$])
m4trace:configure.ac:17: -1- AM_AUTOMAKE_VERSION([1.16.5])
m4trace:configure.ac:17: -1- AC_REQUIRE_AUX_FILE([install-sh])
m4trace:configure.ac:17: -1- AC_SUBST([INSTALL_PROGRAM])
m4trace:configure.ac:17: -1- AC_SUBST_TRACE([INSTALL_PROGRAM])
m4trace:configure.ac:17: -1- m4_pattern_allow([^INSTALL_PROGRAM$])
m4trace:configure.ac:17: -1- AC_SUBST([INSTALL_SCRIPT])
m4trace:configure.ac:17: -1- AC_SUBST_TRACE([INSTALL_SCRIPT])
m4trace:configure.ac:17: -1- m4_pattern_allow([^INSTALL_SCRIPT$])
m4trace:configure.ac:17: -1- AC_SUBST([INSTALL_DATA])
m4trace:configure.ac:17: -1- AC_SUBST_TRACE([INSTALL_DATA])
m4trace:configure.ac:17: -1- m4_pattern_allow([^INSTALL_DATA$])
m4trace:configure.ac:17: -1- AC_SUBST([am__isrc], [' -I$(srcdir)'])
m4trace:configure.ac:17: -1- AC_SUBST_TRACE([am__isrc])
m4trace:configure.ac:17: -1- m4_pattern_allow([^am__isrc$])
m4trace:configure.ac:17: -1- _AM_SUBST_NOTMAKE([am__isrc])
m4trace:configure.ac:17: -1- AC_SUBST([CYGPATH_W])
m4trace:configure.ac:17: -1- AC_SUBST_TRACE([CYGPATH_W])
m4trace:configure.ac:17: -1- m4_pattern_allow([^CYGPATH_W$])
m4trace:configure.ac:17: -1- AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])
m4trace:configure.ac:17: -1- AC_SUBST_TRACE([PACKAGE])
m4trace:configure.ac:17: -1- m4_pattern_allow([^PACKAGE$])
m4trace:configure.ac:17: -1- AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])
m4trace:configure.ac:17: -1- AC_SUBST_TRACE([VERSION])
m4trace:configure.ac:17: -1- m4_pattern_allow([^VERSION$])
m4trace:configure.ac:17: -1- AC_DEFINE_TRACE_LITERAL([PACKAGE])
m4trace:configure.ac:17: -1- m4_pattern_allow([^PACKAGE$])
m4trace:configure.ac:17: -1- AH_OUTPUT([PACKAGE], [/* Name of package */
@%:@undef PACKAGE])
m4trace:configure.ac:17: -1- AC_DEFINE_TRACE_LITERAL([VERSION])
m4trace:configure.ac:17: -1- m4_pattern_allow([^VERSION$])
m4trace:configure.ac:17: -1- AH_OUTPUT([VERSION], [/* Version number of package */
@%:@undef VERSION])
m4trace:configure.ac:17: -1- AC_REQUIRE_AUX_FILE([missing])
m4trace:configure.ac:17: -1- AC_SUBST([ACLOCAL])
m4trace:configure.ac:17: -1- AC_SUBST_TRACE([ACLOCAL])
m4trace:configure.ac:17: -1- m4_pattern_allow([^ACLOCAL$])
m4trace:configure.ac:17: -1- AC_SUBST([AUTOCONF])
m4trace:configure.ac:17: -1- AC_SUBST_TRACE([AUTOCONF])
m4trace:configure.ac:17: -1- m4_pattern_allow([^AUTOCONF$])
m4trace:configure.ac:17: -1- AC_SUBST([AUTOMAKE])
m4trace:configure.ac:17: -1- AC_SUBST_TRACE([AUTOMAKE])
m4trace:configure.ac:17: -1- m4_pattern_allow([^AUTOMAKE$])
m4trace:configure.ac:17: -1- AC_SUBST([AUTOHEADER])
m4trace:configure.ac:17: -1- AC_SUBST_TRACE([AUTOHEADER])
m4trace:configure.ac:17: -1- m4_pattern_allow([^AUTOHEADER$])
m4trace:configure.ac:17: -1- AC_SUBST([MAKEINFO])
m4trace:configure.ac:17: -1- AC_SUBST_TRACE([MAKEINFO])
m4trace:configure.ac:17: -1- m4_pattern_allow([^MAKEINFO$])
m4trace:configure.ac:17: -1- AC_SUBST([install_sh])
m4trace:configure.ac:17: -1- AC_SUBST_TRACE([install_sh])
m4trace:configure.ac:17: -1- m4_pattern_allow([^install_sh$])
m4trace:configure.ac:17: -1- AC_SUBST([STRIP])
m4trace:configure.ac:17: -1- AC_SUBST_TRACE([STRIP])
m4trace:configure.ac:17: -1- m4_pattern_allow([^STRIP$])
m4trace:configure.ac:17: -1- AC_SUBST([INSTALL_STRIP_PROGRAM])
m4trace:configure.ac:17: -1- AC_SUBST_TRACE([INSTALL_STRIP_PROGRAM])
m4trace:configure.ac:17: -1- m4_pattern_allow([^INSTALL_STRIP_PROGRAM$])
m4trace:configure.ac:17: -1- AC_REQUIRE_AUX_FILE([install-sh])
m4trace:configure.ac:17: -1- AC_SUBST([MKDIR_P])
m4trace:configure.ac:17: -1- AC_SUBST_TRACE([MKDIR_P])
m4trace:configure.ac:17: -1- m4_pattern_allow([^MKDIR_P$])
m4trace:configure.ac:17: -1- AC_SUBST([mkdir_p], ['$(MKDIR_P)'])
m4trace:configure.ac:17: -1- AC_SUBST_TRACE([mkdir_p])
m4trace:configure.ac:17: -1- m4_pattern_allow([^mkdir_p$])
m4trace:configure.ac:17: -1- AC_SUBST([AWK])
m4trace:configure.ac:17: -1- AC_SUBST_TRACE([AWK])
m4trace:configure.ac:17: -1- m4_pattern_allow([^AWK$])
m4trace:configure.ac:17: -1- AC_SUBST([SET_MAKE])
m4trace:configure.ac:17: -1- AC_SUBST_TRACE([SET_MAKE])
m4trace:configure.ac:17: -1- m4_pattern_allow([^SET_MAKE$])
m4trace:configure.ac:17: -1- AC_SUBST([am__leading_dot])
m4trace:configure.ac:17: -1- AC_SUBST_TRACE([am__leading_dot])
m4trace:configure.ac:17: -1- m4_pattern_allow([^am__leading_dot$])
m4trace:configure.ac:17: -1- AC_SUBST([AMTAR], ['$${TAR-tar}'])
m4trace:configure.ac:17: -1- AC_SUBST_TRACE([AMTAR])
m4trace:configure.ac:17: -1- m4_pattern_allow([^AMTAR$])
m4trace:configure.ac:17: -1- AC_SUBST([am__tar])
m4trace:configure.ac:17: -1- AC_SUBST_TRACE([am__tar])
m4trace:configure.ac:17: -1- m4_pattern_allow([^am__tar$])
m4trace:configure.ac:17: -1- AC_SUBST([am__untar])
m4trace:configure.ac:17: -1- AC_SUBST_TRACE([am__untar])
m4trace:configure.ac:17: -1- m4_pattern_allow([^am__untar$])
m4trace:configure.ac:17: -1- AC_SUBST([CTAGS])
m4trace:configure.ac:17: -1- AC_SUBST_TRACE([CTAGS])
m4trace:configure.ac:17: -1- m4_pattern_allow([^CTAGS$])
m4trace:configure.ac:17: -1- AC_SUBST([ETAGS])
m4trace:configure.ac:17: -1- AC_SUBST_TRACE([ETAGS])
m4trace:configure.ac:17: -1- m4_pattern_allow([^ETAGS$])
m4trace:configure.ac:17: -1- AC_SUBST([CSCOPE])
m4trace:configure.ac:17: -1- AC_SUBST_TRACE([CSCOPE])
m4trace:configure.ac:17: -1- m4_pattern_allow([^CSCOPE$])
m4trace:configure.ac:17: -1- AM_SILENT_RULES
m4trace:configure.ac:17: -1- AC_SUBST([AM_V])
m4trace:configure.ac:17: -1- AC_SUBST_TRACE([AM_V])
m4trace:configure.ac:17: -1- m4_pattern_allow([^AM_V$])
m4trace:configure.ac:17: -1- _AM_SUBST_NOTMAKE([AM_V])
m4trace:configure.ac:17: -1- AC_SUBST([AM_DEFAULT_V])
m4trace:configure.ac:17: -1- AC_SUBST_TRACE([AM_DEFAULT_V])
m4trace:configure.ac:17: -1- m4_pattern_allow([^AM_DEFAULT_V$])
m4trace:configure.ac:17: -1- _AM_SUBST_NOTMAKE([AM_DEFAULT_V])
m4trace:configure.ac:17: -1- AC_SUBST([AM_DEFAULT_VERBOSITY])
m4trace:configure.ac:17: -1- AC_SUBST_TRACE([AM_DEFAULT_VERBOSITY])
m4trace:configure.ac:17: -1- m4_pattern_allow([^AM_DEFAULT_VERBOSITY$])
m4trace:configure.ac:17: -1- AC_SUBST([AM_BACKSLASH])
m4trace:configure.ac:17: -1- AC_SUBST_TRACE([AM_BACKSLASH])
m4trace:configure.ac:17: -1- m4_pattern_allow([^AM_BACKSLASH$])
m4trace:configure.ac:17: -1- _AM_SUBST_NOTMAKE([AM_BACKSLASH])
m4trace:configure.ac:18: -1- AM_MAINTAINER_MODE
m4trace:configure.ac:18: -1- AM_CONDITIONAL([MAINTAINER_MODE], [test $USE_MAINTAINER_MODE = yes])
m4trace:configure.ac:18: -1- AC_SUBST([MAINTAINER_MODE_TRUE])
m4trace:configure.ac:18: -1- AC_SUBST_TRACE([MAINTAINER_MODE_TRUE])
m4trace:configure.ac:18: -1- m4_pattern_allow([^MAINTAINER_MODE_TRUE$])
m4trace:configure.ac:18: -1- AC_SUBST([MAINTAINER_MODE_FALSE])
m4trace:configure.ac:18: -1- AC_SUBST_TRACE([MAINTAINER_MODE_FALSE])
m4trace:configure.ac:18: -1- m4_pattern_allow([^MAINTAINER_MODE_FALSE$])
m4trace:configure.ac:18: -1- _AM_SUBST_NOTMAKE([MAINTAINER_MODE_TRUE])
m4trace:configure.ac:18: -1- _AM_SUBST_NOTMAKE([MAINTAINER_MODE_FALSE])
m4trace:configure.ac:18: -1- AC_SUBST([MAINT])
m4trace:configure.ac:18: -1- AC_SUBST_TRACE([MAINT])
m4trace:configure.ac:18: -1- m4_pattern_allow([^MAINT$])
m4trace:configure.ac:35: -1- AC_SUBST([CC])
m4trace:configure.ac:35: -1- AC_SUBST_TRACE([CC])
m4trace:configure.ac:35: -1- m4_pattern_allow([^CC$])
m4trace:configure.ac:35: -1- AC_SUBST([CFLAGS])
m4trace:configure.ac:35: -1- AC_SUBST_TRACE([CFLAGS])
m4trace:configure.ac:35: -1- m4_pattern_allow([^CFLAGS$])
m4trace:configure.ac:35: -1- AC_SUBST([LDFLAGS])
m4trace:configure.ac:35: -1- AC_SUBST_TRACE([LDFLAGS])
m4trace:configure.ac:35: -1- m4_pattern_allow([^LDFLAGS$])
m4trace:configure.ac:35: -1- AC_SUBST([LIBS])
m4trace:configure.ac:35: -1- AC_SUBST_TRACE([LIBS])
m4trace:configure.ac:35: -1- m4_pattern_allow([^LIBS$])
m4trace:configure.ac:35: -1- AC_SUBST([CPPFLAGS])
m4trace:configure.ac:35: -1- AC_SUBST_TRACE([CPPFLAGS])
m4trace:configure.ac:35: -1- m4_pattern_allow([^CPPFLAGS$])
m4trace:configure.ac:35: -1- AC_SUBST([CC])
m4trace:configure.ac:35: -1- AC_SUBST_TRACE([CC])
m4trace:configure.ac:35: -1- m4_pattern_allow([^CC$])
m4trace:configure.ac:35: -1- AC_SUBST([CC])
m4trace:configure.ac:35: -1- AC_SUBST_TRACE([CC])
m4trace:configure.ac:35: -1- m4_pattern_allow([^CC$])
m4trace:configure.ac:35: -1- AC_SUBST([CC])
m4trace:configure.ac:35: -1- AC_SUBST_TRACE([CC])
m4trace:configure.ac:35: -1- m4_pattern_allow([^CC$])
m4trace:configure.ac:35: -1- AC_SUBST([CC])
m4trace:configure.ac:35: -1- AC_SUBST_TRACE([CC])
m4trace:configure.ac:35: -1- m4_pattern_allow([^CC$])
m4trace:configure.ac:35: -1- AC_SUBST([ac_ct_CC])
m4trace:configure.ac:35: -1- AC_SUBST_TRACE([ac_ct_CC])
m4trace:configure.ac:35: -1- m4_pattern_allow([^ac_ct_CC$])
m4trace:configure.ac:35: -1- AC_SUBST([CC])
m4trace:configure.ac:35: -1- AC_SUBST_TRACE([CC])
m4trace:configure.ac:35: -1- m4_pattern_allow([^CC$])
m4trace:configure.ac:35: -1- AC_SUBST([EXEEXT], [$ac_cv_exeext])
m4trace:configure.ac:35: -1- AC_SUBST_TRACE([EXEEXT])
m4trace:configure.ac:35: -1- m4_pattern_allow([^EXEEXT$])
m4trace:configure.ac:35: -1- AC_SUBST([OBJEXT], [$ac_cv_objext])
m4trace:configure.ac:35: -1- AC_SUBST_TRACE([OBJEXT])
m4trace:configure.ac:35: -1- m4_pattern_allow([^OBJEXT$])
m4trace:configure.ac:35: -1- AC_REQUIRE_AUX_FILE([compile])
m4trace:configure.ac:35: -1- AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])
m4trace:configure.ac:35: -1- AC_SUBST_TRACE([DEPDIR])
m4trace:configure.ac:35: -1- m4_pattern_allow([^DEPDIR$])
m4trace:configure.ac:35: -1- AC_SUBST([am__include])
m4trace:configure.ac:35: -1- AC_SUBST_TRACE([am__include])
m4trace:configure.ac:35: -1- m4_pattern_allow([^am__include$])
m4trace:configure.ac:35: -1- AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno])
m4trace:configure.ac:35: -1- AC_SUBST([AMDEP_TRUE])
m4trace:configure.ac:35: -1- AC_SUBST_TRACE([AMDEP_TRUE])
m4trace:configure.ac:35: -1- m4_pattern_allow([^AMDEP_TRUE$])
m4trace:configure.ac:35: -1- AC_SUBST([AMDEP_FALSE])
m4trace:configure.ac:35: -1- AC_SUBST_TRACE([AMDEP_FALSE])
m4trace:configure.ac:35: -1- m4_pattern_allow([^AMDEP_FALSE$])
m4trace:configure.ac:35: -1- _AM_SUBST_NOTMAKE([AMDEP_TRUE])
m4trace:configure.ac:35: -1- _AM_SUBST_NOTMAKE([AMDEP_FALSE])
m4trace:configure.ac:35: -1- AC_SUBST([AMDEPBACKSLASH])
m4trace:configure.ac:35: -1- AC_SUBST_TRACE([AMDEPBACKSLASH])
m4trace:configure.ac:35: -1- m4_pattern_allow([^AMDEPBACKSLASH$])
m4trace:configure.ac:35: -1- _AM_SUBST_NOTMAKE([AMDEPBACKSLASH])
m4trace:configure.ac:35: -1- AC_SUBST([am__nodep])
m4trace:configure.ac:35: -1- AC_SUBST_TRACE([am__nodep])
m4trace:configure.ac:35: -1- m4_pattern_allow([^am__nodep$])
m4trace:configure.ac:35: -1- _AM_SUBST_NOTMAKE([am__nodep])
m4trace:configure.ac:35: -1- AC_SUBST([CCDEPMODE], [depmode=$am_cv_CC_dependencies_compiler_type])
m4trace:configure.ac:35: -1- AC_SUBST_TRACE([CCDEPMODE])
m4trace:configure.ac:35: -1- m4_pattern_allow([^CCDEPMODE$])
m4trace:configure.ac:35: -1- AM_CONDITIONAL([am__fastdepCC], [
test "x$enable_dependency_tracking" != xno \
&& test "$am_cv_CC_dependencies_compiler_type" = gcc3])
m4trace:configure.ac:35: -1- AC_SUBST([am__fastdepCC_TRUE])
m4trace:configure.ac:35: -1- AC_SUBST_TRACE([am__fastdepCC_TRUE])
m4trace:configure.ac:35: -1- m4_pattern_allow([^am__fastdepCC_TRUE$])
m4trace:configure.ac:35: -1- AC_SUBST([am__fastdepCC_FALSE])
m4trace:configure.ac:35: -1- AC_SUBST_TRACE([am__fastdepCC_FALSE])
m4trace:configure.ac:35: -1- m4_pattern_allow([^am__fastdepCC_FALSE$])
m4trace:configure.ac:35: -1- _AM_SUBST_NOTMAKE([am__fastdepCC_TRUE])
m4trace:configure.ac:35: -1- _AM_SUBST_NOTMAKE([am__fastdepCC_FALSE])
m4trace:configure.ac:36: -1- AC_SUBST([CXX])
m4trace:configure.ac:36: -1- AC_SUBST_TRACE([CXX])
m4trace:configure.ac:36: -1- m4_pattern_allow([^CXX$])
m4trace:configure.ac:36: -1- AC_SUBST([CXXFLAGS])
m4trace:configure.ac:36: -1- AC_SUBST_TRACE([CXXFLAGS])
m4trace:configure.ac:36: -1- m4_pattern_allow([^CXXFLAGS$])
m4trace:configure.ac:36: -1- AC_SUBST([LDFLAGS])
m4trace:configure.ac:36: -1- AC_SUBST_TRACE([LDFLAGS])
m4trace:configure.ac:36: -1- m4_pattern_allow([^LDFLAGS$])
m4trace:configure.ac:36: -1- AC_SUBST([LIBS])
m4trace:configure.ac:36: -1- AC_SUBST_TRACE([LIBS])
m4trace:configure.ac:36: -1- m4_pattern_allow([^LIBS$])
m4trace:configure.ac:36: -1- AC_SUBST([CPPFLAGS])
m4trace:configure.ac:36: -1- AC_SUBST_TRACE([CPPFLAGS])
m4trace:configure.ac:36: -1- m4_pattern_allow([^CPPFLAGS$])
m4trace:configure.ac:36: -1- AC_SUBST([CXX])
m4trace:configure.ac:36: -1- AC_SUBST_TRACE([CXX])
m4trace:configure.ac:36: -1- m4_pattern_allow([^CXX$])
m4trace:configure.ac:36: -1- AC_SUBST([ac_ct_CXX])
m4trace:configure.ac:36: -1- AC_SUBST_TRACE([ac_ct_CXX])
m4trace:configure.ac:36: -1- m4_pattern_allow([^ac_ct_CXX$])
m4trace:configure.ac:36: -1- AC_SUBST([CXXDEPMODE], [depmode=$am_cv_CXX_dependencies_compiler_type])
m4trace:configure.ac:36: -1- AC_SUBST_TRACE([CXXDEPMODE])
m4trace:configure.ac:36: -1- m4_pattern_allow([^CXXDEPMODE$])
m4trace:configure.ac:36: -1- AM_CONDITIONAL([am__fastdepCXX], [
test "x$enable_dependency_tracking" != xno \
&& test "$am_cv_CXX_dependencies_compiler_type" = gcc3])
m4trace:configure.ac:36: -1- AC_SUBST([am__fastdepCXX_TRUE])
m4trace:configure.ac:36: -1- AC_SUBST_TRACE([am__fastdepCXX_TRUE])
m4trace:configure.ac:36: -1- m4_pattern_allow([^am__fastdepCXX_TRUE$])
m4trace:configure.ac:36: -1- AC_SUBST([am__fastdepCXX_FALSE])
m4trace:configure.ac:36: -1- AC_SUBST_TRACE([am__fastdepCXX_FALSE])
m4trace:configure.ac:36: -1- m4_pattern_allow([^am__fastdepCXX_FALSE$])
m4trace:configure.ac:36: -1- _AM_SUBST_NOTMAKE([am__fastdepCXX_TRUE])
m4trace:configure.ac:36: -1- _AM_SUBST_NOTMAKE([am__fastdepCXX_FALSE])
m4trace:configure.ac:37: -1- _m4_warn([obsolete], [The macro `AC_LIBTOOL_WIN32_DLL' is obsolete.
You should run autoupdate.], [aclocal.m4:8510: AC_LIBTOOL_WIN32_DLL is expanded from...
configure.ac:37: the top level])
m4trace:configure.ac:37: -1- AC_CANONICAL_HOST
m4trace:configure.ac:37: -1- AC_CANONICAL_BUILD
m4trace:configure.ac:37: -1- AC_REQUIRE_AUX_FILE([config.sub])
m4trace:configure.ac:37: -1- AC_REQUIRE_AUX_FILE([config.guess])
m4trace:configure.ac:37: -1- AC_SUBST([build], [$ac_cv_build])
m4trace:configure.ac:37: -1- AC_SUBST_TRACE([build])
m4trace:configure.ac:37: -1- m4_pattern_allow([^build$])
m4trace:configure.ac:37: -1- AC_SUBST([build_cpu], [$[1]])
m4trace:configure.ac:37: -1- AC_SUBST_TRACE([build_cpu])
m4trace:configure.ac:37: -1- m4_pattern_allow([^build_cpu$])
m4trace:configure.ac:37: -1- AC_SUBST([build_vendor], [$[2]])
m4trace:configure.ac:37: -1- AC_SUBST_TRACE([build_vendor])
m4trace:configure.ac:37: -1- m4_pattern_allow([^build_vendor$])
m4trace:configure.ac:37: -1- AC_SUBST([build_os])
m4trace:configure.ac:37: -1- AC_SUBST_TRACE([build_os])
m4trace:configure.ac:37: -1- m4_pattern_allow([^build_os$])
m4trace:configure.ac:37: -1- AC_SUBST([host], [$ac_cv_host])
m4trace:configure.ac:37: -1- AC_SUBST_TRACE([host])
m4trace:configure.ac:37: -1- m4_pattern_allow([^host$])
m4trace:configure.ac:37: -1- AC_SUBST([host_cpu], [$[1]])
m4trace:configure.ac:37: -1- AC_SUBST_TRACE([host_cpu])
m4trace:configure.ac:37: -1- m4_pattern_allow([^host_cpu$])
m4trace:configure.ac:37: -1- AC_SUBST([host_vendor], [$[2]])
m4trace:configure.ac:37: -1- AC_SUBST_TRACE([host_vendor])
m4trace:configure.ac:37: -1- m4_pattern_allow([^host_vendor$])
m4trace:configure.ac:37: -1- AC_SUBST([host_os])
m4trace:configure.ac:37: -1- AC_SUBST_TRACE([host_os])
m4trace:configure.ac:37: -1- m4_pattern_allow([^host_os$])
m4trace:configure.ac:37: -1- AC_SUBST([AS])
m4trace:configure.ac:37: -1- AC_SUBST_TRACE([AS])
m4trace:configure.ac:37: -1- m4_pattern_allow([^AS$])
m4trace:configure.ac:37: -1- AC_SUBST([DLLTOOL])
m4trace:configure.ac:37: -1- AC_SUBST_TRACE([DLLTOOL])
m4trace:configure.ac:37: -1- m4_pattern_allow([^DLLTOOL$])
m4trace:configure.ac:37: -1- AC_SUBST([OBJDUMP])
m4trace:configure.ac:37: -1- AC_SUBST_TRACE([OBJDUMP])
m4trace:configure.ac:37: -1- m4_pattern_allow([^OBJDUMP$])
m4trace:configure.ac:37: -1- _m4_warn([obsolete], [AC_LIBTOOL_WIN32_DLL: Remove this warning and the call to _LT_SET_OPTION when you
put the 'win32-dll' option into LT_INIT's first parameter.], [./lib/autoconf/general.m4:2434: AC_DIAGNOSE is expanded from...
aclocal.m4:8510: AC_LIBTOOL_WIN32_DLL is expanded from...
configure.ac:37: the top level])
m4trace:configure.ac:38: -1- AC_PROG_LIBTOOL
m4trace:configure.ac:38: -1- _m4_warn([obsolete], [The macro `AC_PROG_LIBTOOL' is obsolete.
You should run autoupdate.], [aclocal.m4:121: AC_PROG_LIBTOOL is expanded from...
configure.ac:38: the top level])
m4trace:configure.ac:38: -1- LT_INIT
m4trace:configure.ac:38: -1- m4_pattern_forbid([^_?LT_[A-Z_]+$])
m4trace:configure.ac:38: -1- m4_pattern_allow([^(_LT_EOF|LT_DLGLOBAL|LT_DLLAZY_OR_NOW|LT_MULTI_MODULE)$])
m4trace:configure.ac:38: -1- AC_REQUIRE_AUX_FILE([ltmain.sh])
m4trace:configure.ac:38: -1- AC_SUBST([LIBTOOL])
m4trace:configure.ac:38: -1- AC_SUBST_TRACE([LIBTOOL])
m4trace:configure.ac:38: -1- m4_pattern_allow([^LIBTOOL$])
m4trace:configure.ac:38: -1- AC_SUBST([SED])
m4trace:configure.ac:38: -1- AC_SUBST_TRACE([SED])
m4trace:configure.ac:38: -1- m4_pattern_allow([^SED$])
m4trace:configure.ac:38: -1- AC_SUBST([GREP])
m4trace:configure.ac:38: -1- AC_SUBST_TRACE([GREP])
m4trace:configure.ac:38: -1- m4_pattern_allow([^GREP$])
m4trace:configure.ac:38: -1- AC_SUBST([EGREP])
m4trace:configure.ac:38: -1- AC_SUBST_TRACE([EGREP])
m4trace:configure.ac:38: -1- m4_pattern_allow([^EGREP$])
m4trace:configure.ac:38: -1- AC_SUBST([FGREP])
m4trace:configure.ac:38: -1- AC_SUBST_TRACE([FGREP])
m4trace:configure.ac:38: -1- m4_pattern_allow([^FGREP$])
m4trace:configure.ac:38: -1- AC_SUBST([GREP])
m4trace:configure.ac:38: -1- AC_SUBST_TRACE([GREP])
m4trace:configure.ac:38: -1- m4_pattern_allow([^GREP$])
m4trace:configure.ac:38: -1- AC_SUBST([LD])
m4trace:configure.ac:38: -1- AC_SUBST_TRACE([LD])
m4trace:configure.ac:38: -1- m4_pattern_allow([^LD$])
m4trace:configure.ac:38: -1- AC_SUBST([DUMPBIN])
m4trace:configure.ac:38: -1- AC_SUBST_TRACE([DUMPBIN])
m4trace:configure.ac:38: -1- m4_pattern_allow([^DUMPBIN$])
m4trace:configure.ac:38: -1- AC_SUBST([ac_ct_DUMPBIN])
m4trace:configure.ac:38: -1- AC_SUBST_TRACE([ac_ct_DUMPBIN])
m4trace:configure.ac:38: -1- m4_pattern_allow([^ac_ct_DUMPBIN$])
m4trace:configure.ac:38: -1- AC_SUBST([DUMPBIN])
m4trace:configure.ac:38: -1- AC_SUBST_TRACE([DUMPBIN])
m4trace:configure.ac:38: -1- m4_pattern_allow([^DUMPBIN$])
m4trace:configure.ac:38: -1- AC_SUBST([NM])
m4trace:configure.ac:38: -1- AC_SUBST_TRACE([NM])
m4trace:configure.ac:38: -1- m4_pattern_allow([^NM$])
m4trace:configure.ac:38: -1- AC_SUBST([LN_S], [$as_ln_s])
m4trace:configure.ac:38: -1- AC_SUBST_TRACE([LN_S])
m4trace:configure.ac:38: -1- m4_pattern_allow([^LN_S$])
m4trace:configure.ac:38: -1- AC_SUBST([OBJDUMP])
m4trace:configure.ac:38: -1- AC_SUBST_TRACE([OBJDUMP])
m4trace:configure.ac:38: -1- m4_pattern_allow([^OBJDUMP$])
m4trace:configure.ac:38: -1- AC_SUBST([OBJDUMP])
m4trace:configure.ac:38: -1- AC_SUBST_TRACE([OBJDUMP])
m4trace:configure.ac:38: -1- m4_pattern_allow([^OBJDUMP$])
m4trace:configure.ac:38: -1- AC_SUBST([DLLTOOL])
m4trace:configure.ac:38: -1- AC_SUBST_TRACE([DLLTOOL])
m4trace:configure.ac:38: -1- m4_pattern_allow([^DLLTOOL$])
m4trace:configure.ac:38: -1- AC_SUBST([DLLTOOL])
m4trace:configure.ac:38: -1- AC_SUBST_TRACE([DLLTOOL])
m4trace:configure.ac:38: -1- m4_pattern_allow([^DLLTOOL$])
m4trace:configure.ac:38: -1- AC_SUBST([AR])
m4trace:configure.ac:38: -1- AC_SUBST_TRACE([AR])
m4trace:configure.ac:38: -1- m4_pattern_allow([^AR$])
m4trace:configure.ac:38: -1- AC_SUBST([ac_ct_AR])
m4trace:configure.ac:38: -1- AC_SUBST_TRACE([ac_ct_AR])
m4trace:configure.ac:38: -1- m4_pattern_allow([^ac_ct_AR$])
m4trace:configure.ac:38: -1- AC_SUBST([STRIP])
m4trace:configure.ac:38: -1- AC_SUBST_TRACE([STRIP])
m4trace:configure.ac:38: -1- m4_pattern_allow([^STRIP$])
m4trace:configure.ac:38: -1- AC_SUBST([RANLIB])
m4trace:configure.ac:38: -1- AC_SUBST_TRACE([RANLIB])
m4trace:configure.ac:38: -1- m4_pattern_allow([^RANLIB$])
m4trace:configure.ac:38: -1- m4_pattern_allow([LT_OBJDIR])
m4trace:configure.ac:38: -1- AC_DEFINE_TRACE_LITERAL([LT_OBJDIR])
m4trace:configure.ac:38: -1- m4_pattern_allow([^LT_OBJDIR$])
m4trace:configure.ac:38: -1- AH_OUTPUT([LT_OBJDIR], [/* Define to the sub-directory where libtool stores uninstalled libraries. */
@%:@undef LT_OBJDIR])
m4trace:configure.ac:38: -1- LT_SUPPORTED_TAG([CC])
m4trace:configure.ac:38: -1- AC_SUBST([MANIFEST_TOOL])
m4trace:configure.ac:38: -1- AC_SUBST_TRACE([MANIFEST_TOOL])
m4trace:configure.ac:38: -1- m4_pattern_allow([^MANIFEST_TOOL$])
m4trace:configure.ac:38: -1- AC_SUBST([DSYMUTIL])
m4trace:configure.ac:38: -1- AC_SUBST_TRACE([DSYMUTIL])
m4trace:configure.ac:38: -1- m4_pattern_allow([^DSYMUTIL$])
m4trace:configure.ac:38: -1- AC_SUBST([NMEDIT])
m4trace:configure.ac:38: -1- AC_SUBST_TRACE([NMEDIT])
m4trace:configure.ac:38: -1- m4_pattern_allow([^NMEDIT$])
m4trace:configure.ac:38: -1- AC_SUBST([LIPO])
m4trace:configure.ac:38: -1- AC_SUBST_TRACE([LIPO])
m4trace:configure.ac:38: -1- m4_pattern_allow([^LIPO$])
m4trace:configure.ac:38: -1- AC_SUBST([OTOOL])
m4trace:configure.ac:38: -1- AC_SUBST_TRACE([OTOOL])
m4trace:configure.ac:38: -1- m4_pattern_allow([^OTOOL$])
m4trace:configure.ac:38: -1- AC_SUBST([OTOOL64])
m4trace:configure.ac:38: -1- AC_SUBST_TRACE([OTOOL64])
m4trace:configure.ac:38: -1- m4_pattern_allow([^OTOOL64$])
m4trace:configure.ac:38: -1- AC_SUBST([LT_SYS_LIBRARY_PATH])
m4trace:configure.ac:38: -1- AC_SUBST_TRACE([LT_SYS_LIBRARY_PATH])
m4trace:configure.ac:38: -1- m4_pattern_allow([^LT_SYS_LIBRARY_PATH$])
m4trace:configure.ac:38: -1- AH_OUTPUT([HAVE_DLFCN_H], [/* Define to 1 if you have the <dlfcn.h> header file. */
@%:@undef HAVE_DLFCN_H])
m4trace:configure.ac:38: -1- AH_OUTPUT([HAVE_STDIO_H], [/* Define to 1 if you have the <stdio.h> header file. */
@%:@undef HAVE_STDIO_H])
m4trace:configure.ac:38: -1- AH_OUTPUT([HAVE_STDLIB_H], [/* Define to 1 if you have the <stdlib.h> header file. */
@%:@undef HAVE_STDLIB_H])
m4trace:configure.ac:38: -1- AH_OUTPUT([HAVE_STRING_H], [/* Define to 1 if you have the <string.h> header file. */
@%:@undef HAVE_STRING_H])
m4trace:configure.ac:38: -1- AH_OUTPUT([HAVE_INTTYPES_H], [/* Define to 1 if you have the <inttypes.h> header file. */
@%:@undef HAVE_INTTYPES_H])
m4trace:configure.ac:38: -1- AH_OUTPUT([HAVE_STDINT_H], [/* Define to 1 if you have the <stdint.h> header file. */
@%:@undef HAVE_STDINT_H])
m4trace:configure.ac:38: -1- AH_OUTPUT([HAVE_STRINGS_H], [/* Define to 1 if you have the <strings.h> header file. */
@%:@undef HAVE_STRINGS_H])
m4trace:configure.ac:38: -1- AH_OUTPUT([HAVE_SYS_STAT_H], [/* Define to 1 if you have the <sys/stat.h> header file. */
@%:@undef HAVE_SYS_STAT_H])
m4trace:configure.ac:38: -1- AH_OUTPUT([HAVE_SYS_TYPES_H], [/* Define to 1 if you have the <sys/types.h> header file. */
@%:@undef HAVE_SYS_TYPES_H])
m4trace:configure.ac:38: -1- AH_OUTPUT([HAVE_UNISTD_H], [/* Define to 1 if you have the <unistd.h> header file. */
@%:@undef HAVE_UNISTD_H])
m4trace:configure.ac:38: -1- AC_DEFINE_TRACE_LITERAL([STDC_HEADERS])
m4trace:configure.ac:38: -1- m4_pattern_allow([^STDC_HEADERS$])
m4trace:configure.ac:38: -1- AH_OUTPUT([STDC_HEADERS], [/* Define to 1 if all of the C90 standard headers exist (not just the ones
required in a freestanding environment). This macro is provided for
backward compatibility; new code need not use it. */
@%:@undef STDC_HEADERS])
m4trace:configure.ac:38: -1- AC_DEFINE_TRACE_LITERAL([HAVE_DLFCN_H])
m4trace:configure.ac:38: -1- m4_pattern_allow([^HAVE_DLFCN_H$])
m4trace:configure.ac:38: -1- LT_SUPPORTED_TAG([CXX])
m4trace:configure.ac:38: -1- AC_SUBST([CXXCPP])
m4trace:configure.ac:38: -1- AC_SUBST_TRACE([CXXCPP])
m4trace:configure.ac:38: -1- m4_pattern_allow([^CXXCPP$])
m4trace:configure.ac:38: -1- AC_SUBST([CPPFLAGS])
m4trace:configure.ac:38: -1- AC_SUBST_TRACE([CPPFLAGS])
m4trace:configure.ac:38: -1- m4_pattern_allow([^CPPFLAGS$])
m4trace:configure.ac:38: -1- AC_SUBST([CXXCPP])
m4trace:configure.ac:38: -1- AC_SUBST_TRACE([CXXCPP])
m4trace:configure.ac:38: -1- m4_pattern_allow([^CXXCPP$])
m4trace:configure.ac:38: -1- AC_SUBST([LD])
m4trace:configure.ac:38: -1- AC_SUBST_TRACE([LD])
m4trace:configure.ac:38: -1- m4_pattern_allow([^LD$])
m4trace:configure.ac:38: -1- AC_SUBST([LT_SYS_LIBRARY_PATH])
m4trace:configure.ac:38: -1- AC_SUBST_TRACE([LT_SYS_LIBRARY_PATH])
m4trace:configure.ac:38: -1- m4_pattern_allow([^LT_SYS_LIBRARY_PATH$])
m4trace:configure.ac:41: -1- AC_SUBST([DEFAULT_INCLUDES])
m4trace:configure.ac:41: -1- AC_SUBST_TRACE([DEFAULT_INCLUDES])
m4trace:configure.ac:41: -1- m4_pattern_allow([^DEFAULT_INCLUDES$])
m4trace:configure.ac:42: -1- AC_SUBST([PORTAUDIO_ROOT])
m4trace:configure.ac:42: -1- AC_SUBST_TRACE([PORTAUDIO_ROOT])
m4trace:configure.ac:42: -1- m4_pattern_allow([^PORTAUDIO_ROOT$])
m4trace:configure.ac:43: -1- AC_SUBST([CXXFLAGS])
m4trace:configure.ac:43: -1- AC_SUBST_TRACE([CXXFLAGS])
m4trace:configure.ac:43: -1- m4_pattern_allow([^CXXFLAGS$])
m4trace:configure.ac:44: -1- AC_SUBST([LT_VERSION_INFO])
m4trace:configure.ac:44: -1- AC_SUBST_TRACE([LT_VERSION_INFO])
m4trace:configure.ac:44: -1- m4_pattern_allow([^LT_VERSION_INFO$])
m4trace:configure.ac:46: -1- AC_CONFIG_FILES([
Makefile
lib/Makefile
include/Makefile
bin/Makefile
doc/Makefile
portaudiocpp.pc
])
m4trace:configure.ac:54: -1- AC_SUBST([LIB@&t@OBJS], [$ac_libobjs])
m4trace:configure.ac:54: -1- AC_SUBST_TRACE([LIB@&t@OBJS])
m4trace:configure.ac:54: -1- m4_pattern_allow([^LIB@&t@OBJS$])
m4trace:configure.ac:54: -1- AC_SUBST([LTLIBOBJS], [$ac_ltlibobjs])
m4trace:configure.ac:54: -1- AC_SUBST_TRACE([LTLIBOBJS])
m4trace:configure.ac:54: -1- m4_pattern_allow([^LTLIBOBJS$])
m4trace:configure.ac:54: -1- AM_CONDITIONAL([am__EXEEXT], [test -n "$EXEEXT"])
m4trace:configure.ac:54: -1- AC_SUBST([am__EXEEXT_TRUE])
m4trace:configure.ac:54: -1- AC_SUBST_TRACE([am__EXEEXT_TRUE])
m4trace:configure.ac:54: -1- m4_pattern_allow([^am__EXEEXT_TRUE$])
m4trace:configure.ac:54: -1- AC_SUBST([am__EXEEXT_FALSE])
m4trace:configure.ac:54: -1- AC_SUBST_TRACE([am__EXEEXT_FALSE])
m4trace:configure.ac:54: -1- m4_pattern_allow([^am__EXEEXT_FALSE$])
m4trace:configure.ac:54: -1- _AM_SUBST_NOTMAKE([am__EXEEXT_TRUE])
m4trace:configure.ac:54: -1- _AM_SUBST_NOTMAKE([am__EXEEXT_FALSE])
m4trace:configure.ac:54: -1- AC_SUBST_TRACE([top_builddir])
m4trace:configure.ac:54: -1- AC_SUBST_TRACE([top_build_prefix])
m4trace:configure.ac:54: -1- AC_SUBST_TRACE([srcdir])
m4trace:configure.ac:54: -1- AC_SUBST_TRACE([abs_srcdir])
m4trace:configure.ac:54: -1- AC_SUBST_TRACE([top_srcdir])
m4trace:configure.ac:54: -1- AC_SUBST_TRACE([abs_top_srcdir])
m4trace:configure.ac:54: -1- AC_SUBST_TRACE([builddir])
m4trace:configure.ac:54: -1- AC_SUBST_TRACE([abs_builddir])
m4trace:configure.ac:54: -1- AC_SUBST_TRACE([abs_top_builddir])
m4trace:configure.ac:54: -1- AC_SUBST_TRACE([INSTALL])
m4trace:configure.ac:54: -1- AC_SUBST_TRACE([MKDIR_P])
m4trace:configure.ac:54: -1- AC_REQUIRE_AUX_FILE([ltmain.sh])

View file

@ -1,7 +1,7 @@
# Makefile.in generated by automake 1.14.1 from Makefile.am.
# Makefile.in generated by automake 1.16.5 from Makefile.am.
# @configure_input@
# Copyright (C) 1994-2013 Free Software Foundation, Inc.
# Copyright (C) 1994-2021 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
@ -15,7 +15,17 @@
@SET_MAKE@
VPATH = @srcdir@
am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)'
am__is_gnu_make = { \
if test -z '$(MAKELEVEL)'; then \
false; \
elif test -n '$(MAKE_HOST)'; then \
true; \
elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
true; \
else \
false; \
fi; \
}
am__make_running_with_option = \
case $${target_option-} in \
?) ;; \
@ -80,12 +90,11 @@ build_triplet = @build@
host_triplet = @host@
noinst_PROGRAMS = devs$(EXEEXT) sine$(EXEEXT)
subdir = bin
DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \
$(top_srcdir)/../../depcomp
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
mkinstalldirs = $(install_sh) -d
CONFIG_CLEAN_FILES =
CONFIG_CLEAN_VPATH_FILES =
@ -116,8 +125,9 @@ AM_V_at = $(am__v_at_@AM_V@)
am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
am__v_at_0 = @
am__v_at_1 =
depcomp = $(SHELL) $(top_srcdir)/../../depcomp
am__depfiles_maybe = depfiles
depcomp = $(SHELL) $(top_srcdir)/depcomp
am__maybe_remake_depfiles = depfiles
am__depfiles_remade = ./$(DEPDIR)/devs.Po ./$(DEPDIR)/sine.Po
am__mv = mv -f
CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS)
@ -161,8 +171,7 @@ am__define_uniq_tagged_files = \
unique=`for i in $$list; do \
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
done | $(am__uniquify_input)`
ETAGS = etags
CTAGS = ctags
am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
ACLOCAL = @ACLOCAL@
AMTAR = @AMTAR@
@ -176,8 +185,9 @@ AWK = @AWK@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
CPP = @CPP@
CPPFLAGS = @CPPFLAGS@
CSCOPE = @CSCOPE@
CTAGS = @CTAGS@
CXX = @CXX@
CXXCPP = @CXXCPP@
CXXDEPMODE = @CXXDEPMODE@
@ -193,6 +203,7 @@ ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
EGREP = @EGREP@
ETAGS = @ETAGS@
EXEEXT = @EXEEXT@
FGREP = @FGREP@
GREP = @GREP@
@ -209,6 +220,7 @@ LIBTOOL = @LIBTOOL@
LIPO = @LIPO@
LN_S = @LN_S@
LTLIBOBJS = @LTLIBOBJS@
LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
LT_VERSION_INFO = @LT_VERSION_INFO@
MAINT = @MAINT@
MAKEINFO = @MAKEINFO@
@ -280,6 +292,7 @@ pdfdir = @pdfdir@
prefix = @prefix@
program_transform_name = @program_transform_name@
psdir = @psdir@
runstatedir = @runstatedir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
srcdir = @srcdir@
@ -309,14 +322,13 @@ $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__confi
echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu bin/Makefile'; \
$(am__cd) $(top_srcdir) && \
$(AUTOMAKE) --gnu bin/Makefile
.PRECIOUS: Makefile
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
@case '$?' in \
*config.status*) \
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
*) \
echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \
cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \
esac;
$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
@ -351,8 +363,14 @@ mostlyclean-compile:
distclean-compile:
-rm -f *.tab.c
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/devs.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sine.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/devs.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sine.Po@am__quote@ # am--include-marker
$(am__depfiles_remade):
@$(MKDIR_P) $(@D)
@echo '# dummy' >$@-t && $(am__mv) $@-t $@
am--depfiles: $(am__depfiles_remade)
.cxx.o:
@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
@ -460,8 +478,10 @@ cscopelist-am: $(am__tagged_files)
distclean-tags:
-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
distdir: $(BUILT_SOURCES)
$(MAKE) $(AM_MAKEFLAGS) distdir-am
distdir: $(DISTFILES)
distdir-am: $(DISTFILES)
@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
list='$(DISTFILES)'; \
@ -531,7 +551,8 @@ clean-am: clean-generic clean-libtool clean-noinstPROGRAMS \
mostlyclean-am
distclean: distclean-am
-rm -rf ./$(DEPDIR)
-rm -f ./$(DEPDIR)/devs.Po
-rm -f ./$(DEPDIR)/sine.Po
-rm -f Makefile
distclean-am: clean-am distclean-compile distclean-generic \
distclean-tags
@ -577,7 +598,8 @@ install-ps-am:
installcheck-am:
maintainer-clean: maintainer-clean-am
-rm -rf ./$(DEPDIR)
-rm -f ./$(DEPDIR)/devs.Po
-rm -f ./$(DEPDIR)/sine.Po
-rm -f Makefile
maintainer-clean-am: distclean-am maintainer-clean-generic
@ -598,9 +620,9 @@ uninstall-am:
.MAKE: install-am install-strip
.PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \
clean-libtool clean-noinstPROGRAMS cscopelist-am ctags \
ctags-am distclean distclean-compile distclean-generic \
.PHONY: CTAGS GTAGS TAGS all all-am am--depfiles check check-am clean \
clean-generic clean-libtool clean-noinstPROGRAMS cscopelist-am \
ctags ctags-am distclean distclean-compile distclean-generic \
distclean-libtool distclean-tags distdir dvi dvi-am html \
html-am info info-am install install-am install-data \
install-data-am install-dvi install-dvi-am install-exec \
@ -612,6 +634,8 @@ uninstall-am:
mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
tags tags-am uninstall uninstall-am
.PRECIOUS: Makefile
# Tell versions [3.59,3.63) of GNU make to not export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded.

Binary file not shown.

348
bindings/cpp/compile Executable file
View file

@ -0,0 +1,348 @@
#! /bin/sh
# Wrapper for compilers which do not understand '-c -o'.
scriptversion=2018-03-07.03; # UTC
# Copyright (C) 1999-2021 Free Software Foundation, Inc.
# Written by Tom Tromey <tromey@cygnus.com>.
#
# 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, 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, see <https://www.gnu.org/licenses/>.
# As a special exception to the GNU General Public License, if you
# distribute this file as part of a program that contains a
# configuration script generated by Autoconf, you may include it under
# the same distribution terms that you use for the rest of that program.
# This file is maintained in Automake, please report
# bugs to <bug-automake@gnu.org> or send patches to
# <automake-patches@gnu.org>.
nl='
'
# We need space, tab and new line, in precisely that order. Quoting is
# there to prevent tools from complaining about whitespace usage.
IFS=" "" $nl"
file_conv=
# func_file_conv build_file lazy
# Convert a $build file to $host form and store it in $file
# Currently only supports Windows hosts. If the determined conversion
# type is listed in (the comma separated) LAZY, no conversion will
# take place.
func_file_conv ()
{
file=$1
case $file in
/ | /[!/]*) # absolute file, and not a UNC file
if test -z "$file_conv"; then
# lazily determine how to convert abs files
case `uname -s` in
MINGW*)
file_conv=mingw
;;
CYGWIN* | MSYS*)
file_conv=cygwin
;;
*)
file_conv=wine
;;
esac
fi
case $file_conv/,$2, in
*,$file_conv,*)
;;
mingw/*)
file=`cmd //C echo "$file " | sed -e 's/"\(.*\) " *$/\1/'`
;;
cygwin/* | msys/*)
file=`cygpath -m "$file" || echo "$file"`
;;
wine/*)
file=`winepath -w "$file" || echo "$file"`
;;
esac
;;
esac
}
# func_cl_dashL linkdir
# Make cl look for libraries in LINKDIR
func_cl_dashL ()
{
func_file_conv "$1"
if test -z "$lib_path"; then
lib_path=$file
else
lib_path="$lib_path;$file"
fi
linker_opts="$linker_opts -LIBPATH:$file"
}
# func_cl_dashl library
# Do a library search-path lookup for cl
func_cl_dashl ()
{
lib=$1
found=no
save_IFS=$IFS
IFS=';'
for dir in $lib_path $LIB
do
IFS=$save_IFS
if $shared && test -f "$dir/$lib.dll.lib"; then
found=yes
lib=$dir/$lib.dll.lib
break
fi
if test -f "$dir/$lib.lib"; then
found=yes
lib=$dir/$lib.lib
break
fi
if test -f "$dir/lib$lib.a"; then
found=yes
lib=$dir/lib$lib.a
break
fi
done
IFS=$save_IFS
if test "$found" != yes; then
lib=$lib.lib
fi
}
# func_cl_wrapper cl arg...
# Adjust compile command to suit cl
func_cl_wrapper ()
{
# Assume a capable shell
lib_path=
shared=:
linker_opts=
for arg
do
if test -n "$eat"; then
eat=
else
case $1 in
-o)
# configure might choose to run compile as 'compile cc -o foo foo.c'.
eat=1
case $2 in
*.o | *.[oO][bB][jJ])
func_file_conv "$2"
set x "$@" -Fo"$file"
shift
;;
*)
func_file_conv "$2"
set x "$@" -Fe"$file"
shift
;;
esac
;;
-I)
eat=1
func_file_conv "$2" mingw
set x "$@" -I"$file"
shift
;;
-I*)
func_file_conv "${1#-I}" mingw
set x "$@" -I"$file"
shift
;;
-l)
eat=1
func_cl_dashl "$2"
set x "$@" "$lib"
shift
;;
-l*)
func_cl_dashl "${1#-l}"
set x "$@" "$lib"
shift
;;
-L)
eat=1
func_cl_dashL "$2"
;;
-L*)
func_cl_dashL "${1#-L}"
;;
-static)
shared=false
;;
-Wl,*)
arg=${1#-Wl,}
save_ifs="$IFS"; IFS=','
for flag in $arg; do
IFS="$save_ifs"
linker_opts="$linker_opts $flag"
done
IFS="$save_ifs"
;;
-Xlinker)
eat=1
linker_opts="$linker_opts $2"
;;
-*)
set x "$@" "$1"
shift
;;
*.cc | *.CC | *.cxx | *.CXX | *.[cC]++)
func_file_conv "$1"
set x "$@" -Tp"$file"
shift
;;
*.c | *.cpp | *.CPP | *.lib | *.LIB | *.Lib | *.OBJ | *.obj | *.[oO])
func_file_conv "$1" mingw
set x "$@" "$file"
shift
;;
*)
set x "$@" "$1"
shift
;;
esac
fi
shift
done
if test -n "$linker_opts"; then
linker_opts="-link$linker_opts"
fi
exec "$@" $linker_opts
exit 1
}
eat=
case $1 in
'')
echo "$0: No command. Try '$0 --help' for more information." 1>&2
exit 1;
;;
-h | --h*)
cat <<\EOF
Usage: compile [--help] [--version] PROGRAM [ARGS]
Wrapper for compilers which do not understand '-c -o'.
Remove '-o dest.o' from ARGS, run PROGRAM with the remaining
arguments, and rename the output as expected.
If you are trying to build a whole package this is not the
right script to run: please start by reading the file 'INSTALL'.
Report bugs to <bug-automake@gnu.org>.
EOF
exit $?
;;
-v | --v*)
echo "compile $scriptversion"
exit $?
;;
cl | *[/\\]cl | cl.exe | *[/\\]cl.exe | \
icl | *[/\\]icl | icl.exe | *[/\\]icl.exe )
func_cl_wrapper "$@" # Doesn't return...
;;
esac
ofile=
cfile=
for arg
do
if test -n "$eat"; then
eat=
else
case $1 in
-o)
# configure might choose to run compile as 'compile cc -o foo foo.c'.
# So we strip '-o arg' only if arg is an object.
eat=1
case $2 in
*.o | *.obj)
ofile=$2
;;
*)
set x "$@" -o "$2"
shift
;;
esac
;;
*.c)
cfile=$1
set x "$@" "$1"
shift
;;
*)
set x "$@" "$1"
shift
;;
esac
fi
shift
done
if test -z "$ofile" || test -z "$cfile"; then
# If no '-o' option was seen then we might have been invoked from a
# pattern rule where we don't need one. That is ok -- this is a
# normal compilation that the losing compiler can handle. If no
# '.c' file was seen then we are probably linking. That is also
# ok.
exec "$@"
fi
# Name of file we expect compiler to create.
cofile=`echo "$cfile" | sed 's|^.*[\\/]||; s|^[a-zA-Z]:||; s/\.c$/.o/'`
# Create the lock directory.
# Note: use '[/\\:.-]' here to ensure that we don't use the same name
# that we are using for the .o file. Also, base the name on the expected
# object file name, since that is what matters with a parallel build.
lockdir=`echo "$cofile" | sed -e 's|[/\\:.-]|_|g'`.d
while true; do
if mkdir "$lockdir" >/dev/null 2>&1; then
break
fi
sleep 1
done
# FIXME: race condition here if user kills between mkdir and trap.
trap "rmdir '$lockdir'; exit 1" 1 2 15
# Run the compile.
"$@"
ret=$?
if test -f "$cofile"; then
test "$cofile" = "$ofile" || mv "$cofile" "$ofile"
elif test -f "${cofile}bj"; then
test "${cofile}bj" = "$ofile" || mv "${cofile}bj" "$ofile"
fi
rmdir "$lockdir"
exit $ret
# Local Variables:
# mode: shell-script
# sh-indentation: 2
# eval: (add-hook 'before-save-hook 'time-stamp)
# time-stamp-start: "scriptversion="
# time-stamp-format: "%:y-%02m-%02d.%02H"
# time-stamp-time-zone: "UTC0"
# time-stamp-end: "; # UTC"
# End:

BIN
bindings/cpp/config.guess vendored Executable file

Binary file not shown.

BIN
bindings/cpp/config.sub vendored Executable file

Binary file not shown.

BIN
bindings/cpp/configure vendored

Binary file not shown.

19376
bindings/cpp/configure~ Normal file

File diff suppressed because it is too large Load diff

Binary file not shown.

View file

@ -1,7 +1,7 @@
# Makefile.in generated by automake 1.14.1 from Makefile.am.
# Makefile.in generated by automake 1.16.5 from Makefile.am.
# @configure_input@
# Copyright (C) 1994-2013 Free Software Foundation, Inc.
# Copyright (C) 1994-2021 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
@ -14,7 +14,17 @@
@SET_MAKE@
VPATH = @srcdir@
am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)'
am__is_gnu_make = { \
if test -z '$(MAKELEVEL)'; then \
false; \
elif test -n '$(MAKE_HOST)'; then \
true; \
elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
true; \
else \
false; \
fi; \
}
am__make_running_with_option = \
case $${target_option-} in \
?) ;; \
@ -78,11 +88,11 @@ POST_UNINSTALL = :
build_triplet = @build@
host_triplet = @host@
subdir = doc
DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am README
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
mkinstalldirs = $(install_sh) -d
CONFIG_CLEAN_FILES =
CONFIG_CLEAN_VPATH_FILES =
@ -106,6 +116,7 @@ am__can_run_installinfo = \
*) (install-info --version) >/dev/null 2>&1;; \
esac
am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
am__DIST_COMMON = $(srcdir)/Makefile.in README
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
ACLOCAL = @ACLOCAL@
AMTAR = @AMTAR@
@ -119,8 +130,9 @@ AWK = @AWK@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
CPP = @CPP@
CPPFLAGS = @CPPFLAGS@
CSCOPE = @CSCOPE@
CTAGS = @CTAGS@
CXX = @CXX@
CXXCPP = @CXXCPP@
CXXDEPMODE = @CXXDEPMODE@
@ -136,6 +148,7 @@ ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
EGREP = @EGREP@
ETAGS = @ETAGS@
EXEEXT = @EXEEXT@
FGREP = @FGREP@
GREP = @GREP@
@ -152,6 +165,7 @@ LIBTOOL = @LIBTOOL@
LIPO = @LIPO@
LN_S = @LN_S@
LTLIBOBJS = @LTLIBOBJS@
LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
LT_VERSION_INFO = @LT_VERSION_INFO@
MAINT = @MAINT@
MAKEINFO = @MAKEINFO@
@ -223,6 +237,7 @@ pdfdir = @pdfdir@
prefix = @prefix@
program_transform_name = @program_transform_name@
psdir = @psdir@
runstatedir = @runstatedir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
srcdir = @srcdir@
@ -247,14 +262,13 @@ $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__confi
echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu doc/Makefile'; \
$(am__cd) $(top_srcdir) && \
$(AUTOMAKE) --gnu doc/Makefile
.PRECIOUS: Makefile
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
@case '$?' in \
*config.status*) \
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
*) \
echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \
cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \
esac;
$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
@ -277,8 +291,10 @@ ctags CTAGS:
cscope cscopelist:
distdir: $(BUILT_SOURCES)
$(MAKE) $(AM_MAKEFLAGS) distdir-am
distdir: $(DISTFILES)
distdir-am: $(DISTFILES)
@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
list='$(DISTFILES)'; \
@ -422,6 +438,8 @@ uninstall-am:
mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
tags-am uninstall uninstall-am
.PRECIOUS: Makefile
#INCLUDES = -I$(srcdir)/$(PACPP_ROOT)/include -I$(top_srcdir)/include
docs:

View file

@ -8,44 +8,44 @@
// ---------------------------------------------------------------------------------------
void printSupportedStandardSampleRates(
const portaudio::DirectionSpecificStreamParameters &inputParameters,
const portaudio::DirectionSpecificStreamParameters &outputParameters)
const portaudio::DirectionSpecificStreamParameters &inputParameters,
const portaudio::DirectionSpecificStreamParameters &outputParameters)
{
static double STANDARD_SAMPLE_RATES[] = {
8000.0, 9600.0, 11025.0, 12000.0, 16000.0, 22050.0, 24000.0, 32000.0,
44100.0, 48000.0, 88200.0, 96000.0, -1 }; // negative terminated list
static double STANDARD_SAMPLE_RATES[] = {
8000.0, 9600.0, 11025.0, 12000.0, 16000.0, 22050.0, 24000.0, 32000.0,
44100.0, 48000.0, 88200.0, 96000.0, -1 }; // negative terminated list
int printCount = 0;
int printCount = 0;
for (int i = 0; STANDARD_SAMPLE_RATES[i] > 0; ++i)
{
portaudio::StreamParameters tmp = portaudio::StreamParameters(inputParameters, outputParameters, STANDARD_SAMPLE_RATES[i], 0, paNoFlag);
for (int i = 0; STANDARD_SAMPLE_RATES[i] > 0; ++i)
{
portaudio::StreamParameters tmp = portaudio::StreamParameters(inputParameters, outputParameters, STANDARD_SAMPLE_RATES[i], 0, paNoFlag);
if (tmp.isSupported())
{
if (printCount == 0)
{
std::cout << " " << STANDARD_SAMPLE_RATES[i]; // 8.2
printCount = 1;
}
else if (printCount == 4)
{
std::cout << "," << std::endl;
std::cout << " " << STANDARD_SAMPLE_RATES[i]; // 8.2
printCount = 1;
}
else
{
std::cout << ", " << STANDARD_SAMPLE_RATES[i]; // 8.2
++printCount;
}
}
}
if (tmp.isSupported())
{
if (printCount == 0)
{
std::cout << " " << STANDARD_SAMPLE_RATES[i]; // 8.2
printCount = 1;
}
else if (printCount == 4)
{
std::cout << "," << std::endl;
std::cout << " " << STANDARD_SAMPLE_RATES[i]; // 8.2
printCount = 1;
}
else
{
std::cout << ", " << STANDARD_SAMPLE_RATES[i]; // 8.2
++printCount;
}
}
}
if (printCount == 0)
std::cout << "None" << std::endl;
else
std::cout << std::endl;
if (printCount == 0)
std::cout << "None" << std::endl;
else
std::cout << std::endl;
}
// ---------------------------------------------------------------------------------------
@ -53,125 +53,125 @@ void printSupportedStandardSampleRates(
int main(int, char*[]);
int main(int, char*[])
{
try
{
portaudio::AutoSystem autoSys;
try
{
portaudio::AutoSystem autoSys;
portaudio::System &sys = portaudio::System::instance();
portaudio::System &sys = portaudio::System::instance();
std::cout << "PortAudio version number = " << sys.version() << std::endl;
std::cout << "PortAudio version text = '" << sys.versionText() << "'" << std::endl;
std::cout << "PortAudio version number = " << sys.version() << std::endl;
std::cout << "PortAudio version text = '" << sys.versionText() << "'" << std::endl;
int numDevices = sys.deviceCount();
std::cout << "Number of devices = " << numDevices << std::endl;
int numDevices = sys.deviceCount();
std::cout << "Number of devices = " << numDevices << std::endl;
for (portaudio::System::DeviceIterator i = sys.devicesBegin(); i != sys.devicesEnd(); ++i)
{
std::cout << "--------------------------------------- device #" << (*i).index() << std::endl;
for (portaudio::System::DeviceIterator i = sys.devicesBegin(); i != sys.devicesEnd(); ++i)
{
std::cout << "--------------------------------------- device #" << (*i).index() << std::endl;
// Mark global and API specific default devices:
bool defaultDisplayed = false;
// Mark global and API specific default devices:
bool defaultDisplayed = false;
if ((*i).isSystemDefaultInputDevice())
{
std::cout << "[ Default Input";
defaultDisplayed = true;
}
else if ((*i).isHostApiDefaultInputDevice())
{
std::cout << "[ Default " << (*i).hostApi().name() << " Input";
defaultDisplayed = true;
}
if ((*i).isSystemDefaultInputDevice())
{
std::cout << "[ Default Input";
defaultDisplayed = true;
}
else if ((*i).isHostApiDefaultInputDevice())
{
std::cout << "[ Default " << (*i).hostApi().name() << " Input";
defaultDisplayed = true;
}
if ((*i).isSystemDefaultOutputDevice())
{
std::cout << (defaultDisplayed ? "," : "[");
std::cout << " Default Output";
defaultDisplayed = true;
}
else if ((*i).isHostApiDefaultOutputDevice())
{
std::cout << (defaultDisplayed ? "," : "[");
std::cout << " Default " << (*i).hostApi().name() << " Output";
defaultDisplayed = true;
}
if (defaultDisplayed)
std::cout << " ]" << std::endl;
if ((*i).isSystemDefaultOutputDevice())
{
std::cout << (defaultDisplayed ? "," : "[");
std::cout << " Default Output";
defaultDisplayed = true;
}
else if ((*i).isHostApiDefaultOutputDevice())
{
std::cout << (defaultDisplayed ? "," : "[");
std::cout << " Default " << (*i).hostApi().name() << " Output";
defaultDisplayed = true;
}
// Print device info:
std::cout << "Name = " << (*i).name() << std::endl;
std::cout << "Host API = " << (*i).hostApi().name() << std::endl;
std::cout << "Max inputs = " << (*i).maxInputChannels() << ", Max outputs = " << (*i).maxOutputChannels() << std::endl;
if (defaultDisplayed)
std::cout << " ]" << std::endl;
std::cout << "Default low input latency = " << (*i).defaultLowInputLatency() << std::endl; // 8.3
std::cout << "Default low output latency = " << (*i).defaultLowOutputLatency() << std::endl; // 8.3
std::cout << "Default high input latency = " << (*i).defaultHighInputLatency() << std::endl; // 8.3
std::cout << "Default high output latency = " << (*i).defaultHighOutputLatency() << std::endl; // 8.3
// Print device info:
std::cout << "Name = " << (*i).name() << std::endl;
std::cout << "Host API = " << (*i).hostApi().name() << std::endl;
std::cout << "Max inputs = " << (*i).maxInputChannels() << ", Max outputs = " << (*i).maxOutputChannels() << std::endl;
std::cout << "Default low input latency = " << (*i).defaultLowInputLatency() << std::endl; // 8.3
std::cout << "Default low output latency = " << (*i).defaultLowOutputLatency() << std::endl; // 8.3
std::cout << "Default high input latency = " << (*i).defaultHighInputLatency() << std::endl; // 8.3
std::cout << "Default high output latency = " << (*i).defaultHighOutputLatency() << std::endl; // 8.3
#ifdef WIN32
// ASIO specific latency information:
if ((*i).hostApi().typeId() == paASIO)
{
portaudio::AsioDeviceAdapter asioDevice((*i));
// ASIO specific latency information:
if ((*i).hostApi().typeId() == paASIO)
{
portaudio::AsioDeviceAdapter asioDevice((*i));
std::cout << "ASIO minimum buffer size = " << asioDevice.minBufferSize() << std::endl;
std::cout << "ASIO maximum buffer size = " << asioDevice.maxBufferSize() << std::endl;
std::cout << "ASIO preferred buffer size = " << asioDevice.preferredBufferSize() << std::endl;
std::cout << "ASIO minimum buffer size = " << asioDevice.minBufferSize() << std::endl;
std::cout << "ASIO maximum buffer size = " << asioDevice.maxBufferSize() << std::endl;
std::cout << "ASIO preferred buffer size = " << asioDevice.preferredBufferSize() << std::endl;
if (asioDevice.granularity() == -1)
std::cout << "ASIO buffer granularity = power of 2" << std::endl;
else
std::cout << "ASIO buffer granularity = " << asioDevice.granularity() << std::endl;
}
if (asioDevice.granularity() == -1)
std::cout << "ASIO buffer granularity = power of 2" << std::endl;
else
std::cout << "ASIO buffer granularity = " << asioDevice.granularity() << std::endl;
}
#endif // WIN32
std::cout << "Default sample rate = " << (*i).defaultSampleRate() << std::endl; // 8.2
std::cout << "Default sample rate = " << (*i).defaultSampleRate() << std::endl; // 8.2
// Poll for standard sample rates:
portaudio::DirectionSpecificStreamParameters inputParameters((*i), (*i).maxInputChannels(), portaudio::INT16, true, 0.0, NULL);
portaudio::DirectionSpecificStreamParameters outputParameters((*i), (*i).maxOutputChannels(), portaudio::INT16, true, 0.0, NULL);
// Poll for standard sample rates:
portaudio::DirectionSpecificStreamParameters inputParameters((*i), (*i).maxInputChannels(), portaudio::INT16, true, 0.0, NULL);
portaudio::DirectionSpecificStreamParameters outputParameters((*i), (*i).maxOutputChannels(), portaudio::INT16, true, 0.0, NULL);
if (inputParameters.numChannels() > 0)
{
std::cout << "Supported standard sample rates" << std::endl;
std::cout << " for half-duplex 16 bit " << inputParameters.numChannels() << " channel input = " << std::endl;
printSupportedStandardSampleRates(inputParameters, portaudio::DirectionSpecificStreamParameters::null());
}
if (inputParameters.numChannels() > 0)
{
std::cout << "Supported standard sample rates" << std::endl;
std::cout << " for half-duplex 16 bit " << inputParameters.numChannels() << " channel input = " << std::endl;
printSupportedStandardSampleRates(inputParameters, portaudio::DirectionSpecificStreamParameters::null());
}
if (outputParameters.numChannels() > 0)
{
std::cout << "Supported standard sample rates" << std::endl;
std::cout << " for half-duplex 16 bit " << outputParameters.numChannels() << " channel output = " << std::endl;
printSupportedStandardSampleRates(portaudio::DirectionSpecificStreamParameters::null(), outputParameters);
}
if (outputParameters.numChannels() > 0)
{
std::cout << "Supported standard sample rates" << std::endl;
std::cout << " for half-duplex 16 bit " << outputParameters.numChannels() << " channel output = " << std::endl;
printSupportedStandardSampleRates(portaudio::DirectionSpecificStreamParameters::null(), outputParameters);
}
if (inputParameters.numChannels() > 0 && outputParameters.numChannels() > 0)
{
std::cout << "Supported standard sample rates" << std::endl;
std::cout << " for full-duplex 16 bit " << inputParameters.numChannels() << " channel input, " << outputParameters.numChannels() << " channel output = " << std::endl;
printSupportedStandardSampleRates(inputParameters, outputParameters);
}
}
if (inputParameters.numChannels() > 0 && outputParameters.numChannels() > 0)
{
std::cout << "Supported standard sample rates" << std::endl;
std::cout << " for full-duplex 16 bit " << inputParameters.numChannels() << " channel input, " << outputParameters.numChannels() << " channel output = " << std::endl;
printSupportedStandardSampleRates(inputParameters, outputParameters);
}
}
std::cout << "----------------------------------------------" << std::endl;
}
catch (const portaudio::PaException &e)
{
std::cout << "A PortAudio error occured: " << e.paErrorText() << std::endl;
}
catch (const portaudio::PaCppException &e)
{
std::cout << "A PortAudioCpp error occured: " << e.what() << std::endl;
}
catch (const std::exception &e)
{
std::cout << "A generic exception occured: " << e.what() << std::endl;
}
catch (...)
{
std::cout << "An unknown exception occured." << std::endl;
}
std::cout << "----------------------------------------------" << std::endl;
}
catch (const portaudio::PaException &e)
{
std::cout << "A PortAudio error occurred: " << e.paErrorText() << std::endl;
}
catch (const portaudio::PaCppException &e)
{
std::cout << "A PortAudioCpp error occurred: " << e.what() << std::endl;
}
catch (const std::exception &e)
{
std::cout << "A generic exception occurred: " << e.what() << std::endl;
}
catch (...)
{
std::cout << "An unknown exception occurred." << std::endl;
}
return 0;
return 0;
}

View file

@ -20,50 +20,50 @@ const int TABLE_SIZE = 200;
class SineGenerator
{
public:
SineGenerator(int tableSize) : tableSize_(tableSize), leftPhase_(0), rightPhase_(0)
{
const double PI = 3.14159265;
table_ = new float[tableSize];
for (int i = 0; i < tableSize; ++i)
{
table_[i] = 0.125f * (float)sin(((double)i/(double)tableSize)*PI*2.);
}
}
SineGenerator(int tableSize) : tableSize_(tableSize), leftPhase_(0), rightPhase_(0)
{
const double PI = 3.14159265;
table_ = new float[tableSize];
for (int i = 0; i < tableSize; ++i)
{
table_[i] = 0.125f * (float)sin(((double)i/(double)tableSize)*PI*2.);
}
}
~SineGenerator()
{
delete[] table_;
}
~SineGenerator()
{
delete[] table_;
}
int generate(const void *inputBuffer, void *outputBuffer, unsigned long framesPerBuffer,
const PaStreamCallbackTimeInfo *timeInfo, PaStreamCallbackFlags statusFlags)
{
assert(outputBuffer != NULL);
int generate(const void *inputBuffer, void *outputBuffer, unsigned long framesPerBuffer,
const PaStreamCallbackTimeInfo *timeInfo, PaStreamCallbackFlags statusFlags)
{
assert(outputBuffer != NULL);
float **out = static_cast<float **>(outputBuffer);
float **out = static_cast<float **>(outputBuffer);
for (unsigned int i = 0; i < framesPerBuffer; ++i)
{
out[0][i] = table_[leftPhase_];
out[1][i] = table_[rightPhase_];
for (unsigned int i = 0; i < framesPerBuffer; ++i)
{
out[0][i] = table_[leftPhase_];
out[1][i] = table_[rightPhase_];
leftPhase_ += 1;
if (leftPhase_ >= tableSize_)
leftPhase_ -= tableSize_;
leftPhase_ += 1;
if (leftPhase_ >= tableSize_)
leftPhase_ -= tableSize_;
rightPhase_ += 3;
if (rightPhase_ >= tableSize_)
rightPhase_ -= tableSize_;
}
rightPhase_ += 3;
if (rightPhase_ >= tableSize_)
rightPhase_ -= tableSize_;
}
return paContinue;
}
return paContinue;
}
private:
float *table_;
int tableSize_;
int leftPhase_;
int rightPhase_;
float *table_;
int tableSize_;
int leftPhase_;
int rightPhase_;
};
// ---------------------------------------------------------------------------------------
@ -72,66 +72,64 @@ private:
int main(int, char *[]);
int main(int, char *[])
{
try
{
// Create a SineGenerator object:
SineGenerator sineGenerator(TABLE_SIZE);
try
{
// Create a SineGenerator object:
SineGenerator sineGenerator(TABLE_SIZE);
std::cout << "Setting up PortAudio..." << std::endl;
std::cout << "Setting up PortAudio..." << std::endl;
// Set up the System:
portaudio::AutoSystem autoSys;
portaudio::System &sys = portaudio::System::instance();
// Set up the System:
portaudio::AutoSystem autoSys;
portaudio::System &sys = portaudio::System::instance();
// Set up the parameters required to open a (Callback)Stream:
portaudio::DirectionSpecificStreamParameters outParams(sys.defaultOutputDevice(), 2, portaudio::FLOAT32, false, sys.defaultOutputDevice().defaultLowOutputLatency(), NULL);
portaudio::StreamParameters params(portaudio::DirectionSpecificStreamParameters::null(), outParams, SAMPLE_RATE, FRAMES_PER_BUFFER, paClipOff);
// Set up the parameters required to open a (Callback)Stream:
portaudio::DirectionSpecificStreamParameters outParams(sys.defaultOutputDevice(), 2, portaudio::FLOAT32, false, sys.defaultOutputDevice().defaultLowOutputLatency(), NULL);
portaudio::StreamParameters params(portaudio::DirectionSpecificStreamParameters::null(), outParams, SAMPLE_RATE, FRAMES_PER_BUFFER, paClipOff);
std::cout << "Opening stereo output stream..." << std::endl;
std::cout << "Opening stereo output stream..." << std::endl;
// Create (and open) a new Stream, using the SineGenerator::generate function as a callback:
portaudio::MemFunCallbackStream<SineGenerator> stream(params, sineGenerator, &SineGenerator::generate);
// Create (and open) a new Stream, using the SineGenerator::generate function as a callback:
portaudio::MemFunCallbackStream<SineGenerator> stream(params, sineGenerator, &SineGenerator::generate);
std::cout << "Starting playback for " << NUM_SECONDS << " seconds." << std::endl;
std::cout << "Starting playback for " << NUM_SECONDS << " seconds." << std::endl;
// Start the Stream (audio playback starts):
stream.start();
// Start the Stream (audio playback starts):
stream.start();
// Wait for 5 seconds:
sys.sleep(NUM_SECONDS * 1000);
// Wait for 5 seconds:
sys.sleep(NUM_SECONDS * 1000);
std::cout << "Closing stream..." <<std::endl;
std::cout << "Closing stream..." <<std::endl;
// Stop the Stream (not strictly needed as termintating the System will also stop all open Streams):
stream.stop();
// Stop the Stream (not strictly needed as termintating the System will also stop all open Streams):
stream.stop();
// Close the Stream (not strictly needed as terminating the System will also close all open Streams):
stream.close();
// Close the Stream (not strictly needed as terminating the System will also close all open Streams):
stream.close();
// Terminate the System (not strictly needed as the AutoSystem will also take care of this when it
// goes out of scope):
sys.terminate();
// Terminate the System (not strictly needed as the AutoSystem will also take care of this when it
// goes out of scope):
sys.terminate();
std::cout << "Test finished." << std::endl;
}
catch (const portaudio::PaException &e)
{
std::cout << "A PortAudio error occured: " << e.paErrorText() << std::endl;
}
catch (const portaudio::PaCppException &e)
{
std::cout << "A PortAudioCpp error occured: " << e.what() << std::endl;
}
catch (const std::exception &e)
{
std::cout << "A generic exception occured: " << e.what() << std::endl;
}
catch (...)
{
std::cout << "An unknown exception occured." << std::endl;
}
std::cout << "Test finished." << std::endl;
}
catch (const portaudio::PaException &e)
{
std::cout << "A PortAudio error occurred: " << e.paErrorText() << std::endl;
}
catch (const portaudio::PaCppException &e)
{
std::cout << "A PortAudioCpp error occurred: " << e.what() << std::endl;
}
catch (const std::exception &e)
{
std::cout << "A generic exception occurred: " << e.what() << std::endl;
}
catch (...)
{
std::cout << "An unknown exception occurred." << std::endl;
}
return 0;
return 0;
}

View file

@ -1,7 +1,7 @@
# Makefile.in generated by automake 1.14.1 from Makefile.am.
# Makefile.in generated by automake 1.16.5 from Makefile.am.
# @configure_input@
# Copyright (C) 1994-2013 Free Software Foundation, Inc.
# Copyright (C) 1994-2021 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
@ -15,7 +15,17 @@
@SET_MAKE@
VPATH = @srcdir@
am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)'
am__is_gnu_make = { \
if test -z '$(MAKELEVEL)'; then \
false; \
elif test -n '$(MAKE_HOST)'; then \
true; \
elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
true; \
else \
false; \
fi; \
}
am__make_running_with_option = \
case $${target_option-} in \
?) ;; \
@ -79,12 +89,12 @@ POST_UNINSTALL = :
build_triplet = @build@
host_triplet = @host@
subdir = include
DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \
$(pkginclude_HEADERS)
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
DIST_COMMON = $(srcdir)/Makefile.am $(pkginclude_HEADERS) \
$(am__DIST_COMMON)
mkinstalldirs = $(install_sh) -d
CONFIG_CLEAN_FILES =
CONFIG_CLEAN_VPATH_FILES =
@ -153,8 +163,7 @@ am__define_uniq_tagged_files = \
unique=`for i in $$list; do \
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
done | $(am__uniquify_input)`
ETAGS = etags
CTAGS = ctags
am__DIST_COMMON = $(srcdir)/Makefile.in
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
ACLOCAL = @ACLOCAL@
AMTAR = @AMTAR@
@ -168,8 +177,9 @@ AWK = @AWK@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
CPP = @CPP@
CPPFLAGS = @CPPFLAGS@
CSCOPE = @CSCOPE@
CTAGS = @CTAGS@
CXX = @CXX@
CXXCPP = @CXXCPP@
CXXDEPMODE = @CXXDEPMODE@
@ -185,6 +195,7 @@ ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
EGREP = @EGREP@
ETAGS = @ETAGS@
EXEEXT = @EXEEXT@
FGREP = @FGREP@
GREP = @GREP@
@ -201,6 +212,7 @@ LIBTOOL = @LIBTOOL@
LIPO = @LIPO@
LN_S = @LN_S@
LTLIBOBJS = @LTLIBOBJS@
LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
LT_VERSION_INFO = @LT_VERSION_INFO@
MAINT = @MAINT@
MAKEINFO = @MAKEINFO@
@ -272,6 +284,7 @@ pdfdir = @pdfdir@
prefix = @prefix@
program_transform_name = @program_transform_name@
psdir = @psdir@
runstatedir = @runstatedir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
srcdir = @srcdir@
@ -316,14 +329,13 @@ $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__confi
echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu include/Makefile'; \
$(am__cd) $(top_srcdir) && \
$(AUTOMAKE) --gnu include/Makefile
.PRECIOUS: Makefile
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
@case '$?' in \
*config.status*) \
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
*) \
echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \
cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \
esac;
$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
@ -413,8 +425,10 @@ cscopelist-am: $(am__tagged_files)
distclean-tags:
-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
distdir: $(BUILT_SOURCES)
$(MAKE) $(AM_MAKEFLAGS) distdir-am
distdir: $(DISTFILES)
distdir-am: $(DISTFILES)
@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
list='$(DISTFILES)'; \
@ -563,6 +577,8 @@ uninstall-am: uninstall-pkgincludeHEADERS
ps ps-am tags tags-am uninstall uninstall-am \
uninstall-pkgincludeHEADERS
.PRECIOUS: Makefile
# portaudiocpp/AsioDeviceAdapter.hxx

View file

@ -4,41 +4,41 @@
namespace portaudio
{
// Forward declaration(s):
class Device;
// Forward declaration(s):
class Device;
// Declaration(s):
//////
/// @brief Adapts the given Device to an ASIO specific extension.
///
/// Deleting the AsioDeviceAdapter does not affect the underlaying
/// Device.
//////
class AsioDeviceAdapter
{
public:
AsioDeviceAdapter(Device &device);
// Declaration(s):
//////
/// @brief Adapts the given Device to an ASIO specific extension.
///
/// Deleting the AsioDeviceAdapter does not affect the underlying
/// Device.
//////
class AsioDeviceAdapter
{
public:
AsioDeviceAdapter(Device &device);
Device &device();
Device &device();
long minBufferSize() const;
long maxBufferSize() const;
long preferredBufferSize() const;
long granularity() const;
long minBufferSize() const;
long maxBufferSize() const;
long preferredBufferSize() const;
long granularity() const;
void showControlPanel(void *systemSpecific);
void showControlPanel(void *systemSpecific);
const char *inputChannelName(int channelIndex) const;
const char *outputChannelName(int channelIndex) const;
const char *inputChannelName(int channelIndex) const;
const char *outputChannelName(int channelIndex) const;
private:
Device *device_;
private:
Device *device_;
long minBufferSize_;
long maxBufferSize_;
long preferredBufferSize_;
long granularity_;
};
long minBufferSize_;
long maxBufferSize_;
long preferredBufferSize_;
long granularity_;
};
}
#endif // INCLUDED_PORTAUDIO_ASIODEVICEADAPTER_HXX

View file

@ -11,48 +11,48 @@ namespace portaudio
{
//////
/// @brief A RAII idiom class to ensure automatic clean-up when an exception is
/// raised.
///
/// A simple helper class which uses the 'Resource Acquisition is Initialization'
/// idiom (RAII). Use this class to initialize/terminate the System rather than
/// using System directly. AutoSystem must be created on stack and must be valid
/// throughout the time you wish to use PortAudioCpp. Your 'main' function might be
/// a good place for it.
///
/// To avoid having to type portaudio::System::instance().xyz() all the time, it's usually
/// a good idea to make a reference to the System which can be accessed directly.
/// @verbatim
/// portaudio::AutoSys autoSys;
/// portaudio::System &sys = portaudio::System::instance();
/// @endverbatim
//////
class AutoSystem
{
public:
AutoSystem(bool initialize = true)
{
if (initialize)
System::initialize();
}
//////
/// @brief A RAII idiom class to ensure automatic clean-up when an exception is
/// raised.
///
/// A simple helper class which uses the 'Resource Acquisition is Initialization'
/// idiom (RAII). Use this class to initialize/terminate the System rather than
/// using System directly. AutoSystem must be created on stack and must be valid
/// throughout the time you wish to use PortAudioCpp. Your 'main' function might be
/// a good place for it.
///
/// To avoid having to type portaudio::System::instance().xyz() all the time, it's usually
/// a good idea to make a reference to the System which can be accessed directly.
/// @verbatim
/// portaudio::AutoSys autoSys;
/// portaudio::System &sys = portaudio::System::instance();
/// @endverbatim
//////
class AutoSystem
{
public:
AutoSystem(bool initialize = true)
{
if (initialize)
System::initialize();
}
~AutoSystem()
{
if (System::exists())
System::terminate();
}
~AutoSystem()
{
if (System::exists())
System::terminate();
}
void initialize()
{
System::initialize();
}
void initialize()
{
System::initialize();
}
void terminate()
{
System::terminate();
}
};
void terminate()
{
System::terminate();
}
};
} // namespace portaudio

View file

@ -12,28 +12,28 @@ namespace portaudio
//////
/// @brief Stream class for blocking read/write-style input and output.
//////
class BlockingStream : public Stream
{
public:
BlockingStream();
BlockingStream(const StreamParameters &parameters);
~BlockingStream();
//////
/// @brief Stream class for blocking read/write-style input and output.
//////
class BlockingStream : public Stream
{
public:
BlockingStream();
BlockingStream(const StreamParameters &parameters);
~BlockingStream();
void open(const StreamParameters &parameters);
void open(const StreamParameters &parameters);
void read(void *buffer, unsigned long numFrames);
void write(const void *buffer, unsigned long numFrames);
void read(void *buffer, unsigned long numFrames);
void write(const void *buffer, unsigned long numFrames);
signed long availableReadSize() const;
signed long availableWriteSize() const;
signed long availableReadSize() const;
signed long availableWriteSize() const;
private:
BlockingStream(const BlockingStream &); // non-copyable
BlockingStream &operator=(const BlockingStream &); // non-copyable
};
private:
BlockingStream(const BlockingStream &); // non-copyable
BlockingStream &operator=(const BlockingStream &); // non-copyable
};
@ -42,4 +42,3 @@ namespace portaudio
// ---------------------------------------------------------------------------------------
#endif // INCLUDED_PORTAUDIO_BLOCKINGSTREAM_HXX

View file

@ -12,7 +12,7 @@
// Forward declaration(s)
namespace portaudio
{
class StreamParameters;
class StreamParameters;
}
// ---------------------------------------------------------------------------------------
@ -20,30 +20,29 @@ namespace portaudio
// Declaration(s):
namespace portaudio
{
// -----------------------------------------------------------------------------------
// -----------------------------------------------------------------------------------
//////
/// @brief Callback stream using a free function with C linkage. It's important that the function
/// the passed function pointer points to is declared ``extern "C"''.
//////
class CFunCallbackStream : public CallbackStream
{
public:
CFunCallbackStream();
CFunCallbackStream(const StreamParameters &parameters, PaStreamCallback *funPtr, void *userData);
~CFunCallbackStream();
void open(const StreamParameters &parameters, PaStreamCallback *funPtr, void *userData);
//////
/// @brief Callback stream using a free function with C linkage. It's important that the function
/// the passed function pointer points to is declared ``extern "C"''.
//////
class CFunCallbackStream : public CallbackStream
{
public:
CFunCallbackStream();
CFunCallbackStream(const StreamParameters &parameters, PaStreamCallback *funPtr, void *userData);
~CFunCallbackStream();
private:
CFunCallbackStream(const CFunCallbackStream &); // non-copyable
CFunCallbackStream &operator=(const CFunCallbackStream &); // non-copyable
};
void open(const StreamParameters &parameters, PaStreamCallback *funPtr, void *userData);
// -----------------------------------------------------------------------------------
private:
CFunCallbackStream(const CFunCallbackStream &); // non-copyable
CFunCallbackStream &operator=(const CFunCallbackStream &); // non-copyable
};
// -----------------------------------------------------------------------------------
} // portaudio
// ---------------------------------------------------------------------------------------
#endif // INCLUDED_PORTAUDIO_MEMFUNCALLBACKSTREAM_HXX

View file

@ -9,34 +9,34 @@
namespace portaudio
{
// -----------------------------------------------------------------------------------
// -----------------------------------------------------------------------------------
//////
/// @brief Interface for an object that's callable as a PortAudioCpp callback object (ie that implements the
/// paCallbackFun method).
//////
class CallbackInterface
{
public:
virtual ~CallbackInterface() {}
//////
/// @brief Interface for an object that's callable as a PortAudioCpp callback object (ie that implements the
/// paCallbackFun method).
//////
class CallbackInterface
{
public:
virtual ~CallbackInterface() {}
virtual int paCallbackFun(const void *inputBuffer, void *outputBuffer, unsigned long numFrames,
const PaStreamCallbackTimeInfo *timeInfo, PaStreamCallbackFlags statusFlags) = 0;
};
virtual int paCallbackFun(const void *inputBuffer, void *outputBuffer, unsigned long numFrames,
const PaStreamCallbackTimeInfo *timeInfo, PaStreamCallbackFlags statusFlags) = 0;
};
// -----------------------------------------------------------------------------------
// -----------------------------------------------------------------------------------
namespace impl
{
extern "C"
{
int callbackInterfaceToPaCallbackAdapter(const void *inputBuffer, void *outputBuffer, unsigned long numFrames,
const PaStreamCallbackTimeInfo *timeInfo, PaStreamCallbackFlags statusFlags,
void *userData);
} // extern "C"
}
namespace impl
{
extern "C"
{
int callbackInterfaceToPaCallbackAdapter(const void *inputBuffer, void *outputBuffer, unsigned long numFrames,
const PaStreamCallbackTimeInfo *timeInfo, PaStreamCallbackFlags statusFlags,
void *userData);
} // extern "C"
}
// -----------------------------------------------------------------------------------
// -----------------------------------------------------------------------------------
} // namespace portaudio

View file

@ -14,23 +14,23 @@ namespace portaudio
{
//////
/// @brief Base class for all Streams which use a callback-based mechanism.
//////
class CallbackStream : public Stream
{
protected:
CallbackStream();
virtual ~CallbackStream();
//////
/// @brief Base class for all Streams which use a callback-based mechanism.
//////
class CallbackStream : public Stream
{
protected:
CallbackStream();
virtual ~CallbackStream();
public:
// stream info (time-varying)
double cpuLoad() const;
public:
// stream info (time-varying)
double cpuLoad() const;
private:
CallbackStream(const CallbackStream &); // non-copyable
CallbackStream &operator=(const CallbackStream &); // non-copyable
};
private:
CallbackStream(const CallbackStream &); // non-copyable
CallbackStream &operator=(const CallbackStream &); // non-copyable
};
} // namespace portaudio

View file

@ -12,7 +12,7 @@
// Forward declaration(s):
namespace portaudio
{
class StreamParameters;
class StreamParameters;
}
// ---------------------------------------------------------------------------------------
@ -22,61 +22,61 @@ namespace portaudio
{
namespace impl
{
extern "C"
{
int cppCallbackToPaCallbackAdapter(const void *inputBuffer, void *outputBuffer, unsigned long numFrames,
const PaStreamCallbackTimeInfo *timeInfo, PaStreamCallbackFlags statusFlags,
void *userData);
} // extern "C"
}
namespace impl
{
extern "C"
{
int cppCallbackToPaCallbackAdapter(const void *inputBuffer, void *outputBuffer, unsigned long numFrames,
const PaStreamCallbackTimeInfo *timeInfo, PaStreamCallbackFlags statusFlags,
void *userData);
} // extern "C"
}
// -----------------------------------------------------------------------------------
// -----------------------------------------------------------------------------------
//////
/// @brief Callback stream using a C++ function (either a free function or a static function)
/// callback.
//////
class FunCallbackStream : public CallbackStream
{
public:
typedef int (*CallbackFunPtr)(const void *inputBuffer, void *outputBuffer, unsigned long numFrames,
const PaStreamCallbackTimeInfo *timeInfo, PaStreamCallbackFlags statusFlags,
void *userData);
//////
/// @brief Callback stream using a C++ function (either a free function or a static function)
/// callback.
//////
class FunCallbackStream : public CallbackStream
{
public:
typedef int (*CallbackFunPtr)(const void *inputBuffer, void *outputBuffer, unsigned long numFrames,
const PaStreamCallbackTimeInfo *timeInfo, PaStreamCallbackFlags statusFlags,
void *userData);
// -------------------------------------------------------------------------------
// -------------------------------------------------------------------------------
//////
/// @brief Simple structure containing a function pointer to the C++ callback function and a
/// (void) pointer to the user supplied data.
//////
struct CppToCCallbackData
{
CppToCCallbackData();
CppToCCallbackData(CallbackFunPtr funPtr, void *userData);
void init(CallbackFunPtr funPtr, void *userData);
//////
/// @brief Simple structure containing a function pointer to the C++ callback function and a
/// (void) pointer to the user supplied data.
//////
struct CppToCCallbackData
{
CppToCCallbackData();
CppToCCallbackData(CallbackFunPtr funPtr, void *userData);
void init(CallbackFunPtr funPtr, void *userData);
CallbackFunPtr funPtr;
void *userData;
};
CallbackFunPtr funPtr;
void *userData;
};
// -------------------------------------------------------------------------------
// -------------------------------------------------------------------------------
FunCallbackStream();
FunCallbackStream(const StreamParameters &parameters, CallbackFunPtr funPtr, void *userData);
~FunCallbackStream();
FunCallbackStream();
FunCallbackStream(const StreamParameters &parameters, CallbackFunPtr funPtr, void *userData);
~FunCallbackStream();
void open(const StreamParameters &parameters, CallbackFunPtr funPtr, void *userData);
void open(const StreamParameters &parameters, CallbackFunPtr funPtr, void *userData);
private:
FunCallbackStream(const FunCallbackStream &); // non-copyable
FunCallbackStream &operator=(const FunCallbackStream &); // non-copyable
private:
FunCallbackStream(const FunCallbackStream &); // non-copyable
FunCallbackStream &operator=(const FunCallbackStream &); // non-copyable
CppToCCallbackData adapterData_;
CppToCCallbackData adapterData_;
void open(const StreamParameters &parameters);
};
void open(const StreamParameters &parameters);
};
} // portaudio

View file

@ -14,8 +14,8 @@
// Forward declaration(s):
namespace portaudio
{
class System;
class HostApi;
class System;
class HostApi;
}
// ---------------------------------------------------------------------------------------
@ -24,68 +24,67 @@ namespace portaudio
namespace portaudio
{
//////
/// @brief Class which represents a PortAudio device in the System.
///
/// A single physical device in the system may have multiple PortAudio
/// Device representations using different HostApi 's though. A Device
/// can be half-duplex or full-duplex. A half-duplex Device can be used
/// to create a half-duplex Stream. A full-duplex Device can be used to
/// create a full-duplex Stream. If supported by the HostApi, two
/// half-duplex Devices can even be used to create a full-duplex Stream.
///
/// Note that Device objects are very light-weight and can be passed around
/// by-value.
//////
class Device
{
public:
// query info: name, max in channels, max out channels,
// default low/hight input/output latency, default sample rate
PaDeviceIndex index() const;
const char *name() const;
int maxInputChannels() const;
int maxOutputChannels() const;
PaTime defaultLowInputLatency() const;
PaTime defaultHighInputLatency() const;
PaTime defaultLowOutputLatency() const;
PaTime defaultHighOutputLatency() const;
double defaultSampleRate() const;
//////
/// @brief Class which represents a PortAudio device in the System.
///
/// A single physical device in the system may have multiple PortAudio
/// Device representations using different HostApi 's though. A Device
/// can be half-duplex or full-duplex. A half-duplex Device can be used
/// to create a half-duplex Stream. A full-duplex Device can be used to
/// create a full-duplex Stream. If supported by the HostApi, two
/// half-duplex Devices can even be used to create a full-duplex Stream.
///
/// Note that Device objects are very light-weight and can be passed around
/// by-value.
//////
class Device
{
public:
// query info: name, max in channels, max out channels,
// default low/high input/output latency, default sample rate
PaDeviceIndex index() const;
const char *name() const;
int maxInputChannels() const;
int maxOutputChannels() const;
PaTime defaultLowInputLatency() const;
PaTime defaultHighInputLatency() const;
PaTime defaultLowOutputLatency() const;
PaTime defaultHighOutputLatency() const;
double defaultSampleRate() const;
bool isInputOnlyDevice() const; // extended
bool isOutputOnlyDevice() const; // extended
bool isFullDuplexDevice() const; // extended
bool isSystemDefaultInputDevice() const; // extended
bool isSystemDefaultOutputDevice() const; // extended
bool isHostApiDefaultInputDevice() const; // extended
bool isHostApiDefaultOutputDevice() const; // extended
bool isInputOnlyDevice() const; // extended
bool isOutputOnlyDevice() const; // extended
bool isFullDuplexDevice() const; // extended
bool isSystemDefaultInputDevice() const; // extended
bool isSystemDefaultOutputDevice() const; // extended
bool isHostApiDefaultInputDevice() const; // extended
bool isHostApiDefaultOutputDevice() const; // extended
bool operator==(const Device &rhs) const;
bool operator!=(const Device &rhs) const;
bool operator==(const Device &rhs) const;
bool operator!=(const Device &rhs) const;
// host api reference
HostApi &hostApi();
const HostApi &hostApi() const;
// host api reference
HostApi &hostApi();
const HostApi &hostApi() const;
private:
PaDeviceIndex index_;
const PaDeviceInfo *info_;
private:
PaDeviceIndex index_;
const PaDeviceInfo *info_;
private:
friend class System;
explicit Device(PaDeviceIndex index);
~Device();
private:
friend class System;
Device(const Device &); // non-copyable
Device &operator=(const Device &); // non-copyable
};
explicit Device(PaDeviceIndex index);
~Device();
// -----------------------------------------------------------------------------------
Device(const Device &); // non-copyable
Device &operator=(const Device &); // non-copyable
};
// -----------------------------------------------------------------------------------
} // namespace portaudio
// ---------------------------------------------------------------------------------------
#endif // INCLUDED_PORTAUDIO_DEVICE_HXX

View file

@ -15,7 +15,7 @@
// Forward declaration(s):
namespace portaudio
{
class Device;
class Device;
}
// ---------------------------------------------------------------------------------------
@ -24,50 +24,50 @@ namespace portaudio
namespace portaudio
{
//////
/// @brief All parameters for one direction (either in or out) of a Stream. Together with
/// parameters common to both directions, two DirectionSpecificStreamParameters can make up
/// a StreamParameters object which contains all parameters for a Stream.
//////
class DirectionSpecificStreamParameters
{
public:
static DirectionSpecificStreamParameters null();
//////
/// @brief All parameters for one direction (either in or out) of a Stream. Together with
/// parameters common to both directions, two DirectionSpecificStreamParameters can make up
/// a StreamParameters object which contains all parameters for a Stream.
//////
class DirectionSpecificStreamParameters
{
public:
static DirectionSpecificStreamParameters null();
DirectionSpecificStreamParameters();
DirectionSpecificStreamParameters(const Device &device, int numChannels, SampleDataFormat format,
bool interleaved, PaTime suggestedLatency, void *hostApiSpecificStreamInfo);
DirectionSpecificStreamParameters();
DirectionSpecificStreamParameters(const Device &device, int numChannels, SampleDataFormat format,
bool interleaved, PaTime suggestedLatency, void *hostApiSpecificStreamInfo);
// Set up methods:
void setDevice(const Device &device);
void setNumChannels(int numChannels);
// Set up methods:
void setDevice(const Device &device);
void setNumChannels(int numChannels);
void setSampleFormat(SampleDataFormat format, bool interleaved = true);
void setHostApiSpecificSampleFormat(PaSampleFormat format, bool interleaved = true);
void setSampleFormat(SampleDataFormat format, bool interleaved = true);
void setHostApiSpecificSampleFormat(PaSampleFormat format, bool interleaved = true);
void setSuggestedLatency(PaTime latency);
void setSuggestedLatency(PaTime latency);
void setHostApiSpecificStreamInfo(void *streamInfo);
void setHostApiSpecificStreamInfo(void *streamInfo);
// Accessor methods:
PaStreamParameters *paStreamParameters();
const PaStreamParameters *paStreamParameters() const;
// Accessor methods:
PaStreamParameters *paStreamParameters();
const PaStreamParameters *paStreamParameters() const;
Device &device() const;
int numChannels() const;
Device &device() const;
int numChannels() const;
SampleDataFormat sampleFormat() const;
bool isSampleFormatInterleaved() const;
bool isSampleFormatHostApiSpecific() const;
PaSampleFormat hostApiSpecificSampleFormat() const;
SampleDataFormat sampleFormat() const;
bool isSampleFormatInterleaved() const;
bool isSampleFormatHostApiSpecific() const;
PaSampleFormat hostApiSpecificSampleFormat() const;
PaTime suggestedLatency() const;
PaTime suggestedLatency() const;
void *hostApiSpecificStreamInfo() const;
private:
PaStreamParameters paStreamParameters_;
};
void *hostApiSpecificStreamInfo() const;
private:
PaStreamParameters paStreamParameters_;
};
} // namespace portaudio

View file

@ -12,92 +12,92 @@
namespace portaudio
{
//////
/// @brief Base class for all exceptions PortAudioCpp can throw.
///
/// Class is derived from std::exception.
//////
class Exception : public std::exception
{
public:
virtual ~Exception() throw() {}
//////
/// @brief Base class for all exceptions PortAudioCpp can throw.
///
/// Class is derived from std::exception.
//////
class Exception : public std::exception
{
public:
virtual ~Exception() throw() {}
virtual const char *what() const throw() = 0;
};
// -----------------------------------------------------------------------------------
virtual const char *what() const throw() = 0;
};
//////
/// @brief Wrapper for PortAudio error codes to C++ exceptions.
///
/// It wraps up PortAudio's error handling mechanism using
/// C++ exceptions and is derived from std::exception for
/// easy exception handling and to ease integration with
/// other code.
///
/// To know what exceptions each function may throw, look up
/// the errors that can occure in the PortAudio documentation
/// for the equivalent functions.
///
/// Some functions are likely to throw an exception (such as
/// Stream::open(), etc) and these should always be called in
/// try{} catch{} blocks and the thrown exceptions should be
/// handled properly (ie. the application shouldn't just abort,
/// but merely display a warning dialog to the user or something).
/// However nearly all functions in PortAudioCpp are capable
/// of throwing exceptions. When a function like Stream::isStopped()
/// throws an exception, it's such an exceptional state that it's
/// not likely that it can be recovered. PaExceptions such as these
/// can ``safely'' be left to be handled by some outer catch-all-like
/// mechanism for unrecoverable errors.
//////
class PaException : public Exception
{
public:
explicit PaException(PaError error);
// -----------------------------------------------------------------------------------
const char *what() const throw();
//////
/// @brief Wrapper for PortAudio error codes to C++ exceptions.
///
/// It wraps up PortAudio's error handling mechanism using
/// C++ exceptions and is derived from std::exception for
/// easy exception handling and to ease integration with
/// other code.
///
/// To know what exceptions each function may throw, look up
/// the errors that can occur in the PortAudio documentation
/// for the equivalent functions.
///
/// Some functions are likely to throw an exception (such as
/// Stream::open(), etc) and these should always be called in
/// try{} catch{} blocks and the thrown exceptions should be
/// handled properly (ie. the application shouldn't just abort,
/// but merely display a warning dialog to the user or something).
/// However nearly all functions in PortAudioCpp are capable
/// of throwing exceptions. When a function like Stream::isStopped()
/// throws an exception, it's such an exceptional state that it's
/// not likely that it can be recovered. PaExceptions such as these
/// can ``safely'' be left to be handled by some outer catch-all-like
/// mechanism for unrecoverable errors.
//////
class PaException : public Exception
{
public:
explicit PaException(PaError error);
PaError paError() const;
const char *paErrorText() const;
const char *what() const throw();
bool isHostApiError() const; // extended
long lastHostApiError() const;
const char *lastHostApiErrorText() const;
PaError paError() const;
const char *paErrorText() const;
bool operator==(const PaException &rhs) const;
bool operator!=(const PaException &rhs) const;
bool isHostApiError() const; // extended
long lastHostApiError() const;
const char *lastHostApiErrorText() const;
private:
PaError error_;
};
bool operator==(const PaException &rhs) const;
bool operator!=(const PaException &rhs) const;
// -----------------------------------------------------------------------------------
private:
PaError error_;
};
//////
/// @brief Exceptions specific to PortAudioCpp (ie. exceptions which do not have an
/// equivalent PortAudio error code).
//////
class PaCppException : public Exception
{
public:
enum ExceptionSpecifier
{
UNABLE_TO_ADAPT_DEVICE
};
// -----------------------------------------------------------------------------------
PaCppException(ExceptionSpecifier specifier);
//////
/// @brief Exceptions specific to PortAudioCpp (ie. exceptions which do not have an
/// equivalent PortAudio error code).
//////
class PaCppException : public Exception
{
public:
enum ExceptionSpecifier
{
UNABLE_TO_ADAPT_DEVICE
};
const char *what() const throw();
PaCppException(ExceptionSpecifier specifier);
ExceptionSpecifier specifier() const;
const char *what() const throw();
bool operator==(const PaCppException &rhs) const;
bool operator!=(const PaCppException &rhs) const;
ExceptionSpecifier specifier() const;
private:
ExceptionSpecifier specifier_;
};
bool operator==(const PaCppException &rhs) const;
bool operator!=(const PaCppException &rhs) const;
private:
ExceptionSpecifier specifier_;
};
} // namespace portaudio
@ -105,4 +105,3 @@ namespace portaudio
// ---------------------------------------------------------------------------------------
#endif // INCLUDED_PORTAUDIO_EXCEPTION_HXX

View file

@ -12,7 +12,7 @@
// Forward declaration(s):
namespace portaudio
{
class Device;
class Device;
}
// ---------------------------------------------------------------------------------------
@ -22,50 +22,50 @@ namespace portaudio
{
//////
/// @brief HostApi represents a host API (usually type of driver) in the System.
///
/// A single System can support multiple HostApi's each one typically having
/// a set of Devices using that HostApi (usually driver type). All Devices in
/// the HostApi can be enumerated and the default input/output Device for this
/// HostApi can be retreived.
//////
class HostApi
{
public:
typedef System::DeviceIterator DeviceIterator;
//////
/// @brief HostApi represents a host API (usually type of driver) in the System.
///
/// A single System can support multiple HostApi's each one typically having
/// a set of Devices using that HostApi (usually driver type). All Devices in
/// the HostApi can be enumerated and the default input/output Device for this
/// HostApi can be retrieved.
//////
class HostApi
{
public:
typedef System::DeviceIterator DeviceIterator;
// query info: id, name, numDevices
PaHostApiTypeId typeId() const;
PaHostApiIndex index() const;
const char *name() const;
int deviceCount() const;
// query info: id, name, numDevices
PaHostApiTypeId typeId() const;
PaHostApiIndex index() const;
const char *name() const;
int deviceCount() const;
// iterate devices
DeviceIterator devicesBegin();
DeviceIterator devicesEnd();
// iterate devices
DeviceIterator devicesBegin();
DeviceIterator devicesEnd();
// default devices
Device &defaultInputDevice() const;
Device &defaultOutputDevice() const;
// default devices
Device &defaultInputDevice() const;
Device &defaultOutputDevice() const;
// comparison operators
bool operator==(const HostApi &rhs) const;
bool operator!=(const HostApi &rhs) const;
// comparison operators
bool operator==(const HostApi &rhs) const;
bool operator!=(const HostApi &rhs) const;
private:
const PaHostApiInfo *info_;
Device **devices_;
private:
const PaHostApiInfo *info_;
Device **devices_;
private:
friend class System;
private:
friend class System;
explicit HostApi(PaHostApiIndex index);
~HostApi();
explicit HostApi(PaHostApiIndex index);
~HostApi();
HostApi(const HostApi &); // non-copyable
HostApi &operator=(const HostApi &); // non-copyable
};
HostApi(const HostApi &); // non-copyable
HostApi &operator=(const HostApi &); // non-copyable
};
}
@ -73,4 +73,3 @@ namespace portaudio
// ---------------------------------------------------------------------------------------
#endif // INCLUDED_PORTAUDIO_HOSTAPI_HXX

View file

@ -12,8 +12,8 @@
// Forward declaration(s)
namespace portaudio
{
class StreamParameters;
class CallbackInterface;
class StreamParameters;
class CallbackInterface;
}
// ---------------------------------------------------------------------------------------
@ -23,23 +23,23 @@ namespace portaudio
{
//////
/// @brief Callback stream using an instance of an object that's derived from the CallbackInterface
/// interface.
//////
class InterfaceCallbackStream : public CallbackStream
{
public:
InterfaceCallbackStream();
InterfaceCallbackStream(const StreamParameters &parameters, CallbackInterface &instance);
~InterfaceCallbackStream();
void open(const StreamParameters &parameters, CallbackInterface &instance);
//////
/// @brief Callback stream using an instance of an object that's derived from the CallbackInterface
/// interface.
//////
class InterfaceCallbackStream : public CallbackStream
{
public:
InterfaceCallbackStream();
InterfaceCallbackStream(const StreamParameters &parameters, CallbackInterface &instance);
~InterfaceCallbackStream();
private:
InterfaceCallbackStream(const InterfaceCallbackStream &); // non-copyable
InterfaceCallbackStream &operator=(const InterfaceCallbackStream &); // non-copyable
};
void open(const StreamParameters &parameters, CallbackInterface &instance);
private:
InterfaceCallbackStream(const InterfaceCallbackStream &); // non-copyable
InterfaceCallbackStream &operator=(const InterfaceCallbackStream &); // non-copyable
};
} // portaudio

View file

@ -17,87 +17,87 @@ namespace portaudio
{
//////
/// @brief Callback stream using a class's member function as a callback. Template argument T is the type of the
/// class of which a member function is going to be used.
///
/// Example usage:
/// @verbatim MemFunCallback<MyClass> stream = MemFunCallbackStream(parameters, *this, &MyClass::myCallbackFunction); @endverbatim
//////
template<typename T>
class MemFunCallbackStream : public CallbackStream
{
public:
typedef int (T::*CallbackFunPtr)(const void *, void *, unsigned long, const PaStreamCallbackTimeInfo *,
PaStreamCallbackFlags);
//////
/// @brief Callback stream using a class's member function as a callback. Template argument T is the type of the
/// class of which a member function is going to be used.
///
/// Example usage:
/// @verbatim MemFunCallback<MyClass> stream = MemFunCallbackStream(parameters, *this, &MyClass::myCallbackFunction); @endverbatim
//////
template<typename T>
class MemFunCallbackStream : public CallbackStream
{
public:
typedef int (T::*CallbackFunPtr)(const void *, void *, unsigned long, const PaStreamCallbackTimeInfo *,
PaStreamCallbackFlags);
// -------------------------------------------------------------------------------
// -------------------------------------------------------------------------------
MemFunCallbackStream()
{
}
MemFunCallbackStream()
{
}
MemFunCallbackStream(const StreamParameters &parameters, T &instance, CallbackFunPtr memFun) : adapter_(instance, memFun)
{
open(parameters);
}
MemFunCallbackStream(const StreamParameters &parameters, T &instance, CallbackFunPtr memFun) : adapter_(instance, memFun)
{
open(parameters);
}
~MemFunCallbackStream()
{
close();
}
~MemFunCallbackStream()
{
close();
}
void open(const StreamParameters &parameters, T &instance, CallbackFunPtr memFun)
{
// XXX: need to check if already open?
void open(const StreamParameters &parameters, T &instance, CallbackFunPtr memFun)
{
// XXX: need to check if already open?
adapter_.init(instance, memFun);
open(parameters);
}
adapter_.init(instance, memFun);
open(parameters);
}
private:
MemFunCallbackStream(const MemFunCallbackStream &); // non-copyable
MemFunCallbackStream &operator=(const MemFunCallbackStream &); // non-copyable
private:
MemFunCallbackStream(const MemFunCallbackStream &); // non-copyable
MemFunCallbackStream &operator=(const MemFunCallbackStream &); // non-copyable
//////
/// @brief Inner class which adapts a member function callback to a CallbackInterface compliant
/// class (so it can be adapted using the paCallbackAdapter function).
//////
class MemFunToCallbackInterfaceAdapter : public CallbackInterface
{
public:
MemFunToCallbackInterfaceAdapter() {}
MemFunToCallbackInterfaceAdapter(T &instance, CallbackFunPtr memFun) : instance_(&instance), memFun_(memFun) {}
//////
/// @brief Inner class which adapts a member function callback to a CallbackInterface compliant
/// class (so it can be adapted using the paCallbackAdapter function).
//////
class MemFunToCallbackInterfaceAdapter : public CallbackInterface
{
public:
MemFunToCallbackInterfaceAdapter() {}
MemFunToCallbackInterfaceAdapter(T &instance, CallbackFunPtr memFun) : instance_(&instance), memFun_(memFun) {}
void init(T &instance, CallbackFunPtr memFun)
{
instance_ = &instance;
memFun_ = memFun;
}
void init(T &instance, CallbackFunPtr memFun)
{
instance_ = &instance;
memFun_ = memFun;
}
int paCallbackFun(const void *inputBuffer, void *outputBuffer, unsigned long numFrames,
const PaStreamCallbackTimeInfo *timeInfo, PaStreamCallbackFlags statusFlags)
{
return (instance_->*memFun_)(inputBuffer, outputBuffer, numFrames, timeInfo, statusFlags);
}
int paCallbackFun(const void *inputBuffer, void *outputBuffer, unsigned long numFrames,
const PaStreamCallbackTimeInfo *timeInfo, PaStreamCallbackFlags statusFlags)
{
return (instance_->*memFun_)(inputBuffer, outputBuffer, numFrames, timeInfo, statusFlags);
}
private:
T *instance_;
CallbackFunPtr memFun_;
};
private:
T *instance_;
CallbackFunPtr memFun_;
};
MemFunToCallbackInterfaceAdapter adapter_;
MemFunToCallbackInterfaceAdapter adapter_;
void open(const StreamParameters &parameters)
{
PaError err = Pa_OpenStream(&stream_, parameters.inputParameters().paStreamParameters(), parameters.outputParameters().paStreamParameters(),
parameters.sampleRate(), parameters.framesPerBuffer(), parameters.flags(), &impl::callbackInterfaceToPaCallbackAdapter,
static_cast<void *>(&adapter_));
void open(const StreamParameters &parameters)
{
PaError err = Pa_OpenStream(&stream_, parameters.inputParameters().paStreamParameters(), parameters.outputParameters().paStreamParameters(),
parameters.sampleRate(), parameters.framesPerBuffer(), parameters.flags(), &impl::callbackInterfaceToPaCallbackAdapter,
static_cast<void *>(&adapter_));
if (err != paNoError)
throw PaException(err);
}
};
if (err != paNoError)
throw PaException(err);
}
};
} // portaudio

View file

@ -6,23 +6,23 @@
//////
/// @mainpage PortAudioCpp
///
/// <h1>PortAudioCpp - A Native C++ Binding of PortAudio V19</h1>
/// <h1>PortAudioCpp - A Native C++ Binding of PortAudio V19</h1>
/// <h2>PortAudio</h2>
/// <p>
/// PortAudio is a portable and mature C API for accessing audio hardware. It offers both callback-based and blocking
/// style input and output, deals with sample data format conversions, dithering and much more. There are a large number
/// of implementations available for various platforms including Windows MME, Windows DirectX, Windows and MacOS (Classic)
/// ASIO, MacOS Classic SoundManager, MacOS X CoreAudio, OSS (Linux), Linux ALSA, JACK (MacOS X and Linux) and SGI Irix
/// AL. Note that, currently not all of these implementations are equally complete or up-to-date (as PortAudio V19 is
/// still in development). Because PortAudio has a C API, it can easily be called from a variety of other programming
/// PortAudio is a portable and mature C API for accessing audio hardware. It offers both callback-based and blocking
/// style input and output, deals with sample data format conversions, dithering and much more. There are a large number
/// of implementations available for various platforms including Windows MME, Windows DirectX, Windows and MacOS (Classic)
/// ASIO, MacOS Classic SoundManager, MacOS X CoreAudio, OSS (Linux), Linux ALSA, JACK (MacOS X and Linux) and SGI Irix
/// AL. Note that, currently not all of these implementations are equally complete or up-to-date (as PortAudio V19 is
/// still in development). Because PortAudio has a C API, it can easily be called from a variety of other programming
/// languages.
/// </p>
/// <h2>PortAudioCpp</h2>
/// <p>
/// Although, it is possible to use PortAudio's C API from within a C++ program, this is usually a little awkward
/// as procedural and object-oriented paradigms need to be mixed. PortAudioCpp aims to resolve this by encapsulating
/// PortAudio's C API to form an equivalent object-oriented C++ API. It provides a more natural integration of PortAudio
/// into C++ programs as well as a more structured interface. PortAudio's concepts were preserved as much as possible and
/// Although, it is possible to use PortAudio's C API from within a C++ program, this is usually a little awkward
/// as procedural and object-oriented paradigms need to be mixed. PortAudioCpp aims to resolve this by encapsulating
/// PortAudio's C API to form an equivalent object-oriented C++ API. It provides a more natural integration of PortAudio
/// into C++ programs as well as a more structured interface. PortAudio's concepts were preserved as much as possible and
/// no additional features were added except for some `convenience methods'.
/// </p>
/// <p>
@ -30,15 +30,15 @@
/// <ul>
/// <li>Structured object model.</li>
/// <li>C++ exception handling instead of C-style error return codes.</li>
/// <li>Handling of callbacks using free functions (C and C++), static functions, member functions or instances of classes
/// <li>Handling of callbacks using free functions (C and C++), static functions, member functions or instances of classes
/// derived from a given interface.</li>
/// <li>STL compliant iterators to host APIs and devices.</li>
/// <li>Some additional convenience functions to more easily set up and use PortAudio.</li>
/// </ul>
/// </p>
/// <p>
/// PortAudioCpp requires a recent version of the PortAudio V19 source code. This can be obtained from CVS or as a snapshot
/// from the website. The examples also require the ASIO 2 SDK which can be obtained from the Steinberg website. Alternatively, the
/// PortAudioCpp requires a recent version of the PortAudio V19 source code. This can be obtained from CVS or as a snapshot
/// from the website. The examples also require the ASIO 2 SDK which can be obtained from the Steinberg website. Alternatively, the
/// examples can easily be modified to compile without needing ASIO.
/// </p>
/// <p>
@ -50,12 +50,12 @@
/// Other platforms should be easily supported as PortAudioCpp is platform-independent and (reasonably) C++ standard compliant.
/// </p>
/// <p>
/// This documentation mainly provides information specific to PortAudioCpp. For a more complete explaination of all of the
/// This documentation mainly provides information specific to PortAudioCpp. For a more complete explanation of all of the
/// concepts used, please consult the PortAudio documentation.
/// </p>
/// <p>
/// PortAudioCpp was developed by Merlijn Blaauw with many great suggestions and help from Ross Bencina. Ludwig Schwardt provided
/// GNU/Linux build files and checked G++ compatibility. PortAudioCpp may be used under the same licensing, conditions and
/// PortAudioCpp was developed by Merlijn Blaauw with many great suggestions and help from Ross Bencina. Ludwig Schwardt provided
/// GNU/Linux build files and checked G++ compatibility. PortAudioCpp may be used under the same licensing, conditions and
/// warranty as PortAudio. See <a href="http://www.portaudio.com/license.html">the PortAudio license</a> for more details.
/// </p>
/// <h2>Links</h2>
@ -69,8 +69,8 @@
//////
/// @namespace portaudio
///
/// To avoid name collision, everything in PortAudioCpp is in the portaudio
/// namespace. If this name is too long it's usually pretty safe to use an
/// To avoid name collision, everything in PortAudioCpp is in the portaudio
/// namespace. If this name is too long it's usually pretty safe to use an
/// alias like ``namespace pa = portaudio;''.
//////

View file

@ -11,21 +11,21 @@ namespace portaudio
{
//////
/// @brief PortAudio sample data formats.
///
/// Small helper enum to wrap the PortAudio defines.
//////
enum SampleDataFormat
{
INVALID_FORMAT = 0,
FLOAT32 = paFloat32,
INT32 = paInt32,
INT24 = paInt24,
INT16 = paInt16,
INT8 = paInt8,
UINT8 = paUInt8
};
//////
/// @brief PortAudio sample data formats.
///
/// Small helper enum to wrap the PortAudio defines.
//////
enum SampleDataFormat
{
INVALID_FORMAT = 0,
FLOAT32 = paFloat32,
INT32 = paInt32,
INT24 = paInt24,
INT16 = paInt16,
INT8 = paInt8,
UINT8 = paUInt8
};
} // namespace portaudio

View file

@ -8,7 +8,7 @@
// Forward declaration(s):
namespace portaudio
{
class StreamParameters;
class StreamParameters;
}
// ---------------------------------------------------------------------------------------
@ -18,65 +18,64 @@ namespace portaudio
{
//////
/// @brief A Stream represents an active or inactive input and/or output data
/// stream in the System.
///
/// Concrete Stream classes should ensure themselves being in a closed state at
/// destruction (i.e. by calling their own close() method in their deconstructor).
/// Following good C++ programming practices, care must be taken to ensure no
/// exceptions are thrown by the deconstructor of these classes. As a consequence,
/// clients need to explicitly call close() to ensure the stream closed successfully.
///
/// The Stream object can be used to manipulate the Stream's state. Also, time-constant
/// and time-varying information about the Stream can be retreived.
//////
class Stream
{
public:
// Opening/closing:
virtual ~Stream();
//////
/// @brief A Stream represents an active or inactive input and/or output data
/// stream in the System.
///
/// Concrete Stream classes should ensure themselves being in a closed state at
/// destruction (i.e. by calling their own close() method in their deconstructor).
/// Following good C++ programming practices, care must be taken to ensure no
/// exceptions are thrown by the deconstructor of these classes. As a consequence,
/// clients need to explicitly call close() to ensure the stream closed successfully.
///
/// The Stream object can be used to manipulate the Stream's state. Also, time-constant
/// and time-varying information about the Stream can be retrieved.
//////
class Stream
{
public:
// Opening/closing:
virtual ~Stream();
virtual void close();
bool isOpen() const;
virtual void close();
bool isOpen() const;
// Additional set up:
void setStreamFinishedCallback(PaStreamFinishedCallback *callback);
// Additional set up:
void setStreamFinishedCallback(PaStreamFinishedCallback *callback);
// State management:
void start();
void stop();
void abort();
// State management:
void start();
void stop();
void abort();
bool isStopped() const;
bool isActive() const;
bool isStopped() const;
bool isActive() const;
// Stream info (time-constant, but might become time-variant soon):
PaTime inputLatency() const;
PaTime outputLatency() const;
double sampleRate() const;
// Stream info (time-constant, but might become time-variant soon):
PaTime inputLatency() const;
PaTime outputLatency() const;
double sampleRate() const;
// Stream info (time-varying):
PaTime time() const;
// Stream info (time-varying):
PaTime time() const;
// Accessors for PortAudio PaStream, useful for interfacing
// with PortAudio add-ons (such as PortMixer) for instance:
const PaStream *paStream() const;
PaStream *paStream();
// Accessors for PortAudio PaStream, useful for interfacing
// with PortAudio add-ons (such as PortMixer) for instance:
const PaStream *paStream() const;
PaStream *paStream();
protected:
Stream(); // abstract class
protected:
Stream(); // abstract class
PaStream *stream_;
PaStream *stream_;
private:
Stream(const Stream &); // non-copyable
Stream &operator=(const Stream &); // non-copyable
};
private:
Stream(const Stream &); // non-copyable
Stream &operator=(const Stream &); // non-copyable
};
} // namespace portaudio
#endif // INCLUDED_PORTAUDIO_STREAM_HXX

View file

@ -13,61 +13,61 @@
namespace portaudio
{
//////
/// @brief The entire set of parameters needed to configure and open
/// a Stream.
///
/// It contains parameters of input, output and shared parameters.
/// Using the isSupported() method, the StreamParameters can be
/// checked if opening a Stream using this StreamParameters would
/// succeed or not. Accessors are provided to higher-level parameters
/// aswell as the lower-level parameters which are mainly intended for
/// internal use.
//////
class StreamParameters
{
public:
StreamParameters();
StreamParameters(const DirectionSpecificStreamParameters &inputParameters,
const DirectionSpecificStreamParameters &outputParameters, double sampleRate,
unsigned long framesPerBuffer, PaStreamFlags flags);
//////
/// @brief The entire set of parameters needed to configure and open
/// a Stream.
///
/// It contains parameters of input, output and shared parameters.
/// Using the isSupported() method, the StreamParameters can be
/// checked if opening a Stream using this StreamParameters would
/// succeed or not. Accessors are provided to higher-level parameters
/// aswell as the lower-level parameters which are mainly intended for
/// internal use.
//////
class StreamParameters
{
public:
StreamParameters();
StreamParameters(const DirectionSpecificStreamParameters &inputParameters,
const DirectionSpecificStreamParameters &outputParameters, double sampleRate,
unsigned long framesPerBuffer, PaStreamFlags flags);
// Set up for direction-specific:
void setInputParameters(const DirectionSpecificStreamParameters &parameters);
void setOutputParameters(const DirectionSpecificStreamParameters &parameters);
// Set up for direction-specific:
void setInputParameters(const DirectionSpecificStreamParameters &parameters);
void setOutputParameters(const DirectionSpecificStreamParameters &parameters);
// Set up for common parameters:
void setSampleRate(double sampleRate);
void setFramesPerBuffer(unsigned long framesPerBuffer);
void setFlag(PaStreamFlags flag);
void unsetFlag(PaStreamFlags flag);
void clearFlags();
// Set up for common parameters:
void setSampleRate(double sampleRate);
void setFramesPerBuffer(unsigned long framesPerBuffer);
void setFlag(PaStreamFlags flag);
void unsetFlag(PaStreamFlags flag);
void clearFlags();
// Validation:
bool isSupported() const;
// Validation:
bool isSupported() const;
// Accessors (direction-specific):
DirectionSpecificStreamParameters &inputParameters();
const DirectionSpecificStreamParameters &inputParameters() const;
DirectionSpecificStreamParameters &outputParameters();
const DirectionSpecificStreamParameters &outputParameters() const;
// Accessors (direction-specific):
DirectionSpecificStreamParameters &inputParameters();
const DirectionSpecificStreamParameters &inputParameters() const;
DirectionSpecificStreamParameters &outputParameters();
const DirectionSpecificStreamParameters &outputParameters() const;
// Accessors (common):
double sampleRate() const;
unsigned long framesPerBuffer() const;
PaStreamFlags flags() const;
bool isFlagSet(PaStreamFlags flag) const;
// Accessors (common):
double sampleRate() const;
unsigned long framesPerBuffer() const;
PaStreamFlags flags() const;
bool isFlagSet(PaStreamFlags flag) const;
private:
// Half-duplex specific parameters:
DirectionSpecificStreamParameters inputParameters_;
DirectionSpecificStreamParameters outputParameters_;
private:
// Half-duplex specific parameters:
DirectionSpecificStreamParameters inputParameters_;
DirectionSpecificStreamParameters outputParameters_;
// Common parameters:
double sampleRate_;
unsigned long framesPerBuffer_;
PaStreamFlags flags_;
};
// Common parameters:
double sampleRate_;
unsigned long framesPerBuffer_;
PaStreamFlags flags_;
};
} // namespace portaudio

View file

@ -10,9 +10,9 @@
// Forward declaration(s):
namespace portaudio
{
class Device;
class Stream;
class HostApi;
class Device;
class Stream;
class HostApi;
}
// ---------------------------------------------------------------------------------------
@ -22,86 +22,85 @@ namespace portaudio
{
//////
/// @brief System singleton which represents the PortAudio system.
///
/// The System is used to initialize/terminate PortAudio and provide
/// a single acccess point to the PortAudio System (instance()).
/// It can be used to iterate through all HostApi 's in the System as
/// well as all devices in the System. It also provides some utility
/// functionality of PortAudio.
///
/// Terminating the System will also abort and close the open streams.
/// The Stream objects will need to be deallocated by the client though
/// (it's usually a good idea to have them cleaned up automatically).
//////
class System
{
public:
class HostApiIterator; // forward declaration
class DeviceIterator; // forward declaration
//////
/// @brief System singleton which represents the PortAudio system.
///
/// The System is used to initialize/terminate PortAudio and provide
/// a single access point to the PortAudio System (instance()).
/// It can be used to iterate through all HostApi 's in the System as
/// well as all devices in the System. It also provides some utility
/// functionality of PortAudio.
///
/// Terminating the System will also abort and close the open streams.
/// The Stream objects will need to be deallocated by the client though
/// (it's usually a good idea to have them cleaned up automatically).
//////
class System
{
public:
class HostApiIterator; // forward declaration
class DeviceIterator; // forward declaration
// -------------------------------------------------------------------------------
// -------------------------------------------------------------------------------
static int version();
static const char *versionText();
static int version();
static const char *versionText();
static void initialize();
static void terminate();
static void initialize();
static void terminate();
static System &instance();
static bool exists();
static System &instance();
static bool exists();
// -------------------------------------------------------------------------------
// -------------------------------------------------------------------------------
// host apis:
HostApiIterator hostApisBegin();
HostApiIterator hostApisEnd();
// host apis:
HostApiIterator hostApisBegin();
HostApiIterator hostApisEnd();
HostApi &defaultHostApi();
HostApi &defaultHostApi();
HostApi &hostApiByTypeId(PaHostApiTypeId type);
HostApi &hostApiByIndex(PaHostApiIndex index);
HostApi &hostApiByTypeId(PaHostApiTypeId type);
HostApi &hostApiByIndex(PaHostApiIndex index);
int hostApiCount();
int hostApiCount();
// -------------------------------------------------------------------------------
// -------------------------------------------------------------------------------
// devices:
DeviceIterator devicesBegin();
DeviceIterator devicesEnd();
// devices:
DeviceIterator devicesBegin();
DeviceIterator devicesEnd();
Device &defaultInputDevice();
Device &defaultOutputDevice();
Device &defaultInputDevice();
Device &defaultOutputDevice();
Device &deviceByIndex(PaDeviceIndex index);
Device &deviceByIndex(PaDeviceIndex index);
int deviceCount();
int deviceCount();
static Device &nullDevice();
static Device &nullDevice();
// -------------------------------------------------------------------------------
// -------------------------------------------------------------------------------
// misc:
void sleep(long msec);
int sizeOfSample(PaSampleFormat format);
// misc:
void sleep(long msec);
int sizeOfSample(PaSampleFormat format);
private:
System();
~System();
private:
System();
~System();
static System *instance_;
static int initCount_;
static System *instance_;
static int initCount_;
static HostApi **hostApis_;
static Device **devices_;
static HostApi **hostApis_;
static Device **devices_;
static Device *nullDevice_;
};
static Device *nullDevice_;
};
} // namespace portaudio
#endif // INCLUDED_PORTAUDIO_SYSTEM_HXX

View file

@ -13,8 +13,8 @@
// Forward declaration(s):
namespace portaudio
{
class Device;
class HostApi;
class Device;
class HostApi;
}
// ---------------------------------------------------------------------------------------
@ -23,39 +23,39 @@ namespace portaudio
namespace portaudio
{
//////
/// @brief Iterator class for iterating through all Devices in a System.
///
/// Devices will be iterated by iterating all Devices in each
/// HostApi in the System. Compliant with the STL bidirectional
/// iterator concept.
//////
class System::DeviceIterator
{
public:
typedef std::bidirectional_iterator_tag iterator_category;
typedef Device value_type;
typedef ptrdiff_t difference_type;
typedef Device * pointer;
typedef Device & reference;
Device &operator*() const;
Device *operator->() const;
//////
/// @brief Iterator class for iterating through all Devices in a System.
///
/// Devices will be iterated by iterating all Devices in each
/// HostApi in the System. Compliant with the STL bidirectional
/// iterator concept.
//////
class System::DeviceIterator
{
public:
typedef std::bidirectional_iterator_tag iterator_category;
typedef Device value_type;
typedef ptrdiff_t difference_type;
typedef Device * pointer;
typedef Device & reference;
DeviceIterator &operator++();
DeviceIterator operator++(int);
DeviceIterator &operator--();
DeviceIterator operator--(int);
Device &operator*() const;
Device *operator->() const;
bool operator==(const DeviceIterator &rhs) const;
bool operator!=(const DeviceIterator &rhs) const;
DeviceIterator &operator++();
DeviceIterator operator++(int);
DeviceIterator &operator--();
DeviceIterator operator--(int);
private:
friend class System;
friend class HostApi;
Device **ptr_;
};
bool operator==(const DeviceIterator &rhs) const;
bool operator!=(const DeviceIterator &rhs) const;
private:
friend class System;
friend class HostApi;
Device **ptr_;
};
} // namespace portaudio
@ -63,4 +63,3 @@ namespace portaudio
// ---------------------------------------------------------------------------------------
#endif // INCLUDED_PORTAUDIO_SYSTEMDEVICEITERATOR_HXX

View file

@ -13,7 +13,7 @@
// Forward declaration(s):
namespace portaudio
{
class HostApi;
class HostApi;
}
// ---------------------------------------------------------------------------------------
@ -23,35 +23,35 @@ namespace portaudio
{
//////
/// @brief Iterator class for iterating through all HostApis in a System.
///
/// Compliant with the STL bidirectional iterator concept.
//////
class System::HostApiIterator
{
public:
typedef std::bidirectional_iterator_tag iterator_category;
typedef Device value_type;
typedef ptrdiff_t difference_type;
typedef HostApi * pointer;
typedef HostApi & reference;
//////
/// @brief Iterator class for iterating through all HostApis in a System.
///
/// Compliant with the STL bidirectional iterator concept.
//////
class System::HostApiIterator
{
public:
typedef std::bidirectional_iterator_tag iterator_category;
typedef Device value_type;
typedef ptrdiff_t difference_type;
typedef HostApi * pointer;
typedef HostApi & reference;
HostApi &operator*() const;
HostApi *operator->() const;
HostApi &operator*() const;
HostApi *operator->() const;
HostApiIterator &operator++();
HostApiIterator operator++(int);
HostApiIterator &operator--();
HostApiIterator operator--(int);
HostApiIterator &operator++();
HostApiIterator operator++(int);
HostApiIterator &operator--();
HostApiIterator operator--(int);
bool operator==(const HostApiIterator &rhs) const;
bool operator!=(const HostApiIterator &rhs) const;
bool operator==(const HostApiIterator &rhs) const;
bool operator!=(const HostApiIterator &rhs) const;
private:
friend class System;
HostApi **ptr_;
};
private:
friend class System;
HostApi **ptr_;
};
} // namespace portaudio

BIN
bindings/cpp/install-sh Executable file

Binary file not shown.

View file

@ -1,7 +1,7 @@
# Makefile.in generated by automake 1.14.1 from Makefile.am.
# Makefile.in generated by automake 1.16.5 from Makefile.am.
# @configure_input@
# Copyright (C) 1994-2013 Free Software Foundation, Inc.
# Copyright (C) 1994-2021 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
@ -15,7 +15,17 @@
@SET_MAKE@
VPATH = @srcdir@
am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)'
am__is_gnu_make = { \
if test -z '$(MAKELEVEL)'; then \
false; \
elif test -n '$(MAKE_HOST)'; then \
true; \
elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
true; \
else \
false; \
fi; \
}
am__make_running_with_option = \
case $${target_option-} in \
?) ;; \
@ -79,12 +89,11 @@ POST_UNINSTALL = :
build_triplet = @build@
host_triplet = @host@
subdir = lib
DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \
$(top_srcdir)/../../depcomp
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
mkinstalldirs = $(install_sh) -d
CONFIG_CLEAN_FILES =
CONFIG_CLEAN_VPATH_FILES =
@ -147,8 +156,20 @@ AM_V_at = $(am__v_at_@AM_V@)
am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
am__v_at_0 = @
am__v_at_1 =
depcomp = $(SHELL) $(top_srcdir)/../../depcomp
am__depfiles_maybe = depfiles
depcomp = $(SHELL) $(top_srcdir)/depcomp
am__maybe_remake_depfiles = depfiles
am__depfiles_remade = ./$(DEPDIR)/BlockingStream.Plo \
./$(DEPDIR)/CFunCallbackStream.Plo \
./$(DEPDIR)/CallbackInterface.Plo \
./$(DEPDIR)/CallbackStream.Plo \
./$(DEPDIR)/CppFunCallbackStream.Plo ./$(DEPDIR)/Device.Plo \
./$(DEPDIR)/DirectionSpecificStreamParameters.Plo \
./$(DEPDIR)/Exception.Plo ./$(DEPDIR)/HostApi.Plo \
./$(DEPDIR)/InterfaceCallbackStream.Plo \
./$(DEPDIR)/MemFunCallbackStream.Plo ./$(DEPDIR)/Stream.Plo \
./$(DEPDIR)/StreamParameters.Plo ./$(DEPDIR)/System.Plo \
./$(DEPDIR)/SystemDeviceIterator.Plo \
./$(DEPDIR)/SystemHostApiIterator.Plo
am__mv = mv -f
CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS)
@ -192,8 +213,7 @@ am__define_uniq_tagged_files = \
unique=`for i in $$list; do \
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
done | $(am__uniquify_input)`
ETAGS = etags
CTAGS = ctags
am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
ACLOCAL = @ACLOCAL@
AMTAR = @AMTAR@
@ -207,8 +227,9 @@ AWK = @AWK@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
CPP = @CPP@
CPPFLAGS = @CPPFLAGS@
CSCOPE = @CSCOPE@
CTAGS = @CTAGS@
CXX = @CXX@
CXXCPP = @CXXCPP@
CXXDEPMODE = @CXXDEPMODE@
@ -224,6 +245,7 @@ ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
EGREP = @EGREP@
ETAGS = @ETAGS@
EXEEXT = @EXEEXT@
FGREP = @FGREP@
GREP = @GREP@
@ -240,6 +262,7 @@ LIBTOOL = @LIBTOOL@
LIPO = @LIPO@
LN_S = @LN_S@
LTLIBOBJS = @LTLIBOBJS@
LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
LT_VERSION_INFO = @LT_VERSION_INFO@
MAINT = @MAINT@
MAKEINFO = @MAKEINFO@
@ -311,6 +334,7 @@ pdfdir = @pdfdir@
prefix = @prefix@
program_transform_name = @program_transform_name@
psdir = @psdir@
runstatedir = @runstatedir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
srcdir = @srcdir@
@ -358,14 +382,13 @@ $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__confi
echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu lib/Makefile'; \
$(am__cd) $(top_srcdir) && \
$(AUTOMAKE) --gnu lib/Makefile
.PRECIOUS: Makefile
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
@case '$?' in \
*config.status*) \
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
*) \
echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \
cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \
esac;
$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
@ -421,22 +444,28 @@ mostlyclean-compile:
distclean-compile:
-rm -f *.tab.c
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/BlockingStream.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CFunCallbackStream.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CallbackInterface.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CallbackStream.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CppFunCallbackStream.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Device.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/DirectionSpecificStreamParameters.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Exception.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/HostApi.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/InterfaceCallbackStream.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/MemFunCallbackStream.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Stream.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/StreamParameters.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/System.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/SystemDeviceIterator.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/SystemHostApiIterator.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/BlockingStream.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CFunCallbackStream.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CallbackInterface.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CallbackStream.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CppFunCallbackStream.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Device.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/DirectionSpecificStreamParameters.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Exception.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/HostApi.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/InterfaceCallbackStream.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/MemFunCallbackStream.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Stream.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/StreamParameters.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/System.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/SystemDeviceIterator.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/SystemHostApiIterator.Plo@am__quote@ # am--include-marker
$(am__depfiles_remade):
@$(MKDIR_P) $(@D)
@echo '# dummy' >$@-t && $(am__mv) $@-t $@
am--depfiles: $(am__depfiles_remade)
.cxx.o:
@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
@ -628,8 +657,10 @@ cscopelist-am: $(am__tagged_files)
distclean-tags:
-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
distdir: $(BUILT_SOURCES)
$(MAKE) $(AM_MAKEFLAGS) distdir-am
distdir: $(DISTFILES)
distdir-am: $(DISTFILES)
@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
list='$(DISTFILES)'; \
@ -702,7 +733,22 @@ clean-am: clean-generic clean-libLTLIBRARIES clean-libtool \
mostlyclean-am
distclean: distclean-am
-rm -rf ./$(DEPDIR)
-rm -f ./$(DEPDIR)/BlockingStream.Plo
-rm -f ./$(DEPDIR)/CFunCallbackStream.Plo
-rm -f ./$(DEPDIR)/CallbackInterface.Plo
-rm -f ./$(DEPDIR)/CallbackStream.Plo
-rm -f ./$(DEPDIR)/CppFunCallbackStream.Plo
-rm -f ./$(DEPDIR)/Device.Plo
-rm -f ./$(DEPDIR)/DirectionSpecificStreamParameters.Plo
-rm -f ./$(DEPDIR)/Exception.Plo
-rm -f ./$(DEPDIR)/HostApi.Plo
-rm -f ./$(DEPDIR)/InterfaceCallbackStream.Plo
-rm -f ./$(DEPDIR)/MemFunCallbackStream.Plo
-rm -f ./$(DEPDIR)/Stream.Plo
-rm -f ./$(DEPDIR)/StreamParameters.Plo
-rm -f ./$(DEPDIR)/System.Plo
-rm -f ./$(DEPDIR)/SystemDeviceIterator.Plo
-rm -f ./$(DEPDIR)/SystemHostApiIterator.Plo
-rm -f Makefile
distclean-am: clean-am distclean-compile distclean-generic \
distclean-tags
@ -748,7 +794,22 @@ install-ps-am:
installcheck-am:
maintainer-clean: maintainer-clean-am
-rm -rf ./$(DEPDIR)
-rm -f ./$(DEPDIR)/BlockingStream.Plo
-rm -f ./$(DEPDIR)/CFunCallbackStream.Plo
-rm -f ./$(DEPDIR)/CallbackInterface.Plo
-rm -f ./$(DEPDIR)/CallbackStream.Plo
-rm -f ./$(DEPDIR)/CppFunCallbackStream.Plo
-rm -f ./$(DEPDIR)/Device.Plo
-rm -f ./$(DEPDIR)/DirectionSpecificStreamParameters.Plo
-rm -f ./$(DEPDIR)/Exception.Plo
-rm -f ./$(DEPDIR)/HostApi.Plo
-rm -f ./$(DEPDIR)/InterfaceCallbackStream.Plo
-rm -f ./$(DEPDIR)/MemFunCallbackStream.Plo
-rm -f ./$(DEPDIR)/Stream.Plo
-rm -f ./$(DEPDIR)/StreamParameters.Plo
-rm -f ./$(DEPDIR)/System.Plo
-rm -f ./$(DEPDIR)/SystemDeviceIterator.Plo
-rm -f ./$(DEPDIR)/SystemHostApiIterator.Plo
-rm -f Makefile
maintainer-clean-am: distclean-am maintainer-clean-generic
@ -769,9 +830,9 @@ uninstall-am: uninstall-libLTLIBRARIES
.MAKE: install-am install-strip
.PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \
clean-libLTLIBRARIES clean-libtool cscopelist-am ctags \
ctags-am distclean distclean-compile distclean-generic \
.PHONY: CTAGS GTAGS TAGS all all-am am--depfiles check check-am clean \
clean-generic clean-libLTLIBRARIES clean-libtool cscopelist-am \
ctags ctags-am distclean distclean-compile distclean-generic \
distclean-libtool distclean-tags distdir dvi dvi-am html \
html-am info info-am install install-am install-data \
install-data-am install-dvi install-dvi-am install-exec \
@ -783,6 +844,8 @@ uninstall-am: uninstall-libLTLIBRARIES
mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
tags tags-am uninstall uninstall-am uninstall-libLTLIBRARIES
.PRECIOUS: Makefile
# Tell versions [3.59,3.63) of GNU make to not export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded.

11147
bindings/cpp/ltmain.sh Normal file

File diff suppressed because it is too large Load diff

Binary file not shown.

View file

@ -9,75 +9,73 @@
namespace portaudio
{
AsioDeviceAdapter::AsioDeviceAdapter(Device &device)
{
if (device.hostApi().typeId() != paASIO)
throw PaCppException(PaCppException::UNABLE_TO_ADAPT_DEVICE);
AsioDeviceAdapter::AsioDeviceAdapter(Device &device)
{
if (device.hostApi().typeId() != paASIO)
throw PaCppException(PaCppException::UNABLE_TO_ADAPT_DEVICE);
device_ = &device;
device_ = &device;
PaError err = PaAsio_GetAvailableLatencyValues(device_->index(), &minBufferSize_, &maxBufferSize_,
&preferredBufferSize_, &granularity_);
PaError err = PaAsio_GetAvailableLatencyValues(device_->index(), &minBufferSize_, &maxBufferSize_,
&preferredBufferSize_, &granularity_);
if (err != paNoError)
throw PaException(err);
if (err != paNoError)
throw PaException(err);
}
}
Device &AsioDeviceAdapter::device()
{
return *device_;
}
Device &AsioDeviceAdapter::device()
{
return *device_;
}
long AsioDeviceAdapter::minBufferSize() const
{
return minBufferSize_;
}
long AsioDeviceAdapter::minBufferSize() const
{
return minBufferSize_;
}
long AsioDeviceAdapter::maxBufferSize() const
{
return maxBufferSize_;
}
long AsioDeviceAdapter::maxBufferSize() const
{
return maxBufferSize_;
}
long AsioDeviceAdapter::preferredBufferSize() const
{
return preferredBufferSize_;
}
long AsioDeviceAdapter::preferredBufferSize() const
{
return preferredBufferSize_;
}
long AsioDeviceAdapter::granularity() const
{
return granularity_;
}
long AsioDeviceAdapter::granularity() const
{
return granularity_;
}
void AsioDeviceAdapter::showControlPanel(void *systemSpecific)
{
PaError err = PaAsio_ShowControlPanel(device_->index(), systemSpecific);
void AsioDeviceAdapter::showControlPanel(void *systemSpecific)
{
PaError err = PaAsio_ShowControlPanel(device_->index(), systemSpecific);
if (err != paNoError)
throw PaException(err);
}
if (err != paNoError)
throw PaException(err);
}
const char *AsioDeviceAdapter::inputChannelName(int channelIndex) const
{
const char *channelName;
PaError err = PaAsio_GetInputChannelName(device_->index(), channelIndex, &channelName);
const char *AsioDeviceAdapter::inputChannelName(int channelIndex) const
{
const char *channelName;
PaError err = PaAsio_GetInputChannelName(device_->index(), channelIndex, &channelName);
if (err != paNoError)
throw PaException(err);
if (err != paNoError)
throw PaException(err);
return channelName;
}
return channelName;
}
const char *AsioDeviceAdapter::outputChannelName(int channelIndex) const
{
const char *channelName;
PaError err = PaAsio_GetOutputChannelName(device_->index(), channelIndex, &channelName);
const char *AsioDeviceAdapter::outputChannelName(int channelIndex) const
{
const char *channelName;
PaError err = PaAsio_GetOutputChannelName(device_->index(), channelIndex, &channelName);
if (err != paNoError)
throw PaException(err);
if (err != paNoError)
throw PaException(err);
return channelName;
}
return channelName;
}
}

View file

@ -8,93 +8,90 @@
namespace portaudio
{
// --------------------------------------------------------------------------------------
// --------------------------------------------------------------------------------------
BlockingStream::BlockingStream()
{
}
BlockingStream::BlockingStream()
{
}
BlockingStream::BlockingStream(const StreamParameters &parameters)
{
open(parameters);
}
BlockingStream::BlockingStream(const StreamParameters &parameters)
{
open(parameters);
}
BlockingStream::~BlockingStream()
{
try
{
close();
}
catch (...)
{
// ignore all errors
}
}
BlockingStream::~BlockingStream()
{
try
{
close();
}
catch (...)
{
// ignore all errors
}
}
// --------------------------------------------------------------------------------------
// --------------------------------------------------------------------------------------
void BlockingStream::open(const StreamParameters &parameters)
{
PaError err = Pa_OpenStream(&stream_, parameters.inputParameters().paStreamParameters(), parameters.outputParameters().paStreamParameters(),
parameters.sampleRate(), parameters.framesPerBuffer(), parameters.flags(), NULL, NULL);
void BlockingStream::open(const StreamParameters &parameters)
{
PaError err = Pa_OpenStream(&stream_, parameters.inputParameters().paStreamParameters(), parameters.outputParameters().paStreamParameters(),
parameters.sampleRate(), parameters.framesPerBuffer(), parameters.flags(), NULL, NULL);
if (err != paNoError)
{
throw PaException(err);
}
}
if (err != paNoError)
{
throw PaException(err);
}
}
// --------------------------------------------------------------------------------------
// --------------------------------------------------------------------------------------
void BlockingStream::read(void *buffer, unsigned long numFrames)
{
PaError err = Pa_ReadStream(stream_, buffer, numFrames);
void BlockingStream::read(void *buffer, unsigned long numFrames)
{
PaError err = Pa_ReadStream(stream_, buffer, numFrames);
if (err != paNoError)
{
throw PaException(err);
}
}
if (err != paNoError)
{
throw PaException(err);
}
}
void BlockingStream::write(const void *buffer, unsigned long numFrames)
{
PaError err = Pa_WriteStream(stream_, buffer, numFrames);
void BlockingStream::write(const void *buffer, unsigned long numFrames)
{
PaError err = Pa_WriteStream(stream_, buffer, numFrames);
if (err != paNoError)
{
throw PaException(err);
}
}
if (err != paNoError)
{
throw PaException(err);
}
}
// --------------------------------------------------------------------------------------
// --------------------------------------------------------------------------------------
signed long BlockingStream::availableReadSize() const
{
signed long avail = Pa_GetStreamReadAvailable(stream_);
signed long BlockingStream::availableReadSize() const
{
signed long avail = Pa_GetStreamReadAvailable(stream_);
if (avail < 0)
{
throw PaException(avail);
}
if (avail < 0)
{
throw PaException(avail);
}
return avail;
}
return avail;
}
signed long BlockingStream::availableWriteSize() const
{
signed long avail = Pa_GetStreamWriteAvailable(stream_);
signed long BlockingStream::availableWriteSize() const
{
signed long avail = Pa_GetStreamWriteAvailable(stream_);
if (avail < 0)
{
throw PaException(avail);
}
if (avail < 0)
{
throw PaException(avail);
}
return avail;
}
return avail;
}
// --------------------------------------------------------------------------------------
// --------------------------------------------------------------------------------------
} // portaudio

View file

@ -5,37 +5,37 @@
namespace portaudio
{
CFunCallbackStream::CFunCallbackStream()
{
}
CFunCallbackStream::CFunCallbackStream()
{
}
CFunCallbackStream::CFunCallbackStream(const StreamParameters &parameters, PaStreamCallback *funPtr, void *userData)
{
open(parameters, funPtr, userData);
}
CFunCallbackStream::CFunCallbackStream(const StreamParameters &parameters, PaStreamCallback *funPtr, void *userData)
{
open(parameters, funPtr, userData);
}
CFunCallbackStream::~CFunCallbackStream()
{
try
{
close();
}
catch (...)
{
// ignore all errors
}
}
CFunCallbackStream::~CFunCallbackStream()
{
try
{
close();
}
catch (...)
{
// ignore all errors
}
}
// ---------------------------------------------------------------------------------==
// ---------------------------------------------------------------------------------==
void CFunCallbackStream::open(const StreamParameters &parameters, PaStreamCallback *funPtr, void *userData)
{
PaError err = Pa_OpenStream(&stream_, parameters.inputParameters().paStreamParameters(), parameters.outputParameters().paStreamParameters(),
parameters.sampleRate(), parameters.framesPerBuffer(), parameters.flags(), funPtr, userData);
void CFunCallbackStream::open(const StreamParameters &parameters, PaStreamCallback *funPtr, void *userData)
{
PaError err = Pa_OpenStream(&stream_, parameters.inputParameters().paStreamParameters(), parameters.outputParameters().paStreamParameters(),
parameters.sampleRate(), parameters.framesPerBuffer(), parameters.flags(), funPtr, userData);
if (err != paNoError)
{
throw PaException(err);
}
}
if (err != paNoError)
{
throw PaException(err);
}
}
}

View file

@ -3,23 +3,21 @@
namespace portaudio
{
namespace impl
{
namespace impl
{
//////
/// Adapts any CallbackInterface object to a C-callable function (ie this function). A
/// pointer to the object should be passed as ``userData'' when setting up the callback.
//////
int callbackInterfaceToPaCallbackAdapter(const void *inputBuffer, void *outputBuffer, unsigned long numFrames,
const PaStreamCallbackTimeInfo *timeInfo, PaStreamCallbackFlags statusFlags, void *userData)
{
CallbackInterface *cb = static_cast<CallbackInterface *>(userData);
return cb->paCallbackFun(inputBuffer, outputBuffer, numFrames, timeInfo, statusFlags);
}
//////
/// Adapts any CallbackInterface object to a C-callable function (ie this function). A
/// pointer to the object should be passed as ``userData'' when setting up the callback.
//////
int callbackInterfaceToPaCallbackAdapter(const void *inputBuffer, void *outputBuffer, unsigned long numFrames,
const PaStreamCallbackTimeInfo *timeInfo, PaStreamCallbackFlags statusFlags, void *userData)
{
CallbackInterface *cb = static_cast<CallbackInterface *>(userData);
return cb->paCallbackFun(inputBuffer, outputBuffer, numFrames, timeInfo, statusFlags);
}
} // namespace impl
} // namespace impl
} // namespace portaudio

View file

@ -2,19 +2,19 @@
namespace portaudio
{
CallbackStream::CallbackStream()
{
}
CallbackStream::CallbackStream()
{
}
CallbackStream::~CallbackStream()
{
}
CallbackStream::~CallbackStream()
{
}
// -----------------------------------------------------------------------------------
double CallbackStream::cpuLoad() const
{
return Pa_GetStreamCpuLoad(stream_);
}
// -----------------------------------------------------------------------------------
double CallbackStream::cpuLoad() const
{
return Pa_GetStreamCpuLoad(stream_);
}
} // namespace portaudio

View file

@ -5,77 +5,77 @@
namespace portaudio
{
namespace impl
{
//////
/// Adapts any a C++ callback to a C-callable function (ie this function). A
/// pointer to a struct with the C++ function pointer and the actual user data should be
/// passed as the ``userData'' parameter when setting up the callback.
//////
int cppCallbackToPaCallbackAdapter(const void *inputBuffer, void *outputBuffer, unsigned long numFrames,
const PaStreamCallbackTimeInfo *timeInfo, PaStreamCallbackFlags statusFlags, void *userData)
{
FunCallbackStream::CppToCCallbackData *data = static_cast<FunCallbackStream::CppToCCallbackData *>(userData);
return data->funPtr(inputBuffer, outputBuffer, numFrames, timeInfo, statusFlags, data->userData);
}
}
namespace impl
{
//////
/// Adapts any a C++ callback to a C-callable function (ie this function). A
/// pointer to a struct with the C++ function pointer and the actual user data should be
/// passed as the ``userData'' parameter when setting up the callback.
//////
int cppCallbackToPaCallbackAdapter(const void *inputBuffer, void *outputBuffer, unsigned long numFrames,
const PaStreamCallbackTimeInfo *timeInfo, PaStreamCallbackFlags statusFlags, void *userData)
{
FunCallbackStream::CppToCCallbackData *data = static_cast<FunCallbackStream::CppToCCallbackData *>(userData);
return data->funPtr(inputBuffer, outputBuffer, numFrames, timeInfo, statusFlags, data->userData);
}
}
// -----------------------------------------------------------------------------------
// -----------------------------------------------------------------------------------
FunCallbackStream::CppToCCallbackData::CppToCCallbackData()
{
}
FunCallbackStream::CppToCCallbackData::CppToCCallbackData()
{
}
FunCallbackStream::CppToCCallbackData::CppToCCallbackData(CallbackFunPtr funPtr, void *userData) : funPtr(funPtr), userData(userData)
{
}
FunCallbackStream::CppToCCallbackData::CppToCCallbackData(CallbackFunPtr funPtr, void *userData) : funPtr(funPtr), userData(userData)
{
}
void FunCallbackStream::CppToCCallbackData::init(CallbackFunPtr funPtr, void *userData)
{
this->funPtr = funPtr;
this->userData = userData;
}
void FunCallbackStream::CppToCCallbackData::init(CallbackFunPtr funPtr, void *userData)
{
this->funPtr = funPtr;
this->userData = userData;
}
// -----------------------------------------------------------------------------------
// -----------------------------------------------------------------------------------
FunCallbackStream::FunCallbackStream()
{
}
FunCallbackStream::FunCallbackStream()
{
}
FunCallbackStream::FunCallbackStream(const StreamParameters &parameters, CallbackFunPtr funPtr, void *userData) : adapterData_(funPtr, userData)
{
open(parameters);
}
FunCallbackStream::FunCallbackStream(const StreamParameters &parameters, CallbackFunPtr funPtr, void *userData) : adapterData_(funPtr, userData)
{
open(parameters);
}
FunCallbackStream::~FunCallbackStream()
{
try
{
close();
}
catch (...)
{
// ignore all errors
}
}
FunCallbackStream::~FunCallbackStream()
{
try
{
close();
}
catch (...)
{
// ignore all errors
}
}
void FunCallbackStream::open(const StreamParameters &parameters, CallbackFunPtr funPtr, void *userData)
{
adapterData_.init(funPtr, userData);
open(parameters);
}
void FunCallbackStream::open(const StreamParameters &parameters, CallbackFunPtr funPtr, void *userData)
{
adapterData_.init(funPtr, userData);
open(parameters);
}
void FunCallbackStream::open(const StreamParameters &parameters)
{
PaError err = Pa_OpenStream(&stream_, parameters.inputParameters().paStreamParameters(), parameters.outputParameters().paStreamParameters(),
parameters.sampleRate(), parameters.framesPerBuffer(), parameters.flags(), &impl::cppCallbackToPaCallbackAdapter,
static_cast<void *>(&adapterData_));
void FunCallbackStream::open(const StreamParameters &parameters)
{
PaError err = Pa_OpenStream(&stream_, parameters.inputParameters().paStreamParameters(), parameters.outputParameters().paStreamParameters(),
parameters.sampleRate(), parameters.framesPerBuffer(), parameters.flags(), &impl::cppCallbackToPaCallbackAdapter,
static_cast<void *>(&adapterData_));
if (err != paNoError)
{
throw PaException(err);
}
}
if (err != paNoError)
{
throw PaException(err);
}
}
// -----------------------------------------------------------------------------------
// -----------------------------------------------------------------------------------
}

View file

@ -9,160 +9,158 @@
namespace portaudio
{
// -------------------------------------------------------------------------------
// -------------------------------------------------------------------------------
Device::Device(PaDeviceIndex index) : index_(index)
{
if (index == paNoDevice)
info_ = NULL;
else
info_ = Pa_GetDeviceInfo(index);
}
Device::Device(PaDeviceIndex index) : index_(index)
{
if (index == paNoDevice)
info_ = NULL;
else
info_ = Pa_GetDeviceInfo(index);
}
Device::~Device()
{
}
Device::~Device()
{
}
PaDeviceIndex Device::index() const
{
return index_;
}
PaDeviceIndex Device::index() const
{
return index_;
}
const char *Device::name() const
{
if (info_ == NULL)
return "";
const char *Device::name() const
{
if (info_ == NULL)
return "";
return info_->name;
}
return info_->name;
}
int Device::maxInputChannels() const
{
if (info_ == NULL)
return 0;
int Device::maxInputChannels() const
{
if (info_ == NULL)
return 0;
return info_->maxInputChannels;
}
return info_->maxInputChannels;
}
int Device::maxOutputChannels() const
{
if (info_ == NULL)
return 0;
int Device::maxOutputChannels() const
{
if (info_ == NULL)
return 0;
return info_->maxOutputChannels;
}
return info_->maxOutputChannels;
}
PaTime Device::defaultLowInputLatency() const
{
if (info_ == NULL)
return static_cast<PaTime>(0.0);
PaTime Device::defaultLowInputLatency() const
{
if (info_ == NULL)
return static_cast<PaTime>(0.0);
return info_->defaultLowInputLatency;
}
return info_->defaultLowInputLatency;
}
PaTime Device::defaultHighInputLatency() const
{
if (info_ == NULL)
return static_cast<PaTime>(0.0);
PaTime Device::defaultHighInputLatency() const
{
if (info_ == NULL)
return static_cast<PaTime>(0.0);
return info_->defaultHighInputLatency;
}
return info_->defaultHighInputLatency;
}
PaTime Device::defaultLowOutputLatency() const
{
if (info_ == NULL)
return static_cast<PaTime>(0.0);
PaTime Device::defaultLowOutputLatency() const
{
if (info_ == NULL)
return static_cast<PaTime>(0.0);
return info_->defaultLowOutputLatency;
}
return info_->defaultLowOutputLatency;
}
PaTime Device::defaultHighOutputLatency() const
{
if (info_ == NULL)
return static_cast<PaTime>(0.0);
PaTime Device::defaultHighOutputLatency() const
{
if (info_ == NULL)
return static_cast<PaTime>(0.0);
return info_->defaultHighOutputLatency;
}
return info_->defaultHighOutputLatency;
}
double Device::defaultSampleRate() const
{
if (info_ == NULL)
return 0.0;
double Device::defaultSampleRate() const
{
if (info_ == NULL)
return 0.0;
return info_->defaultSampleRate;
}
return info_->defaultSampleRate;
}
// -------------------------------------------------------------------------------
// -------------------------------------------------------------------------------
bool Device::isInputOnlyDevice() const
{
return (maxOutputChannels() == 0);
}
bool Device::isInputOnlyDevice() const
{
return (maxOutputChannels() == 0);
}
bool Device::isOutputOnlyDevice() const
{
return (maxInputChannels() == 0);
}
bool Device::isOutputOnlyDevice() const
{
return (maxInputChannels() == 0);
}
bool Device::isFullDuplexDevice() const
{
return (maxInputChannels() > 0 && maxOutputChannels() > 0);
}
bool Device::isFullDuplexDevice() const
{
return (maxInputChannels() > 0 && maxOutputChannels() > 0);
}
bool Device::isSystemDefaultInputDevice() const
{
return (System::instance().defaultInputDevice() == *this);
}
bool Device::isSystemDefaultInputDevice() const
{
return (System::instance().defaultInputDevice() == *this);
}
bool Device::isSystemDefaultOutputDevice() const
{
return (System::instance().defaultOutputDevice() == *this);
}
bool Device::isSystemDefaultOutputDevice() const
{
return (System::instance().defaultOutputDevice() == *this);
}
bool Device::isHostApiDefaultInputDevice() const
{
return (hostApi().defaultInputDevice() == *this);
}
bool Device::isHostApiDefaultInputDevice() const
{
return (hostApi().defaultInputDevice() == *this);
}
bool Device::isHostApiDefaultOutputDevice() const
{
return (hostApi().defaultOutputDevice() == *this);
}
bool Device::isHostApiDefaultOutputDevice() const
{
return (hostApi().defaultOutputDevice() == *this);
}
// -------------------------------------------------------------------------------
// -------------------------------------------------------------------------------
bool Device::operator==(const Device &rhs) const
{
return (index_ == rhs.index_);
}
bool Device::operator==(const Device &rhs) const
{
return (index_ == rhs.index_);
}
bool Device::operator!=(const Device &rhs) const
{
return !(*this == rhs);
}
bool Device::operator!=(const Device &rhs) const
{
return !(*this == rhs);
}
// -------------------------------------------------------------------------------
// -------------------------------------------------------------------------------
HostApi &Device::hostApi()
{
// NOTE: will cause an exception when called for the null device
if (info_ == NULL)
throw PaException(paInternalError);
HostApi &Device::hostApi()
{
// NOTE: will cause an exception when called for the null device
if (info_ == NULL)
throw PaException(paInternalError);
return System::instance().hostApiByIndex(info_->hostApi);
}
return System::instance().hostApiByIndex(info_->hostApi);
}
const HostApi &Device::hostApi() const
{
// NOTE; will cause an exception when called for the null device
if (info_ == NULL)
throw PaException(paInternalError);
const HostApi &Device::hostApi() const
{
// NOTE; will cause an exception when called for the null device
if (info_ == NULL)
throw PaException(paInternalError);
return System::instance().hostApiByIndex(info_->hostApi);
}
return System::instance().hostApiByIndex(info_->hostApi);
}
// -------------------------------------------------------------------------------
// -------------------------------------------------------------------------------
} // namespace portaudio

View file

@ -5,159 +5,159 @@
namespace portaudio
{
// -----------------------------------------------------------------------------------
// -----------------------------------------------------------------------------------
//////
/// Returns a `nil' DirectionSpecificStreamParameters object. This can be used to
/// specify that one direction of a Stream is not required (i.e. when creating
/// a half-duplex Stream). All fields of the null DirectionSpecificStreamParameters
/// object are invalid except for the device and the number of channel, which are set
/// to paNoDevice and 0 respectively.
//////
DirectionSpecificStreamParameters DirectionSpecificStreamParameters::null()
{
DirectionSpecificStreamParameters tmp;
tmp.paStreamParameters_.device = paNoDevice;
tmp.paStreamParameters_.channelCount = 0;
return tmp;
}
//////
/// Returns a `nil' DirectionSpecificStreamParameters object. This can be used to
/// specify that one direction of a Stream is not required (i.e. when creating
/// a half-duplex Stream). All fields of the null DirectionSpecificStreamParameters
/// object are invalid except for the device and the number of channel, which are set
/// to paNoDevice and 0 respectively.
//////
DirectionSpecificStreamParameters DirectionSpecificStreamParameters::null()
{
DirectionSpecificStreamParameters tmp;
tmp.paStreamParameters_.device = paNoDevice;
tmp.paStreamParameters_.channelCount = 0;
return tmp;
}
// -----------------------------------------------------------------------------------
// -----------------------------------------------------------------------------------
//////
/// Default constructor -- all parameters will be uninitialized.
//////
DirectionSpecificStreamParameters::DirectionSpecificStreamParameters()
{
}
//////
/// Default constructor -- all parameters will be uninitialized.
//////
DirectionSpecificStreamParameters::DirectionSpecificStreamParameters()
{
}
//////
/// Constructor which sets all required fields.
//////
DirectionSpecificStreamParameters::DirectionSpecificStreamParameters(const Device &device, int numChannels,
SampleDataFormat format, bool interleaved, PaTime suggestedLatency, void *hostApiSpecificStreamInfo)
{
setDevice(device);
setNumChannels(numChannels);
setSampleFormat(format, interleaved);
setSuggestedLatency(suggestedLatency);
setHostApiSpecificStreamInfo(hostApiSpecificStreamInfo);
}
//////
/// Constructor which sets all required fields.
//////
DirectionSpecificStreamParameters::DirectionSpecificStreamParameters(const Device &device, int numChannels,
SampleDataFormat format, bool interleaved, PaTime suggestedLatency, void *hostApiSpecificStreamInfo)
{
setDevice(device);
setNumChannels(numChannels);
setSampleFormat(format, interleaved);
setSuggestedLatency(suggestedLatency);
setHostApiSpecificStreamInfo(hostApiSpecificStreamInfo);
}
// -----------------------------------------------------------------------------------
// -----------------------------------------------------------------------------------
void DirectionSpecificStreamParameters::setDevice(const Device &device)
{
paStreamParameters_.device = device.index();
}
void DirectionSpecificStreamParameters::setDevice(const Device &device)
{
paStreamParameters_.device = device.index();
}
void DirectionSpecificStreamParameters::setNumChannels(int numChannels)
{
paStreamParameters_.channelCount = numChannels;
}
void DirectionSpecificStreamParameters::setNumChannels(int numChannels)
{
paStreamParameters_.channelCount = numChannels;
}
void DirectionSpecificStreamParameters::setSampleFormat(SampleDataFormat format, bool interleaved)
{
paStreamParameters_.sampleFormat = static_cast<PaSampleFormat>(format);
void DirectionSpecificStreamParameters::setSampleFormat(SampleDataFormat format, bool interleaved)
{
paStreamParameters_.sampleFormat = static_cast<PaSampleFormat>(format);
if (!interleaved)
paStreamParameters_.sampleFormat |= paNonInterleaved;
}
if (!interleaved)
paStreamParameters_.sampleFormat |= paNonInterleaved;
}
void DirectionSpecificStreamParameters::setHostApiSpecificSampleFormat(PaSampleFormat format, bool interleaved)
{
paStreamParameters_.sampleFormat = format;
void DirectionSpecificStreamParameters::setHostApiSpecificSampleFormat(PaSampleFormat format, bool interleaved)
{
paStreamParameters_.sampleFormat = format;
paStreamParameters_.sampleFormat |= paCustomFormat;
paStreamParameters_.sampleFormat |= paCustomFormat;
if (!interleaved)
paStreamParameters_.sampleFormat |= paNonInterleaved;
}
if (!interleaved)
paStreamParameters_.sampleFormat |= paNonInterleaved;
}
void DirectionSpecificStreamParameters::setSuggestedLatency(PaTime latency)
{
paStreamParameters_.suggestedLatency = latency;
}
void DirectionSpecificStreamParameters::setSuggestedLatency(PaTime latency)
{
paStreamParameters_.suggestedLatency = latency;
}
void DirectionSpecificStreamParameters::setHostApiSpecificStreamInfo(void *streamInfo)
{
paStreamParameters_.hostApiSpecificStreamInfo = streamInfo;
}
void DirectionSpecificStreamParameters::setHostApiSpecificStreamInfo(void *streamInfo)
{
paStreamParameters_.hostApiSpecificStreamInfo = streamInfo;
}
// -----------------------------------------------------------------------------------
// -----------------------------------------------------------------------------------
PaStreamParameters *DirectionSpecificStreamParameters::paStreamParameters()
{
if (paStreamParameters_.channelCount > 0 && paStreamParameters_.device != paNoDevice)
return &paStreamParameters_;
else
return NULL;
}
PaStreamParameters *DirectionSpecificStreamParameters::paStreamParameters()
{
if (paStreamParameters_.channelCount > 0 && paStreamParameters_.device != paNoDevice)
return &paStreamParameters_;
else
return NULL;
}
const PaStreamParameters *DirectionSpecificStreamParameters::paStreamParameters() const
{
if (paStreamParameters_.channelCount > 0 && paStreamParameters_.device != paNoDevice)
return &paStreamParameters_;
else
return NULL;
}
const PaStreamParameters *DirectionSpecificStreamParameters::paStreamParameters() const
{
if (paStreamParameters_.channelCount > 0 && paStreamParameters_.device != paNoDevice)
return &paStreamParameters_;
else
return NULL;
}
Device &DirectionSpecificStreamParameters::device() const
{
return System::instance().deviceByIndex(paStreamParameters_.device);
}
Device &DirectionSpecificStreamParameters::device() const
{
return System::instance().deviceByIndex(paStreamParameters_.device);
}
int DirectionSpecificStreamParameters::numChannels() const
{
return paStreamParameters_.channelCount;
}
int DirectionSpecificStreamParameters::numChannels() const
{
return paStreamParameters_.channelCount;
}
//////
/// Returns the (non host api-specific) sample format, without including
/// the paNonInterleaved flag. If the sample format is host api-spefific,
/// INVALID_FORMAT (0) will be returned.
//////
SampleDataFormat DirectionSpecificStreamParameters::sampleFormat() const
{
if (isSampleFormatHostApiSpecific())
return INVALID_FORMAT;
else
return static_cast<SampleDataFormat>(paStreamParameters_.sampleFormat & ~paNonInterleaved);
}
//////
/// Returns the (non host api-specific) sample format, without including
/// the paNonInterleaved flag. If the sample format is host api-spefific,
/// INVALID_FORMAT (0) will be returned.
//////
SampleDataFormat DirectionSpecificStreamParameters::sampleFormat() const
{
if (isSampleFormatHostApiSpecific())
return INVALID_FORMAT;
else
return static_cast<SampleDataFormat>(paStreamParameters_.sampleFormat & ~paNonInterleaved);
}
bool DirectionSpecificStreamParameters::isSampleFormatInterleaved() const
{
return ((paStreamParameters_.sampleFormat & paNonInterleaved) == 0);
}
bool DirectionSpecificStreamParameters::isSampleFormatInterleaved() const
{
return ((paStreamParameters_.sampleFormat & paNonInterleaved) == 0);
}
bool DirectionSpecificStreamParameters::isSampleFormatHostApiSpecific() const
{
return ((paStreamParameters_.sampleFormat & paCustomFormat) == 0);
}
bool DirectionSpecificStreamParameters::isSampleFormatHostApiSpecific() const
{
return ((paStreamParameters_.sampleFormat & paCustomFormat) == 0);
}
//////
/// Returns the host api-specific sample format, without including any
/// paCustomFormat or paNonInterleaved flags. Will return 0 if the sample format is
/// not host api-specific.
//////
PaSampleFormat DirectionSpecificStreamParameters::hostApiSpecificSampleFormat() const
{
if (isSampleFormatHostApiSpecific())
return paStreamParameters_.sampleFormat & ~paCustomFormat & ~paNonInterleaved;
else
return 0;
}
//////
/// Returns the host api-specific sample format, without including any
/// paCustomFormat or paNonInterleaved flags. Will return 0 if the sample format is
/// not host api-specific.
//////
PaSampleFormat DirectionSpecificStreamParameters::hostApiSpecificSampleFormat() const
{
if (isSampleFormatHostApiSpecific())
return paStreamParameters_.sampleFormat & ~paCustomFormat & ~paNonInterleaved;
else
return 0;
}
PaTime DirectionSpecificStreamParameters::suggestedLatency() const
{
return paStreamParameters_.suggestedLatency;
}
PaTime DirectionSpecificStreamParameters::suggestedLatency() const
{
return paStreamParameters_.suggestedLatency;
}
void *DirectionSpecificStreamParameters::hostApiSpecificStreamInfo() const
{
return paStreamParameters_.hostApiSpecificStreamInfo;
}
void *DirectionSpecificStreamParameters::hostApiSpecificStreamInfo() const
{
return paStreamParameters_.hostApiSpecificStreamInfo;
}
// -----------------------------------------------------------------------------------
// -----------------------------------------------------------------------------------
} // namespace portaudio

View file

@ -2,122 +2,120 @@
namespace portaudio
{
// -----------------------------------------------------------------------------------
// PaException:
// -----------------------------------------------------------------------------------
// -----------------------------------------------------------------------------------
// PaException:
// -----------------------------------------------------------------------------------
//////
/// Wraps a PortAudio error into a PortAudioCpp PaException.
//////
PaException::PaException(PaError error) : error_(error)
{
}
//////
/// Wraps a PortAudio error into a PortAudioCpp PaException.
//////
PaException::PaException(PaError error) : error_(error)
{
}
// -----------------------------------------------------------------------------------
// -----------------------------------------------------------------------------------
//////
/// Alias for paErrorText(), to have std::exception compliance.
//////
const char *PaException::what() const throw()
{
return paErrorText();
}
//////
/// Alias for paErrorText(), to have std::exception compliance.
//////
const char *PaException::what() const throw()
{
return paErrorText();
}
// -----------------------------------------------------------------------------------
// -----------------------------------------------------------------------------------
//////
/// Returns the PortAudio error code (PaError).
//////
PaError PaException::paError() const
{
return error_;
}
//////
/// Returns the PortAudio error code (PaError).
//////
PaError PaException::paError() const
{
return error_;
}
//////
/// Returns the error as a (zero-terminated) text string.
//////
const char *PaException::paErrorText() const
{
return Pa_GetErrorText(error_);
}
//////
/// Returns the error as a (zero-terminated) text string.
//////
const char *PaException::paErrorText() const
{
return Pa_GetErrorText(error_);
}
//////
/// Returns true is the error is a HostApi error.
//////
bool PaException::isHostApiError() const
{
return (error_ == paUnanticipatedHostError);
}
//////
/// Returns true is the error is a HostApi error.
//////
bool PaException::isHostApiError() const
{
return (error_ == paUnanticipatedHostError);
}
//////
/// Returns the last HostApi error (which is the current one if
/// isHostApiError() returns true) as an error code.
//////
long PaException::lastHostApiError() const
{
return Pa_GetLastHostErrorInfo()->errorCode;
}
//////
/// Returns the last HostApi error (which is the current one if
/// isHostApiError() returns true) as an error code.
//////
long PaException::lastHostApiError() const
{
return Pa_GetLastHostErrorInfo()->errorCode;
}
//////
/// Returns the last HostApi error (which is the current one if
/// isHostApiError() returns true) as a (zero-terminated) text
/// string, if it's available.
//////
const char *PaException::lastHostApiErrorText() const
{
return Pa_GetLastHostErrorInfo()->errorText;
}
//////
/// Returns the last HostApi error (which is the current one if
/// isHostApiError() returns true) as a (zero-terminated) text
/// string, if it's available.
//////
const char *PaException::lastHostApiErrorText() const
{
return Pa_GetLastHostErrorInfo()->errorText;
}
// -----------------------------------------------------------------------------------
// -----------------------------------------------------------------------------------
bool PaException::operator==(const PaException &rhs) const
{
return (error_ == rhs.error_);
}
bool PaException::operator==(const PaException &rhs) const
{
return (error_ == rhs.error_);
}
bool PaException::operator!=(const PaException &rhs) const
{
return !(*this == rhs);
}
bool PaException::operator!=(const PaException &rhs) const
{
return !(*this == rhs);
}
// -----------------------------------------------------------------------------------
// PaCppException:
// -----------------------------------------------------------------------------------
PaCppException::PaCppException(ExceptionSpecifier specifier) : specifier_(specifier)
{
}
// -----------------------------------------------------------------------------------
// PaCppException:
// -----------------------------------------------------------------------------------
const char *PaCppException::what() const throw()
{
switch (specifier_)
{
case UNABLE_TO_ADAPT_DEVICE:
{
return "Unable to adapt the given device to the specified host api specific device extension";
}
}
PaCppException::PaCppException(ExceptionSpecifier specifier) : specifier_(specifier)
{
}
return "Unknown exception";
}
const char *PaCppException::what() const throw()
{
switch (specifier_)
{
case UNABLE_TO_ADAPT_DEVICE:
{
return "Unable to adapt the given device to the specified host api specific device extension";
}
}
PaCppException::ExceptionSpecifier PaCppException::specifier() const
{
return specifier_;
}
return "Unknown exception";
}
bool PaCppException::operator==(const PaCppException &rhs) const
{
return (specifier_ == rhs.specifier_);
}
PaCppException::ExceptionSpecifier PaCppException::specifier() const
{
return specifier_;
}
bool PaCppException::operator!=(const PaCppException &rhs) const
{
return !(*this == rhs);
}
bool PaCppException::operator==(const PaCppException &rhs) const
{
return (specifier_ == rhs.specifier_);
}
// -----------------------------------------------------------------------------------
bool PaCppException::operator!=(const PaCppException &rhs) const
{
return !(*this == rhs);
}
// -----------------------------------------------------------------------------------
} // namespace portaudio

View file

@ -8,114 +8,114 @@
namespace portaudio
{
// -----------------------------------------------------------------------------------
// -----------------------------------------------------------------------------------
HostApi::HostApi(PaHostApiIndex index) : devices_(NULL)
{
try
{
info_ = Pa_GetHostApiInfo(index);
HostApi::HostApi(PaHostApiIndex index) : devices_(NULL)
{
try
{
info_ = Pa_GetHostApiInfo(index);
// Create and populate devices array:
int numDevices = deviceCount();
// Create and populate devices array:
int numDevices = deviceCount();
devices_ = new Device*[numDevices];
devices_ = new Device*[numDevices];
for (int i = 0; i < numDevices; ++i)
{
PaDeviceIndex deviceIndex = Pa_HostApiDeviceIndexToDeviceIndex(index, i);
for (int i = 0; i < numDevices; ++i)
{
PaDeviceIndex deviceIndex = Pa_HostApiDeviceIndexToDeviceIndex(index, i);
if (deviceIndex < 0)
{
throw PaException(deviceIndex);
}
if (deviceIndex < 0)
{
throw PaException(deviceIndex);
}
devices_[i] = &System::instance().deviceByIndex(deviceIndex);
}
}
catch (const std::exception &e)
{
// Delete any (partially) constructed objects (deconstructor isn't called):
delete[] devices_; // devices_ is either NULL or valid
devices_[i] = &System::instance().deviceByIndex(deviceIndex);
}
}
catch (const std::exception &e)
{
// Delete any (partially) constructed objects (deconstructor isn't called):
delete[] devices_; // devices_ is either NULL or valid
// Re-throw exception:
throw e;
}
}
// Re-throw exception:
throw e;
}
}
HostApi::~HostApi()
{
// Destroy devices array:
delete[] devices_;
}
HostApi::~HostApi()
{
// Destroy devices array:
delete[] devices_;
}
// -----------------------------------------------------------------------------------
// -----------------------------------------------------------------------------------
PaHostApiTypeId HostApi::typeId() const
{
return info_->type;
}
PaHostApiTypeId HostApi::typeId() const
{
return info_->type;
}
PaHostApiIndex HostApi::index() const
{
PaHostApiIndex index = Pa_HostApiTypeIdToHostApiIndex(typeId());
PaHostApiIndex HostApi::index() const
{
PaHostApiIndex index = Pa_HostApiTypeIdToHostApiIndex(typeId());
if (index < 0)
throw PaException(index);
if (index < 0)
throw PaException(index);
return index;
}
return index;
}
const char *HostApi::name() const
{
return info_->name;
}
const char *HostApi::name() const
{
return info_->name;
}
int HostApi::deviceCount() const
{
return info_->deviceCount;
}
int HostApi::deviceCount() const
{
return info_->deviceCount;
}
// -----------------------------------------------------------------------------------
// -----------------------------------------------------------------------------------
HostApi::DeviceIterator HostApi::devicesBegin()
{
DeviceIterator tmp;
tmp.ptr_ = &devices_[0]; // begin (first element)
return tmp;
}
HostApi::DeviceIterator HostApi::devicesBegin()
{
DeviceIterator tmp;
tmp.ptr_ = &devices_[0]; // begin (first element)
return tmp;
}
HostApi::DeviceIterator HostApi::devicesEnd()
{
DeviceIterator tmp;
tmp.ptr_ = &devices_[deviceCount()]; // end (one past last element)
return tmp;
}
HostApi::DeviceIterator HostApi::devicesEnd()
{
DeviceIterator tmp;
tmp.ptr_ = &devices_[deviceCount()]; // end (one past last element)
return tmp;
}
// -----------------------------------------------------------------------------------
// -----------------------------------------------------------------------------------
Device &HostApi::defaultInputDevice() const
{
return System::instance().deviceByIndex(info_->defaultInputDevice);
}
Device &HostApi::defaultInputDevice() const
{
return System::instance().deviceByIndex(info_->defaultInputDevice);
}
Device &HostApi::defaultOutputDevice() const
{
return System::instance().deviceByIndex(info_->defaultOutputDevice);
}
Device &HostApi::defaultOutputDevice() const
{
return System::instance().deviceByIndex(info_->defaultOutputDevice);
}
// -----------------------------------------------------------------------------------
// -----------------------------------------------------------------------------------
bool HostApi::operator==(const HostApi &rhs) const
{
return (typeId() == rhs.typeId());
}
bool HostApi::operator==(const HostApi &rhs) const
{
return (typeId() == rhs.typeId());
}
bool HostApi::operator!=(const HostApi &rhs) const
{
return !(*this == rhs);
}
bool HostApi::operator!=(const HostApi &rhs) const
{
return !(*this == rhs);
}
// -----------------------------------------------------------------------------------
// -----------------------------------------------------------------------------------
} // namespace portaudio

View file

@ -7,39 +7,39 @@
namespace portaudio
{
// ---------------------------------------------------------------------------------==
// ---------------------------------------------------------------------------------==
InterfaceCallbackStream::InterfaceCallbackStream()
{
}
InterfaceCallbackStream::InterfaceCallbackStream()
{
}
InterfaceCallbackStream::InterfaceCallbackStream(const StreamParameters &parameters, CallbackInterface &instance)
{
open(parameters, instance);
}
InterfaceCallbackStream::InterfaceCallbackStream(const StreamParameters &parameters, CallbackInterface &instance)
{
open(parameters, instance);
}
InterfaceCallbackStream::~InterfaceCallbackStream()
{
try
{
close();
}
catch (...)
{
// ignore all errors
}
}
InterfaceCallbackStream::~InterfaceCallbackStream()
{
try
{
close();
}
catch (...)
{
// ignore all errors
}
}
// ---------------------------------------------------------------------------------==
// ---------------------------------------------------------------------------------==
void InterfaceCallbackStream::open(const StreamParameters &parameters, CallbackInterface &instance)
{
PaError err = Pa_OpenStream(&stream_, parameters.inputParameters().paStreamParameters(), parameters.outputParameters().paStreamParameters(),
parameters.sampleRate(), parameters.framesPerBuffer(), parameters.flags(), &impl::callbackInterfaceToPaCallbackAdapter, static_cast<void *>(&instance));
void InterfaceCallbackStream::open(const StreamParameters &parameters, CallbackInterface &instance)
{
PaError err = Pa_OpenStream(&stream_, parameters.inputParameters().paStreamParameters(), parameters.outputParameters().paStreamParameters(),
parameters.sampleRate(), parameters.framesPerBuffer(), parameters.flags(), &impl::callbackInterfaceToPaCallbackAdapter, static_cast<void *>(&instance));
if (err != paNoError)
{
throw PaException(err);
}
}
if (err != paNoError)
{
throw PaException(err);
}
}
}

View file

@ -1,4 +1,3 @@
#include "portaudiocpp/MemFunCallbackStream.hxx"
// (... template class ...)

View file

@ -8,188 +8,188 @@
namespace portaudio
{
// -----------------------------------------------------------------------------------
// -----------------------------------------------------------------------------------
Stream::Stream() : stream_(NULL)
{
}
Stream::Stream() : stream_(NULL)
{
}
Stream::~Stream()
{
// (can't call close here,
// the derived class should atleast call
// close() in it's deconstructor)
}
Stream::~Stream()
{
// (can't call close here,
// the derived class should atleast call
// close() in it's deconstructor)
}
// -----------------------------------------------------------------------------------
// -----------------------------------------------------------------------------------
//////
/// Closes the Stream if it's open, else does nothing.
//////
void Stream::close()
{
if (isOpen() && System::exists())
{
PaError err = Pa_CloseStream(stream_);
stream_ = NULL;
//////
/// Closes the Stream if it's open, else does nothing.
//////
void Stream::close()
{
if (isOpen() && System::exists())
{
PaError err = Pa_CloseStream(stream_);
stream_ = NULL;
if (err != paNoError)
throw PaException(err);
}
}
if (err != paNoError)
throw PaException(err);
}
}
//////
/// Returns true if the Stream is open.
//////
bool Stream::isOpen() const
{
return (stream_ != NULL);
}
//////
/// Returns true if the Stream is open.
//////
bool Stream::isOpen() const
{
return (stream_ != NULL);
}
// -----------------------------------------------------------------------------------
// -----------------------------------------------------------------------------------
void Stream::setStreamFinishedCallback(PaStreamFinishedCallback *callback)
{
PaError err = Pa_SetStreamFinishedCallback(stream_, callback);
void Stream::setStreamFinishedCallback(PaStreamFinishedCallback *callback)
{
PaError err = Pa_SetStreamFinishedCallback(stream_, callback);
if (err != paNoError)
throw PaException(err);
}
if (err != paNoError)
throw PaException(err);
}
// -----------------------------------------------------------------------------------
// -----------------------------------------------------------------------------------
void Stream::start()
{
PaError err = Pa_StartStream(stream_);
void Stream::start()
{
PaError err = Pa_StartStream(stream_);
if (err != paNoError)
throw PaException(err);
}
if (err != paNoError)
throw PaException(err);
}
void Stream::stop()
{
PaError err = Pa_StopStream(stream_);
void Stream::stop()
{
PaError err = Pa_StopStream(stream_);
if (err != paNoError)
throw PaException(err);
}
if (err != paNoError)
throw PaException(err);
}
void Stream::abort()
{
PaError err = Pa_AbortStream(stream_);
void Stream::abort()
{
PaError err = Pa_AbortStream(stream_);
if (err != paNoError)
throw PaException(err);
}
if (err != paNoError)
throw PaException(err);
}
bool Stream::isStopped() const
{
PaError ret = Pa_IsStreamStopped(stream_);
bool Stream::isStopped() const
{
PaError ret = Pa_IsStreamStopped(stream_);
if (ret < 0)
throw PaException(ret);
if (ret < 0)
throw PaException(ret);
return (ret == 1);
}
return (ret == 1);
}
bool Stream::isActive() const
{
PaError ret = Pa_IsStreamActive(stream_);
bool Stream::isActive() const
{
PaError ret = Pa_IsStreamActive(stream_);
if (ret < 0)
throw PaException(ret);
if (ret < 0)
throw PaException(ret);
return (ret == 1);
}
return (ret == 1);
}
// -----------------------------------------------------------------------------------
// -----------------------------------------------------------------------------------
//////
/// Returns the best known input latency for the Stream. This value may differ from the
/// suggested input latency set in the StreamParameters. Includes all sources of
/// latency known to PortAudio such as internal buffering, and Host API reported latency.
/// Doesn't include any estimates of unknown latency.
//////
PaTime Stream::inputLatency() const
{
const PaStreamInfo *info = Pa_GetStreamInfo(stream_);
if (info == NULL)
{
throw PaException(paInternalError);
return PaTime(0.0);
}
//////
/// Returns the best known input latency for the Stream. This value may differ from the
/// suggested input latency set in the StreamParameters. Includes all sources of
/// latency known to PortAudio such as internal buffering, and Host API reported latency.
/// Doesn't include any estimates of unknown latency.
//////
PaTime Stream::inputLatency() const
{
const PaStreamInfo *info = Pa_GetStreamInfo(stream_);
if (info == NULL)
{
throw PaException(paInternalError);
return PaTime(0.0);
}
return info->inputLatency;
}
return info->inputLatency;
}
//////
/// Returns the best known output latency for the Stream. This value may differ from the
/// suggested output latency set in the StreamParameters. Includes all sources of
/// latency known to PortAudio such as internal buffering, and Host API reported latency.
/// Doesn't include any estimates of unknown latency.
//////
PaTime Stream::outputLatency() const
{
const PaStreamInfo *info = Pa_GetStreamInfo(stream_);
if (info == NULL)
{
throw PaException(paInternalError);
return PaTime(0.0);
}
//////
/// Returns the best known output latency for the Stream. This value may differ from the
/// suggested output latency set in the StreamParameters. Includes all sources of
/// latency known to PortAudio such as internal buffering, and Host API reported latency.
/// Doesn't include any estimates of unknown latency.
//////
PaTime Stream::outputLatency() const
{
const PaStreamInfo *info = Pa_GetStreamInfo(stream_);
if (info == NULL)
{
throw PaException(paInternalError);
return PaTime(0.0);
}
return info->outputLatency;
}
return info->outputLatency;
}
//////
/// Returns the sample rate of the Stream. Usually this will be the
/// best known estimate of the used sample rate. For instance when opening a
/// Stream setting 44100.0 Hz in the StreamParameters, the actual sample
/// rate might be something like 44103.2 Hz (due to imperfections in the
/// sound card hardware).
//////
double Stream::sampleRate() const
{
const PaStreamInfo *info = Pa_GetStreamInfo(stream_);
if (info == NULL)
{
throw PaException(paInternalError);
return 0.0;
}
//////
/// Returns the sample rate of the Stream. Usually this will be the
/// best known estimate of the used sample rate. For instance when opening a
/// Stream setting 44100.0 Hz in the StreamParameters, the actual sample
/// rate might be something like 44103.2 Hz (due to imperfections in the
/// sound card hardware).
//////
double Stream::sampleRate() const
{
const PaStreamInfo *info = Pa_GetStreamInfo(stream_);
if (info == NULL)
{
throw PaException(paInternalError);
return 0.0;
}
return info->sampleRate;
}
return info->sampleRate;
}
// -----------------------------------------------------------------------------------
// -----------------------------------------------------------------------------------
PaTime Stream::time() const
{
return Pa_GetStreamTime(stream_);
}
PaTime Stream::time() const
{
return Pa_GetStreamTime(stream_);
}
// -----------------------------------------------------------------------------------
// -----------------------------------------------------------------------------------
//////
/// Accessor (const) for PortAudio PaStream pointer, useful for interfacing with
/// PortAudio add-ons such as PortMixer for instance. Normally accessing this
/// pointer should not be needed as PortAudioCpp aims to provide all of PortAudio's
/// functionality.
//////
const PaStream *Stream::paStream() const
{
return stream_;
}
//////
/// Accessor (const) for PortAudio PaStream pointer, useful for interfacing with
/// PortAudio add-ons such as PortMixer for instance. Normally accessing this
/// pointer should not be needed as PortAudioCpp aims to provide all of PortAudio's
/// functionality.
//////
const PaStream *Stream::paStream() const
{
return stream_;
}
//////
/// Accessor (non-const) for PortAudio PaStream pointer, useful for interfacing with
/// PortAudio add-ons such as PortMixer for instance. Normally accessing this
/// pointer should not be needed as PortAudioCpp aims to provide all of PortAudio's
/// functionality.
//////
PaStream *Stream::paStream()
{
return stream_;
}
//////
/// Accessor (non-const) for PortAudio PaStream pointer, useful for interfacing with
/// PortAudio add-ons such as PortMixer for instance. Normally accessing this
/// pointer should not be needed as PortAudioCpp aims to provide all of PortAudio's
/// functionality.
//////
PaStream *Stream::paStream()
{
return stream_;
}
// -----------------------------------------------------------------------------------
// -----------------------------------------------------------------------------------
} // namespace portaudio

View file

@ -6,160 +6,155 @@
namespace portaudio
{
// -----------------------------------------------------------------------------------
// -----------------------------------------------------------------------------------
//////
/// Default constructor; does nothing.
//////
StreamParameters::StreamParameters()
{
}
//////
/// Default constructor; does nothing.
//////
StreamParameters::StreamParameters()
{
}
//////
/// Sets up the all parameters needed to open either a half-duplex or full-duplex Stream.
///
/// @param inputParameters The parameters for the input direction of the to-be opened
/// Stream or DirectionSpecificStreamParameters::null() for an output-only Stream.
/// @param outputParameters The parameters for the output direction of the to-be opened
/// Stream or DirectionSpecificStreamParameters::null() for an input-only Stream.
/// @param sampleRate The to-be opened Stream's sample rate in Hz.
/// @param framesPerBuffer The number of frames per buffer for a CallbackStream, or
/// the preferred buffer granularity for a BlockingStream.
/// @param flags The flags for the to-be opened Stream; default paNoFlag.
//////
StreamParameters::StreamParameters(const DirectionSpecificStreamParameters &inputParameters,
const DirectionSpecificStreamParameters &outputParameters, double sampleRate, unsigned long framesPerBuffer,
PaStreamFlags flags) : inputParameters_(inputParameters), outputParameters_(outputParameters),
sampleRate_(sampleRate), framesPerBuffer_(framesPerBuffer), flags_(flags)
{
}
//////
/// Sets up the all parameters needed to open either a half-duplex or full-duplex Stream.
///
/// @param inputParameters The parameters for the input direction of the to-be opened
/// Stream or DirectionSpecificStreamParameters::null() for an output-only Stream.
/// @param outputParameters The parameters for the output direction of the to-be opened
/// Stream or DirectionSpecificStreamParameters::null() for an input-only Stream.
/// @param sampleRate The to-be opened Stream's sample rate in Hz.
/// @param framesPerBuffer The number of frames per buffer for a CallbackStream, or
/// the preferred buffer granularity for a BlockingStream.
/// @param flags The flags for the to-be opened Stream; default paNoFlag.
//////
StreamParameters::StreamParameters(const DirectionSpecificStreamParameters &inputParameters,
const DirectionSpecificStreamParameters &outputParameters, double sampleRate, unsigned long framesPerBuffer,
PaStreamFlags flags) : inputParameters_(inputParameters), outputParameters_(outputParameters),
sampleRate_(sampleRate), framesPerBuffer_(framesPerBuffer), flags_(flags)
{
}
// -----------------------------------------------------------------------------------
// -----------------------------------------------------------------------------------
//////
/// Sets the requested sample rate. If this sample rate isn't supported by the hardware, the
/// Stream will fail to open. The real-life sample rate used might differ slightly due to
/// imperfections in the sound card hardware; use Stream::sampleRate() to retreive the
/// best known estimate for this value.
//////
void StreamParameters::setSampleRate(double sampleRate)
{
sampleRate_ = sampleRate;
}
//////
/// Sets the requested sample rate. If this sample rate isn't supported by the hardware, the
/// Stream will fail to open. The real-life sample rate used might differ slightly due to
/// imperfections in the sound card hardware; use Stream::sampleRate() to retrieve the
/// best known estimate for this value.
//////
void StreamParameters::setSampleRate(double sampleRate)
{
sampleRate_ = sampleRate;
}
//////
/// Either the number of frames per buffer for a CallbackStream, or
/// the preferred buffer granularity for a BlockingStream. See PortAudio
/// documentation.
//////
void StreamParameters::setFramesPerBuffer(unsigned long framesPerBuffer)
{
framesPerBuffer_ = framesPerBuffer;
}
//////
/// Either the number of frames per buffer for a CallbackStream, or
/// the preferred buffer granularity for a BlockingStream. See PortAudio
/// documentation.
//////
void StreamParameters::setFramesPerBuffer(unsigned long framesPerBuffer)
{
framesPerBuffer_ = framesPerBuffer;
}
//////
/// Sets the specified flag or does nothing when the flag is already set. Doesn't
/// `unset' any previously existing flags (use clearFlags() for that).
//////
void StreamParameters::setFlag(PaStreamFlags flag)
{
flags_ |= flag;
}
//////
/// Sets the specified flag or does nothing when the flag is already set. Doesn't
/// `unset' any previously existing flags (use clearFlags() for that).
//////
void StreamParameters::setFlag(PaStreamFlags flag)
{
flags_ |= flag;
}
//////
/// Unsets the specified flag or does nothing if the flag isn't set. Doesn't affect
/// any other flags.
//////
void StreamParameters::unsetFlag(PaStreamFlags flag)
{
flags_ &= ~flag;
}
//////
/// Unsets the specified flag or does nothing if the flag isn't set. Doesn't affect
/// any other flags.
//////
void StreamParameters::unsetFlag(PaStreamFlags flag)
{
flags_ &= ~flag;
}
//////
/// Clears or `unsets' all set flags.
//////
void StreamParameters::clearFlags()
{
flags_ = paNoFlag;
}
//////
/// Clears or `unsets' all set flags.
//////
void StreamParameters::clearFlags()
{
flags_ = paNoFlag;
}
// -----------------------------------------------------------------------------------
// -----------------------------------------------------------------------------------
void StreamParameters::setInputParameters(const DirectionSpecificStreamParameters &parameters)
{
inputParameters_ = parameters;
}
void StreamParameters::setInputParameters(const DirectionSpecificStreamParameters &parameters)
{
inputParameters_ = parameters;
}
void StreamParameters::setOutputParameters(const DirectionSpecificStreamParameters &parameters)
{
outputParameters_ = parameters;
}
void StreamParameters::setOutputParameters(const DirectionSpecificStreamParameters &parameters)
{
outputParameters_ = parameters;
}
// -----------------------------------------------------------------------------------
// -----------------------------------------------------------------------------------
bool StreamParameters::isSupported() const
{
return (Pa_IsFormatSupported(inputParameters_.paStreamParameters(),
outputParameters_.paStreamParameters(), sampleRate_) == paFormatIsSupported);
}
bool StreamParameters::isSupported() const
{
return (Pa_IsFormatSupported(inputParameters_.paStreamParameters(),
outputParameters_.paStreamParameters(), sampleRate_) == paFormatIsSupported);
}
// -----------------------------------------------------------------------------------
// -----------------------------------------------------------------------------------
double StreamParameters::sampleRate() const
{
return sampleRate_;
}
double StreamParameters::sampleRate() const
{
return sampleRate_;
}
unsigned long StreamParameters::framesPerBuffer() const
{
return framesPerBuffer_;
}
unsigned long StreamParameters::framesPerBuffer() const
{
return framesPerBuffer_;
}
//////
/// Returns all currently set flags as a binary combined
/// integer value (PaStreamFlags). Use isFlagSet() to
/// avoid dealing with the bitmasks.
//////
PaStreamFlags StreamParameters::flags() const
{
return flags_;
}
//////
/// Returns all currently set flags as a binary combined
/// integer value (PaStreamFlags). Use isFlagSet() to
/// avoid dealing with the bitmasks.
//////
PaStreamFlags StreamParameters::flags() const
{
return flags_;
}
//////
/// Returns true if the specified flag is currently set
/// or false if it isn't.
//////
bool StreamParameters::isFlagSet(PaStreamFlags flag) const
{
return ((flags_ & flag) != 0);
}
//////
/// Returns true if the specified flag is currently set
/// or false if it isn't.
//////
bool StreamParameters::isFlagSet(PaStreamFlags flag) const
{
return ((flags_ & flag) != 0);
}
// -----------------------------------------------------------------------------------
// -----------------------------------------------------------------------------------
DirectionSpecificStreamParameters &StreamParameters::inputParameters()
{
return inputParameters_;
}
DirectionSpecificStreamParameters &StreamParameters::inputParameters()
{
return inputParameters_;
}
const DirectionSpecificStreamParameters &StreamParameters::inputParameters() const
{
return inputParameters_;
}
const DirectionSpecificStreamParameters &StreamParameters::inputParameters() const
{
return inputParameters_;
}
DirectionSpecificStreamParameters &StreamParameters::outputParameters()
{
return outputParameters_;
}
DirectionSpecificStreamParameters &StreamParameters::outputParameters()
{
return outputParameters_;
}
const DirectionSpecificStreamParameters &StreamParameters::outputParameters() const
{
return outputParameters_;
}
const DirectionSpecificStreamParameters &StreamParameters::outputParameters() const
{
return outputParameters_;
}
// -----------------------------------------------------------------------------------
// -----------------------------------------------------------------------------------
} // namespace portaudio

View file

@ -12,297 +12,296 @@
namespace portaudio
{
// -----------------------------------------------------------------------------------
// Static members:
System *System::instance_ = NULL;
int System::initCount_ = 0;
HostApi **System::hostApis_ = NULL;
Device **System::devices_ = NULL;
Device *System::nullDevice_ = NULL;
// -----------------------------------------------------------------------------------
int System::version()
{
return Pa_GetVersion();
}
const char *System::versionText()
{
return Pa_GetVersionText();
}
void System::initialize()
{
++initCount_;
if (initCount_ == 1)
{
// Create singleton:
assert(instance_ == NULL);
instance_ = new System();
// Initialize the PortAudio system:
{
PaError err = Pa_Initialize();
if (err != paNoError)
throw PaException(err);
}
// Create and populate device array:
{
int numDevices = instance().deviceCount();
devices_ = new Device*[numDevices];
for (int i = 0; i < numDevices; ++i)
devices_[i] = new Device(i);
}
// Create and populate host api array:
{
int numHostApis = instance().hostApiCount();
hostApis_ = new HostApi*[numHostApis];
for (int i = 0; i < numHostApis; ++i)
hostApis_[i] = new HostApi(i);
}
// Create null device:
nullDevice_ = new Device(paNoDevice);
}
}
void System::terminate()
{
PaError err = paNoError;
if (initCount_ == 1)
{
// Destroy null device:
delete nullDevice_;
// Destroy host api array:
{
if (hostApis_ != NULL)
{
int numHostApis = instance().hostApiCount();
for (int i = 0; i < numHostApis; ++i)
delete hostApis_[i];
delete[] hostApis_;
hostApis_ = NULL;
}
}
// -----------------------------------------------------------------------------------
// Static members:
System *System::instance_ = NULL;
int System::initCount_ = 0;
HostApi **System::hostApis_ = NULL;
Device **System::devices_ = NULL;
Device *System::nullDevice_ = NULL;
// -----------------------------------------------------------------------------------
int System::version()
{
return Pa_GetVersion();
}
const char *System::versionText()
{
return Pa_GetVersionText();
}
void System::initialize()
{
++initCount_;
// Destroy device array:
{
if (devices_ != NULL)
{
int numDevices = instance().deviceCount();
if (initCount_ == 1)
{
// Create singleton:
assert(instance_ == NULL);
instance_ = new System();
for (int i = 0; i < numDevices; ++i)
delete devices_[i];
// Initialize the PortAudio system:
{
PaError err = Pa_Initialize();
delete[] devices_;
devices_ = NULL;
}
}
if (err != paNoError)
throw PaException(err);
}
// Terminate the PortAudio system:
assert(instance_ != NULL);
err = Pa_Terminate();
// Create and populate device array:
{
int numDevices = instance().deviceCount();
// Destroy singleton:
delete instance_;
instance_ = NULL;
}
devices_ = new Device*[numDevices];
for (int i = 0; i < numDevices; ++i)
devices_[i] = new Device(i);
}
// Create and populate host api array:
{
int numHostApis = instance().hostApiCount();
hostApis_ = new HostApi*[numHostApis];
if (initCount_ > 0)
--initCount_;
if (err != paNoError)
throw PaException(err);
}
System &System::instance()
{
assert(exists());
return *instance_;
}
bool System::exists()
{
return (instance_ != NULL);
}
// -----------------------------------------------------------------------------------
System::HostApiIterator System::hostApisBegin()
{
System::HostApiIterator tmp;
tmp.ptr_ = &hostApis_[0]; // begin (first element)
return tmp;
}
System::HostApiIterator System::hostApisEnd()
{
int count = hostApiCount();
System::HostApiIterator tmp;
tmp.ptr_ = &hostApis_[count]; // end (one past last element)
return tmp;
}
HostApi &System::defaultHostApi()
{
PaHostApiIndex defaultHostApi = Pa_GetDefaultHostApi();
if (defaultHostApi < 0)
throw PaException(defaultHostApi);
return *hostApis_[defaultHostApi];
}
HostApi &System::hostApiByTypeId(PaHostApiTypeId type)
{
PaHostApiIndex index = Pa_HostApiTypeIdToHostApiIndex(type);
if (index < 0)
throw PaException(index);
return *hostApis_[index];
}
HostApi &System::hostApiByIndex(PaHostApiIndex index)
{
if (index < 0 || index >= hostApiCount())
throw PaException(paInternalError);
return *hostApis_[index];
}
int System::hostApiCount()
{
PaHostApiIndex count = Pa_GetHostApiCount();
if (count < 0)
throw PaException(count);
return count;
}
// -----------------------------------------------------------------------------------
System::DeviceIterator System::devicesBegin()
{
DeviceIterator tmp;
tmp.ptr_ = &devices_[0];
return tmp;
}
System::DeviceIterator System::devicesEnd()
{
int count = deviceCount();
DeviceIterator tmp;
tmp.ptr_ = &devices_[count];
return tmp;
}
//////
/// Returns the System's default input Device, or the null Device if none
/// was available.
//////
Device &System::defaultInputDevice()
{
PaDeviceIndex index = Pa_GetDefaultInputDevice();
return deviceByIndex(index);
}
//////
/// Returns the System's default output Device, or the null Device if none
/// was available.
//////
Device &System::defaultOutputDevice()
{
PaDeviceIndex index = Pa_GetDefaultOutputDevice();
return deviceByIndex(index);
}
//////
/// Returns the Device for the given index.
/// Will throw a paInternalError equivalent PaException if the given index
/// is out of range.
//////
Device &System::deviceByIndex(PaDeviceIndex index)
{
if (index < -1 || index >= deviceCount())
{
throw PaException(paInternalError);
}
if (index == -1)
return System::instance().nullDevice();
return *devices_[index];
}
int System::deviceCount()
{
PaDeviceIndex count = Pa_GetDeviceCount();
if (count < 0)
throw PaException(count);
return count;
}
Device &System::nullDevice()
{
return *nullDevice_;
}
// -----------------------------------------------------------------------------------
void System::sleep(long msec)
{
Pa_Sleep(msec);
}
int System::sizeOfSample(PaSampleFormat format)
{
PaError err = Pa_GetSampleSize(format);
if (err < 0)
{
throw PaException(err);
return 0;
}
return err;
}
// -----------------------------------------------------------------------------------
System::System()
{
// (left blank intentionally)
}
System::~System()
{
// (left blank intentionally)
}
// -----------------------------------------------------------------------------------
for (int i = 0; i < numHostApis; ++i)
hostApis_[i] = new HostApi(i);
}
// Create null device:
nullDevice_ = new Device(paNoDevice);
}
}
void System::terminate()
{
PaError err = paNoError;
if (initCount_ == 1)
{
// Destroy null device:
delete nullDevice_;
// Destroy host api array:
{
if (hostApis_ != NULL)
{
int numHostApis = instance().hostApiCount();
for (int i = 0; i < numHostApis; ++i)
delete hostApis_[i];
delete[] hostApis_;
hostApis_ = NULL;
}
}
// Destroy device array:
{
if (devices_ != NULL)
{
int numDevices = instance().deviceCount();
for (int i = 0; i < numDevices; ++i)
delete devices_[i];
delete[] devices_;
devices_ = NULL;
}
}
// Terminate the PortAudio system:
assert(instance_ != NULL);
err = Pa_Terminate();
// Destroy singleton:
delete instance_;
instance_ = NULL;
}
if (initCount_ > 0)
--initCount_;
if (err != paNoError)
throw PaException(err);
}
System &System::instance()
{
assert(exists());
return *instance_;
}
bool System::exists()
{
return (instance_ != NULL);
}
// -----------------------------------------------------------------------------------
System::HostApiIterator System::hostApisBegin()
{
System::HostApiIterator tmp;
tmp.ptr_ = &hostApis_[0]; // begin (first element)
return tmp;
}
System::HostApiIterator System::hostApisEnd()
{
int count = hostApiCount();
System::HostApiIterator tmp;
tmp.ptr_ = &hostApis_[count]; // end (one past last element)
return tmp;
}
HostApi &System::defaultHostApi()
{
PaHostApiIndex defaultHostApi = Pa_GetDefaultHostApi();
if (defaultHostApi < 0)
throw PaException(defaultHostApi);
return *hostApis_[defaultHostApi];
}
HostApi &System::hostApiByTypeId(PaHostApiTypeId type)
{
PaHostApiIndex index = Pa_HostApiTypeIdToHostApiIndex(type);
if (index < 0)
throw PaException(index);
return *hostApis_[index];
}
HostApi &System::hostApiByIndex(PaHostApiIndex index)
{
if (index < 0 || index >= hostApiCount())
throw PaException(paInternalError);
return *hostApis_[index];
}
int System::hostApiCount()
{
PaHostApiIndex count = Pa_GetHostApiCount();
if (count < 0)
throw PaException(count);
return count;
}
// -----------------------------------------------------------------------------------
System::DeviceIterator System::devicesBegin()
{
DeviceIterator tmp;
tmp.ptr_ = &devices_[0];
return tmp;
}
System::DeviceIterator System::devicesEnd()
{
int count = deviceCount();
DeviceIterator tmp;
tmp.ptr_ = &devices_[count];
return tmp;
}
//////
/// Returns the System's default input Device, or the null Device if none
/// was available.
//////
Device &System::defaultInputDevice()
{
PaDeviceIndex index = Pa_GetDefaultInputDevice();
return deviceByIndex(index);
}
//////
/// Returns the System's default output Device, or the null Device if none
/// was available.
//////
Device &System::defaultOutputDevice()
{
PaDeviceIndex index = Pa_GetDefaultOutputDevice();
return deviceByIndex(index);
}
//////
/// Returns the Device for the given index.
/// Will throw a paInternalError equivalent PaException if the given index
/// is out of range.
//////
Device &System::deviceByIndex(PaDeviceIndex index)
{
if (index < -1 || index >= deviceCount())
{
throw PaException(paInternalError);
}
if (index == -1)
return System::instance().nullDevice();
return *devices_[index];
}
int System::deviceCount()
{
PaDeviceIndex count = Pa_GetDeviceCount();
if (count < 0)
throw PaException(count);
return count;
}
Device &System::nullDevice()
{
return *nullDevice_;
}
// -----------------------------------------------------------------------------------
void System::sleep(long msec)
{
Pa_Sleep(msec);
}
int System::sizeOfSample(PaSampleFormat format)
{
PaError err = Pa_GetSampleSize(format);
if (err < 0)
{
throw PaException(err);
return 0;
}
return err;
}
// -----------------------------------------------------------------------------------
System::System()
{
// (left blank intentionally)
}
System::~System()
{
// (left blank intentionally)
}
// -----------------------------------------------------------------------------------
} // namespace portaudio

View file

@ -2,59 +2,57 @@
namespace portaudio
{
// -----------------------------------------------------------------------------------
// -----------------------------------------------------------------------------------
Device &System::DeviceIterator::operator*() const
{
return **ptr_;
}
Device &System::DeviceIterator::operator*() const
{
return **ptr_;
}
Device *System::DeviceIterator::operator->() const
{
return &**this;
}
Device *System::DeviceIterator::operator->() const
{
return &**this;
}
// -----------------------------------------------------------------------------------
// -----------------------------------------------------------------------------------
System::DeviceIterator &System::DeviceIterator::operator++()
{
++ptr_;
return *this;
}
System::DeviceIterator &System::DeviceIterator::operator++()
{
++ptr_;
return *this;
}
System::DeviceIterator System::DeviceIterator::operator++(int)
{
System::DeviceIterator prev = *this;
++*this;
return prev;
}
System::DeviceIterator System::DeviceIterator::operator++(int)
{
System::DeviceIterator prev = *this;
++*this;
return prev;
}
System::DeviceIterator &System::DeviceIterator::operator--()
{
--ptr_;
return *this;
}
System::DeviceIterator &System::DeviceIterator::operator--()
{
--ptr_;
return *this;
}
System::DeviceIterator System::DeviceIterator::operator--(int)
{
System::DeviceIterator prev = *this;
--*this;
return prev;
}
System::DeviceIterator System::DeviceIterator::operator--(int)
{
System::DeviceIterator prev = *this;
--*this;
return prev;
}
// -----------------------------------------------------------------------------------
// -----------------------------------------------------------------------------------
bool System::DeviceIterator::operator==(const System::DeviceIterator &rhs) const
{
return (ptr_ == rhs.ptr_);
}
bool System::DeviceIterator::operator==(const System::DeviceIterator &rhs) const
{
return (ptr_ == rhs.ptr_);
}
bool System::DeviceIterator::operator!=(const System::DeviceIterator &rhs) const
{
return !(*this == rhs);
}
bool System::DeviceIterator::operator!=(const System::DeviceIterator &rhs) const
{
return !(*this == rhs);
}
// -----------------------------------------------------------------------------------
// -----------------------------------------------------------------------------------
} // namespace portaudio

View file

@ -2,58 +2,57 @@
namespace portaudio
{
// -----------------------------------------------------------------------------------
// -----------------------------------------------------------------------------------
HostApi &System::HostApiIterator::operator*() const
{
return **ptr_;
}
HostApi &System::HostApiIterator::operator*() const
{
return **ptr_;
}
HostApi *System::HostApiIterator::operator->() const
{
return &**this;
}
HostApi *System::HostApiIterator::operator->() const
{
return &**this;
}
// -----------------------------------------------------------------------------------
// -----------------------------------------------------------------------------------
System::HostApiIterator &System::HostApiIterator::operator++()
{
++ptr_;
return *this;
}
System::HostApiIterator &System::HostApiIterator::operator++()
{
++ptr_;
return *this;
}
System::HostApiIterator System::HostApiIterator::operator++(int)
{
System::HostApiIterator prev = *this;
++*this;
return prev;
}
System::HostApiIterator System::HostApiIterator::operator++(int)
{
System::HostApiIterator prev = *this;
++*this;
return prev;
}
System::HostApiIterator &System::HostApiIterator::operator--()
{
--ptr_;
return *this;
}
System::HostApiIterator &System::HostApiIterator::operator--()
{
--ptr_;
return *this;
}
System::HostApiIterator System::HostApiIterator::operator--(int)
{
System::HostApiIterator prev = *this;
--*this;
return prev;
}
System::HostApiIterator System::HostApiIterator::operator--(int)
{
System::HostApiIterator prev = *this;
--*this;
return prev;
}
// -----------------------------------------------------------------------------------
// -----------------------------------------------------------------------------------
bool System::HostApiIterator::operator==(const System::HostApiIterator &rhs) const
{
return (ptr_ == rhs.ptr_);
}
bool System::HostApiIterator::operator==(const System::HostApiIterator &rhs) const
{
return (ptr_ == rhs.ptr_);
}
bool System::HostApiIterator::operator!=(const System::HostApiIterator &rhs) const
{
return !(*this == rhs);
}
bool System::HostApiIterator::operator!=(const System::HostApiIterator &rhs) const
{
return !(*this == rhs);
}
// -----------------------------------------------------------------------------------
// -----------------------------------------------------------------------------------
} // namespace portaudio

View file

@ -26,13 +26,13 @@
*/
/*
* The text above constitutes the entire PortAudio license; however,
* 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
* they can be incorporated into the canonical version. It is also
* requested that these non-binding requests be included along with the
* license above.
*/
@ -55,9 +55,9 @@
JNIEXPORT jint JNICALL Java_com_portaudio_BlockingStream_getReadAvailable
(JNIEnv *env, jobject blockingStream)
{
PaStream *stream =jpa_GetStreamPointer( env, blockingStream );
if( stream == NULL ) return 0;
return Pa_GetStreamReadAvailable( stream );
PaStream *stream =jpa_GetStreamPointer( env, blockingStream );
if( stream == NULL ) return 0;
return Pa_GetStreamReadAvailable( stream );
}
/*
@ -68,9 +68,9 @@ JNIEXPORT jint JNICALL Java_com_portaudio_BlockingStream_getReadAvailable
JNIEXPORT jint JNICALL Java_com_portaudio_BlockingStream_getWriteAvailable
(JNIEnv *env, jobject blockingStream)
{
PaStream *stream =jpa_GetStreamPointer( env, blockingStream );
if( stream == NULL ) return 0;
return Pa_GetStreamWriteAvailable( stream );
PaStream *stream =jpa_GetStreamPointer( env, blockingStream );
if( stream == NULL ) return 0;
return Pa_GetStreamWriteAvailable( stream );
}
@ -82,33 +82,33 @@ JNIEXPORT jint JNICALL Java_com_portaudio_BlockingStream_getWriteAvailable
JNIEXPORT jboolean JNICALL Java_com_portaudio_BlockingStream_writeFloats
(JNIEnv *env, jobject blockingStream, jfloatArray buffer, jint numFrames)
{
jfloat *carr;
jint err;
PaStream *stream =jpa_GetStreamPointer( env, blockingStream );
if( buffer == NULL )
{
(*env)->ThrowNew( env, (*env)->FindClass(env,"java/lang/RuntimeException"),
jfloat *carr;
jint err;
PaStream *stream =jpa_GetStreamPointer( env, blockingStream );
if( buffer == NULL )
{
(*env)->ThrowNew( env, (*env)->FindClass(env,"java/lang/RuntimeException"),
"null stream buffer");
return FALSE;
}
carr = (*env)->GetFloatArrayElements(env, buffer, NULL);
if (carr == NULL)
{
(*env)->ThrowNew( env, (*env)->FindClass(env,"java/lang/RuntimeException"),
return FALSE;
}
carr = (*env)->GetFloatArrayElements(env, buffer, NULL);
if (carr == NULL)
{
(*env)->ThrowNew( env, (*env)->FindClass(env,"java/lang/RuntimeException"),
"invalid stream buffer");
return FALSE;
}
err = Pa_WriteStream( stream, carr, numFrames );
(*env)->ReleaseFloatArrayElements(env, buffer, carr, 0);
if( err == paOutputUnderflowed )
{
return TRUE;
}
else
{
jpa_CheckError( env, err );
return FALSE;
}
return FALSE;
}
err = Pa_WriteStream( stream, carr, numFrames );
(*env)->ReleaseFloatArrayElements(env, buffer, carr, 0);
if( err == paOutputUnderflowed )
{
return TRUE;
}
else
{
jpa_CheckError( env, err );
return FALSE;
}
}
/*
@ -119,33 +119,33 @@ JNIEXPORT jboolean JNICALL Java_com_portaudio_BlockingStream_writeFloats
JNIEXPORT jboolean JNICALL Java_com_portaudio_BlockingStream_readFloats
(JNIEnv *env, jobject blockingStream, jfloatArray buffer, jint numFrames)
{
jfloat *carr;
jint err;
PaStream *stream =jpa_GetStreamPointer( env, blockingStream );
if( buffer == NULL )
{
(*env)->ThrowNew( env, (*env)->FindClass(env,"java/lang/RuntimeException"),
jfloat *carr;
jint err;
PaStream *stream =jpa_GetStreamPointer( env, blockingStream );
if( buffer == NULL )
{
(*env)->ThrowNew( env, (*env)->FindClass(env,"java/lang/RuntimeException"),
"null stream buffer");
return FALSE;
}
carr = (*env)->GetFloatArrayElements(env, buffer, NULL);
if (carr == NULL)
{
(*env)->ThrowNew( env, (*env)->FindClass(env,"java/lang/RuntimeException"),
return FALSE;
}
carr = (*env)->GetFloatArrayElements(env, buffer, NULL);
if (carr == NULL)
{
(*env)->ThrowNew( env, (*env)->FindClass(env,"java/lang/RuntimeException"),
"invalid stream buffer");
return FALSE;
}
err = Pa_ReadStream( stream, carr, numFrames );
(*env)->ReleaseFloatArrayElements(env, buffer, carr, 0);
if( err == paInputOverflowed )
{
return TRUE;
}
else
{
jpa_CheckError( env, err );
return FALSE;
}
return FALSE;
}
err = Pa_ReadStream( stream, carr, numFrames );
(*env)->ReleaseFloatArrayElements(env, buffer, carr, 0);
if( err == paInputOverflowed )
{
return TRUE;
}
else
{
jpa_CheckError( env, err );
return FALSE;
}
}
/*
@ -156,33 +156,33 @@ JNIEXPORT jboolean JNICALL Java_com_portaudio_BlockingStream_readFloats
JNIEXPORT jboolean JNICALL Java_com_portaudio_BlockingStream_writeShorts
(JNIEnv *env, jobject blockingStream, jfloatArray buffer, jint numFrames)
{
jshort *carr;
jint err;
PaStream *stream =jpa_GetStreamPointer( env, blockingStream );
if( buffer == NULL )
{
(*env)->ThrowNew( env, (*env)->FindClass(env,"java/lang/RuntimeException"),
jshort *carr;
jint err;
PaStream *stream =jpa_GetStreamPointer( env, blockingStream );
if( buffer == NULL )
{
(*env)->ThrowNew( env, (*env)->FindClass(env,"java/lang/RuntimeException"),
"null stream buffer");
return FALSE;
}
carr = (*env)->GetShortArrayElements(env, buffer, NULL);
if (carr == NULL)
{
(*env)->ThrowNew( env, (*env)->FindClass(env,"java/lang/RuntimeException"),
return FALSE;
}
carr = (*env)->GetShortArrayElements(env, buffer, NULL);
if (carr == NULL)
{
(*env)->ThrowNew( env, (*env)->FindClass(env,"java/lang/RuntimeException"),
"invalid stream buffer");
return FALSE;
}
err = Pa_WriteStream( stream, carr, numFrames );
(*env)->ReleaseShortArrayElements(env, buffer, carr, 0);
if( err == paOutputUnderflowed )
{
return TRUE;
}
else
{
jpa_CheckError( env, err );
return FALSE;
}
return FALSE;
}
err = Pa_WriteStream( stream, carr, numFrames );
(*env)->ReleaseShortArrayElements(env, buffer, carr, 0);
if( err == paOutputUnderflowed )
{
return TRUE;
}
else
{
jpa_CheckError( env, err );
return FALSE;
}
}
/*
@ -193,33 +193,33 @@ JNIEXPORT jboolean JNICALL Java_com_portaudio_BlockingStream_writeShorts
JNIEXPORT jboolean JNICALL Java_com_portaudio_BlockingStream_readShorts
(JNIEnv *env, jobject blockingStream, jfloatArray buffer, jint numFrames)
{
jshort *carr;
jint err;
PaStream *stream =jpa_GetStreamPointer( env, blockingStream );
if( buffer == NULL )
{
(*env)->ThrowNew( env, (*env)->FindClass(env,"java/lang/RuntimeException"),
jshort *carr;
jint err;
PaStream *stream =jpa_GetStreamPointer( env, blockingStream );
if( buffer == NULL )
{
(*env)->ThrowNew( env, (*env)->FindClass(env,"java/lang/RuntimeException"),
"null stream buffer");
return FALSE;
}
carr = (*env)->GetShortArrayElements(env, buffer, NULL);
if (carr == NULL)
{
(*env)->ThrowNew( env, (*env)->FindClass(env,"java/lang/RuntimeException"),
return FALSE;
}
carr = (*env)->GetShortArrayElements(env, buffer, NULL);
if (carr == NULL)
{
(*env)->ThrowNew( env, (*env)->FindClass(env,"java/lang/RuntimeException"),
"invalid stream buffer");
return FALSE;
}
err = Pa_ReadStream( stream, carr, numFrames );
(*env)->ReleaseShortArrayElements(env, buffer, carr, 0);
if( err == paInputOverflowed )
{
return TRUE;
}
else
{
jpa_CheckError( env, err );
return FALSE;
}
return FALSE;
}
err = Pa_ReadStream( stream, carr, numFrames );
(*env)->ReleaseShortArrayElements(env, buffer, carr, 0);
if( err == paInputOverflowed )
{
return TRUE;
}
else
{
jpa_CheckError( env, err );
return FALSE;
}
}
/*
@ -230,9 +230,9 @@ JNIEXPORT jboolean JNICALL Java_com_portaudio_BlockingStream_readShorts
JNIEXPORT void JNICALL Java_com_portaudio_BlockingStream_start
(JNIEnv *env, jobject blockingStream )
{
PaStream *stream = jpa_GetStreamPointer( env, blockingStream );
int err = Pa_StartStream( stream );
jpa_CheckError( env, err );
PaStream *stream = jpa_GetStreamPointer( env, blockingStream );
int err = Pa_StartStream( stream );
jpa_CheckError( env, err );
}
/*
@ -243,9 +243,9 @@ JNIEXPORT void JNICALL Java_com_portaudio_BlockingStream_start
JNIEXPORT void JNICALL Java_com_portaudio_BlockingStream_stop
(JNIEnv *env, jobject blockingStream )
{
PaStream *stream =jpa_GetStreamPointer( env, blockingStream );
int err = Pa_StopStream( stream );
jpa_CheckError( env, err );
PaStream *stream =jpa_GetStreamPointer( env, blockingStream );
int err = Pa_StopStream( stream );
jpa_CheckError( env, err );
}
/*
* Class: com_portaudio_BlockingStream
@ -255,9 +255,9 @@ JNIEXPORT void JNICALL Java_com_portaudio_BlockingStream_stop
JNIEXPORT void JNICALL Java_com_portaudio_BlockingStream_abort
(JNIEnv *env, jobject blockingStream )
{
PaStream *stream =jpa_GetStreamPointer( env, blockingStream );
int err = Pa_AbortStream( stream );
jpa_CheckError( env, err );
PaStream *stream =jpa_GetStreamPointer( env, blockingStream );
int err = Pa_AbortStream( stream );
jpa_CheckError( env, err );
}
/*
@ -268,15 +268,15 @@ JNIEXPORT void JNICALL Java_com_portaudio_BlockingStream_abort
JNIEXPORT void JNICALL Java_com_portaudio_BlockingStream_close
(JNIEnv *env, jobject blockingStream )
{
jclass cls;
PaStream *stream =jpa_GetStreamPointer( env, blockingStream );
if( stream != NULL )
{
int err = Pa_CloseStream( stream );
jpa_CheckError( env, err );
cls = (*env)->GetObjectClass(env, blockingStream);
jpa_SetLongField( env, cls, blockingStream, "nativeStream", (jlong) 0 );
}
jclass cls;
PaStream *stream =jpa_GetStreamPointer( env, blockingStream );
if( stream != NULL )
{
int err = Pa_CloseStream( stream );
jpa_CheckError( env, err );
cls = (*env)->GetObjectClass(env, blockingStream);
jpa_SetLongField( env, cls, blockingStream, "nativeStream", (jlong) 0 );
}
}
/*
@ -287,11 +287,11 @@ JNIEXPORT void JNICALL Java_com_portaudio_BlockingStream_close
JNIEXPORT jboolean JNICALL Java_com_portaudio_BlockingStream_isStopped
(JNIEnv *env, jobject blockingStream )
{
int err;
PaStream *stream =jpa_GetStreamPointer( env, blockingStream );
if( stream == NULL ) return 1;
err = Pa_IsStreamStopped( stream );
return (jpa_CheckError( env, err ) > 0);
int err;
PaStream *stream =jpa_GetStreamPointer( env, blockingStream );
if( stream == NULL ) return 1;
err = Pa_IsStreamStopped( stream );
return (jpa_CheckError( env, err ) > 0);
}
/*
* Class: com_portaudio_BlockingStream
@ -301,11 +301,11 @@ JNIEXPORT jboolean JNICALL Java_com_portaudio_BlockingStream_isStopped
JNIEXPORT jboolean JNICALL Java_com_portaudio_BlockingStream_isActive
(JNIEnv *env, jobject blockingStream )
{
int err;
PaStream *stream =jpa_GetStreamPointer( env, blockingStream );
if( stream == NULL ) return 0;
err = Pa_IsStreamActive( stream );
return (jpa_CheckError( env, err ) > 0);
int err;
PaStream *stream =jpa_GetStreamPointer( env, blockingStream );
if( stream == NULL ) return 0;
err = Pa_IsStreamActive( stream );
return (jpa_CheckError( env, err ) > 0);
}
@ -317,9 +317,9 @@ JNIEXPORT jboolean JNICALL Java_com_portaudio_BlockingStream_isActive
JNIEXPORT jdouble JNICALL Java_com_portaudio_BlockingStream_getTime
(JNIEnv *env, jobject blockingStream )
{
PaStream *stream =jpa_GetStreamPointer( env, blockingStream );
if( stream == NULL ) return 0.0;
return Pa_GetStreamTime( stream );
PaStream *stream =jpa_GetStreamPointer( env, blockingStream );
if( stream == NULL ) return 0.0;
return Pa_GetStreamTime( stream );
}
@ -331,22 +331,21 @@ JNIEXPORT jdouble JNICALL Java_com_portaudio_BlockingStream_getTime
JNIEXPORT void JNICALL Java_com_portaudio_BlockingStream_getInfo
(JNIEnv *env, jobject blockingStream, jobject streamInfo)
{
PaStream *stream =jpa_GetStreamPointer( env, blockingStream );
const PaStreamInfo *info = Pa_GetStreamInfo( stream );
if( streamInfo == NULL )
{
jpa_ThrowError( env, "Invalid stream." );
}
else
{
/* Get a reference to obj's class */
jclass cls = (*env)->GetObjectClass(env, streamInfo);
jpa_SetIntField( env, cls, streamInfo, "structVersion", info->structVersion );
jpa_SetDoubleField( env, cls, streamInfo, "inputLatency", info->inputLatency );
jpa_SetDoubleField( env, cls, streamInfo, "outputLatency", info->outputLatency );
jpa_SetDoubleField( env, cls, streamInfo, "sampleRate", info->sampleRate );
}
}
PaStream *stream =jpa_GetStreamPointer( env, blockingStream );
const PaStreamInfo *info = Pa_GetStreamInfo( stream );
if( streamInfo == NULL )
{
jpa_ThrowError( env, "Invalid stream." );
}
else
{
/* Get a reference to obj's class */
jclass cls = (*env)->GetObjectClass(env, streamInfo);
jpa_SetIntField( env, cls, streamInfo, "structVersion", info->structVersion );
jpa_SetDoubleField( env, cls, streamInfo, "inputLatency", info->inputLatency );
jpa_SetDoubleField( env, cls, streamInfo, "outputLatency", info->outputLatency );
jpa_SetDoubleField( env, cls, streamInfo, "sampleRate", info->sampleRate );
}
}

View file

@ -26,13 +26,13 @@
*/
/*
* The text above constitutes the entire PortAudio license; however,
* 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
* they can be incorporated into the canonical version. It is also
* requested that these non-binding requests be included along with the
* license above.
*/
@ -48,7 +48,7 @@
JNIEXPORT jint JNICALL Java_com_portaudio_PortAudio_getVersion
(JNIEnv *env, jclass clazz)
{
return Pa_GetVersion();
return Pa_GetVersion();
}
/*
@ -59,7 +59,7 @@ JNIEXPORT jint JNICALL Java_com_portaudio_PortAudio_getVersion
JNIEXPORT jstring JNICALL Java_com_portaudio_PortAudio_getVersionText
(JNIEnv *env, jclass clazz)
{
return (*env)->NewStringUTF(env, Pa_GetVersionText() );
return (*env)->NewStringUTF(env, Pa_GetVersionText() );
}
/*
@ -70,8 +70,8 @@ JNIEXPORT jstring JNICALL Java_com_portaudio_PortAudio_getVersionText
JNIEXPORT void JNICALL Java_com_portaudio_PortAudio_initialize
(JNIEnv *env, jclass clazz)
{
PaError err = Pa_Initialize();
jpa_CheckError( env, err );
PaError err = Pa_Initialize();
jpa_CheckError( env, err );
}
/*
@ -82,8 +82,8 @@ JNIEXPORT void JNICALL Java_com_portaudio_PortAudio_initialize
JNIEXPORT void JNICALL Java_com_portaudio_PortAudio_terminate
(JNIEnv *env, jclass clazz)
{
PaError err = Pa_Terminate();
jpa_CheckError( env, err );
PaError err = Pa_Terminate();
jpa_CheckError( env, err );
}
/*
@ -94,8 +94,8 @@ JNIEXPORT void JNICALL Java_com_portaudio_PortAudio_terminate
JNIEXPORT jint JNICALL Java_com_portaudio_PortAudio_getDeviceCount
(JNIEnv *env, jclass clazz)
{
jint count = Pa_GetDeviceCount();
return jpa_CheckError( env, count );
jint count = Pa_GetDeviceCount();
return jpa_CheckError( env, count );
}
/*
@ -106,27 +106,27 @@ JNIEXPORT jint JNICALL Java_com_portaudio_PortAudio_getDeviceCount
JNIEXPORT void JNICALL Java_com_portaudio_PortAudio_getDeviceInfo
(JNIEnv *env, jclass clazz, jint index, jobject deviceInfo)
{
const PaDeviceInfo *info;
/* Get a reference to obj's class */
jclass cls = (*env)->GetObjectClass(env, deviceInfo);
info = Pa_GetDeviceInfo( index );
if( info == NULL )
{
jpa_ThrowError( env, "Pa_GetDeviceInfo returned NULL." );
}
else
{
jpa_SetStringField( env, cls, deviceInfo, "name", info->name );
jpa_SetIntField( env, cls, deviceInfo, "maxInputChannels", info->maxInputChannels );
jpa_SetIntField( env, cls, deviceInfo, "maxOutputChannels", info->maxOutputChannels );
jpa_SetIntField( env, cls, deviceInfo, "hostApi", info->hostApi );
jpa_SetDoubleField( env, cls, deviceInfo, "defaultSampleRate", info->defaultSampleRate );
jpa_SetDoubleField( env, cls, deviceInfo, "defaultLowInputLatency", info->defaultLowInputLatency );
jpa_SetDoubleField( env, cls, deviceInfo, "defaultLowInputLatency", info->defaultHighInputLatency );
jpa_SetDoubleField( env, cls, deviceInfo, "defaultLowOutputLatency", info->defaultLowOutputLatency );
jpa_SetDoubleField( env, cls, deviceInfo, "defaultHighOutputLatency", info->defaultHighOutputLatency );
}
const PaDeviceInfo *info;
/* Get a reference to obj's class */
jclass cls = (*env)->GetObjectClass(env, deviceInfo);
info = Pa_GetDeviceInfo( index );
if( info == NULL )
{
jpa_ThrowError( env, "Pa_GetDeviceInfo returned NULL." );
}
else
{
jpa_SetStringField( env, cls, deviceInfo, "name", info->name );
jpa_SetIntField( env, cls, deviceInfo, "maxInputChannels", info->maxInputChannels );
jpa_SetIntField( env, cls, deviceInfo, "maxOutputChannels", info->maxOutputChannels );
jpa_SetIntField( env, cls, deviceInfo, "hostApi", info->hostApi );
jpa_SetDoubleField( env, cls, deviceInfo, "defaultSampleRate", info->defaultSampleRate );
jpa_SetDoubleField( env, cls, deviceInfo, "defaultLowInputLatency", info->defaultLowInputLatency );
jpa_SetDoubleField( env, cls, deviceInfo, "defaultLowInputLatency", info->defaultHighInputLatency );
jpa_SetDoubleField( env, cls, deviceInfo, "defaultLowOutputLatency", info->defaultLowOutputLatency );
jpa_SetDoubleField( env, cls, deviceInfo, "defaultHighOutputLatency", info->defaultHighOutputLatency );
}
}
/*
@ -137,8 +137,8 @@ JNIEXPORT void JNICALL Java_com_portaudio_PortAudio_getDeviceInfo
JNIEXPORT jint JNICALL Java_com_portaudio_PortAudio_getHostApiCount
(JNIEnv *env, jclass clazz)
{
jint count = Pa_GetHostApiCount();
return jpa_CheckError( env, count );
jint count = Pa_GetHostApiCount();
return jpa_CheckError( env, count );
}
@ -150,7 +150,7 @@ JNIEXPORT jint JNICALL Java_com_portaudio_PortAudio_getHostApiCount
JNIEXPORT jint JNICALL Java_com_portaudio_PortAudio_hostApiTypeIdToHostApiIndex
(JNIEnv *env, jclass clazz, jint hostApiType)
{
return Pa_HostApiTypeIdToHostApiIndex( (PaHostApiTypeId) hostApiType );
return Pa_HostApiTypeIdToHostApiIndex( (PaHostApiTypeId) hostApiType );
}
/*
@ -161,7 +161,7 @@ JNIEXPORT jint JNICALL Java_com_portaudio_PortAudio_hostApiTypeIdToHostApiIndex
JNIEXPORT jint JNICALL Java_com_portaudio_PortAudio_hostApiDeviceIndexToDeviceIndex
(JNIEnv *env, jclass clazz, jint hostApiIndex, jint apiDeviceIndex)
{
return Pa_HostApiDeviceIndexToDeviceIndex( hostApiIndex, apiDeviceIndex );
return Pa_HostApiDeviceIndexToDeviceIndex( hostApiIndex, apiDeviceIndex );
}
@ -173,24 +173,24 @@ JNIEXPORT jint JNICALL Java_com_portaudio_PortAudio_hostApiDeviceIndexToDeviceIn
JNIEXPORT void JNICALL Java_com_portaudio_PortAudio_getHostApiInfo
(JNIEnv *env, jclass clazz, jint index, jobject hostApiInfo)
{
const PaHostApiInfo *info;
/* Get a reference to obj's class */
jclass cls = (*env)->GetObjectClass(env, hostApiInfo);
info = Pa_GetHostApiInfo( index );
if( info == NULL )
{
jpa_ThrowError( env, "Pa_GetHostApiInfo returned NULL." );
}
else
{
jpa_SetIntField( env, cls, hostApiInfo, "version", info->structVersion );
jpa_SetIntField( env, cls, hostApiInfo, "type", info->type );
jpa_SetStringField( env, cls, hostApiInfo, "name", info->name );
jpa_SetIntField( env, cls, hostApiInfo, "deviceCount", info->deviceCount );
jpa_SetIntField( env, cls, hostApiInfo, "defaultInputDevice", info->defaultInputDevice );
jpa_SetIntField( env, cls, hostApiInfo, "defaultOutputDevice", info->defaultOutputDevice );
}
const PaHostApiInfo *info;
/* Get a reference to obj's class */
jclass cls = (*env)->GetObjectClass(env, hostApiInfo);
info = Pa_GetHostApiInfo( index );
if( info == NULL )
{
jpa_ThrowError( env, "Pa_GetHostApiInfo returned NULL." );
}
else
{
jpa_SetIntField( env, cls, hostApiInfo, "version", info->structVersion );
jpa_SetIntField( env, cls, hostApiInfo, "type", info->type );
jpa_SetStringField( env, cls, hostApiInfo, "name", info->name );
jpa_SetIntField( env, cls, hostApiInfo, "deviceCount", info->deviceCount );
jpa_SetIntField( env, cls, hostApiInfo, "defaultInputDevice", info->defaultInputDevice );
jpa_SetIntField( env, cls, hostApiInfo, "defaultOutputDevice", info->defaultOutputDevice );
}
}
/*
@ -201,8 +201,8 @@ JNIEXPORT void JNICALL Java_com_portaudio_PortAudio_getHostApiInfo
JNIEXPORT jint JNICALL Java_com_portaudio_PortAudio_getDefaultInputDevice
(JNIEnv *env, jclass clazz)
{
jint deviceId = Pa_GetDefaultInputDevice();
return jpa_CheckError( env, deviceId );
jint deviceId = Pa_GetDefaultInputDevice();
return jpa_CheckError( env, deviceId );
}
/*
@ -213,8 +213,8 @@ JNIEXPORT jint JNICALL Java_com_portaudio_PortAudio_getDefaultInputDevice
JNIEXPORT jint JNICALL Java_com_portaudio_PortAudio_getDefaultOutputDevice
(JNIEnv *env, jclass clazz)
{
jint deviceId = Pa_GetDefaultOutputDevice();
return jpa_CheckError( env, deviceId );
jint deviceId = Pa_GetDefaultOutputDevice();
return jpa_CheckError( env, deviceId );
}
/*
@ -225,8 +225,8 @@ JNIEXPORT jint JNICALL Java_com_portaudio_PortAudio_getDefaultOutputDevice
JNIEXPORT jint JNICALL Java_com_portaudio_PortAudio_getDefaultHostApi
(JNIEnv *env, jclass clazz)
{
jint deviceId = Pa_GetDefaultHostApi();
return jpa_CheckError( env, deviceId );
jint deviceId = Pa_GetDefaultHostApi();
return jpa_CheckError( env, deviceId );
}
/*
@ -237,13 +237,13 @@ JNIEXPORT jint JNICALL Java_com_portaudio_PortAudio_getDefaultHostApi
JNIEXPORT jint JNICALL Java_com_portaudio_PortAudio_isFormatSupported
(JNIEnv *env, jclass clazz, jobject inParams, jobject outParams, jint sampleRate )
{
PaStreamParameters myInParams, *paInParams;
PaStreamParameters myOutParams, *paOutParams;
paInParams = jpa_FillStreamParameters( env, inParams, &myInParams );
paOutParams = jpa_FillStreamParameters( env, outParams, &myOutParams );
return Pa_IsFormatSupported( paInParams, paOutParams, sampleRate );
PaStreamParameters myInParams, *paInParams;
PaStreamParameters myOutParams, *paOutParams;
paInParams = jpa_FillStreamParameters( env, inParams, &myInParams );
paOutParams = jpa_FillStreamParameters( env, outParams, &myOutParams );
return Pa_IsFormatSupported( paInParams, paOutParams, sampleRate );
}
@ -255,25 +255,25 @@ JNIEXPORT jint JNICALL Java_com_portaudio_PortAudio_isFormatSupported
JNIEXPORT void JNICALL Java_com_portaudio_PortAudio_openStream
(JNIEnv *env, jclass clazz, jobject blockingStream, jobject inParams, jobject outParams, jint sampleRate, jint framesPerBuffer, jint flags )
{
int err;
PaStreamParameters myInParams, *paInParams;
PaStreamParameters myOutParams, *paOutParams;
PaStream *stream;
paInParams = jpa_FillStreamParameters( env, inParams, &myInParams );
paOutParams = jpa_FillStreamParameters( env, outParams, &myOutParams );
err = Pa_OpenStream( &stream, paInParams, paOutParams, sampleRate, framesPerBuffer, flags, NULL, NULL );
if( jpa_CheckError( env, err ) == 0 )
{
jclass cls = (*env)->GetObjectClass(env, blockingStream);
jpa_SetLongField( env, cls, blockingStream, "nativeStream", (jlong) stream );
if( paInParams != NULL )
{
jpa_SetIntField( env, cls, blockingStream, "inputFormat", paInParams->sampleFormat );
}
if( paOutParams != NULL )
{
jpa_SetIntField( env, cls, blockingStream, "outputFormat", paOutParams->sampleFormat );
}
}
int err;
PaStreamParameters myInParams, *paInParams;
PaStreamParameters myOutParams, *paOutParams;
PaStream *stream;
paInParams = jpa_FillStreamParameters( env, inParams, &myInParams );
paOutParams = jpa_FillStreamParameters( env, outParams, &myOutParams );
err = Pa_OpenStream( &stream, paInParams, paOutParams, sampleRate, framesPerBuffer, flags, NULL, NULL );
if( jpa_CheckError( env, err ) == 0 )
{
jclass cls = (*env)->GetObjectClass(env, blockingStream);
jpa_SetLongField( env, cls, blockingStream, "nativeStream", (jlong) stream );
if( paInParams != NULL )
{
jpa_SetIntField( env, cls, blockingStream, "inputFormat", paInParams->sampleFormat );
}
if( paOutParams != NULL )
{
jpa_SetIntField( env, cls, blockingStream, "outputFormat", paOutParams->sampleFormat );
}
}
}

View file

@ -26,13 +26,13 @@
*/
/*
* The text above constitutes the entire PortAudio license; however,
* 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
* they can be incorporated into the canonical version. It is also
* requested that these non-binding requests be included along with the
* license above.
*/
@ -45,14 +45,14 @@ jint jpa_GetIntField( JNIEnv *env, jclass cls, jobject obj, const char *fieldNam
/* Look for the instance field maxInputChannels in cls */
jfieldID fid = (*env)->GetFieldID(env, cls, fieldName, "I");
if (fid == NULL)
{
jpa_ThrowError( env, "Cannot find integer JNI field." );
return 0;
{
jpa_ThrowError( env, "Cannot find integer JNI field." );
return 0;
}
else
{
return (*env)->GetIntField(env, obj, fid );
}
else
{
return (*env)->GetIntField(env, obj, fid );
}
}
void jpa_SetIntField( JNIEnv *env, jclass cls, jobject obj, const char *fieldName, jint value )
@ -60,13 +60,13 @@ void jpa_SetIntField( JNIEnv *env, jclass cls, jobject obj, const char *fieldNam
/* Look for the instance field maxInputChannels in cls */
jfieldID fid = (*env)->GetFieldID(env, cls, fieldName, "I");
if (fid == NULL)
{
jpa_ThrowError( env, "Cannot find integer JNI field." );
{
jpa_ThrowError( env, "Cannot find integer JNI field." );
}
else
{
(*env)->SetIntField(env, obj, fid, value );
}
else
{
(*env)->SetIntField(env, obj, fid, value );
}
}
jlong jpa_GetLongField( JNIEnv *env, jclass cls, jobject obj, const char *fieldName )
@ -74,14 +74,14 @@ jlong jpa_GetLongField( JNIEnv *env, jclass cls, jobject obj, const char *fieldN
/* Look for the instance field maxInputChannels in cls */
jfieldID fid = (*env)->GetFieldID(env, cls, fieldName, "J");
if (fid == NULL)
{
jpa_ThrowError( env, "Cannot find long JNI field." );
return 0L;
{
jpa_ThrowError( env, "Cannot find long JNI field." );
return 0L;
}
else
{
return (*env)->GetLongField(env, obj, fid );
}
else
{
return (*env)->GetLongField(env, obj, fid );
}
}
void jpa_SetLongField( JNIEnv *env, jclass cls, jobject obj, const char *fieldName, jlong value )
@ -89,13 +89,13 @@ void jpa_SetLongField( JNIEnv *env, jclass cls, jobject obj, const char *fieldNa
/* Look for the instance field maxInputChannels in cls */
jfieldID fid = (*env)->GetFieldID(env, cls, fieldName, "J");
if (fid == NULL)
{
jpa_ThrowError( env, "Cannot find long JNI field." );
{
jpa_ThrowError( env, "Cannot find long JNI field." );
}
else
{
(*env)->SetLongField(env, obj, fid, value );
}
else
{
(*env)->SetLongField(env, obj, fid, value );
}
}
@ -104,13 +104,13 @@ void jpa_SetDoubleField( JNIEnv *env, jclass cls, jobject obj, const char *field
/* Look for the instance field maxInputChannels in cls */
jfieldID fid = (*env)->GetFieldID(env, cls, fieldName, "D");
if (fid == NULL)
{
jpa_ThrowError( env, "Cannot find double JNI field." );
{
jpa_ThrowError( env, "Cannot find double JNI field." );
}
else
{
(*env)->SetDoubleField(env, obj, fid, value );
}
else
{
(*env)->SetDoubleField(env, obj, fid, value );
}
}
@ -119,14 +119,14 @@ jdouble jpa_GetDoubleField( JNIEnv *env, jclass cls, jobject obj, const char *fi
/* Look for the instance field maxInputChannels in cls */
jfieldID fid = (*env)->GetFieldID(env, cls, fieldName, "D");
if (fid == NULL)
{
jpa_ThrowError( env, "Cannot find double JNI field." );
return 0;
{
jpa_ThrowError( env, "Cannot find double JNI field." );
return 0;
}
else
{
return (*env)->GetDoubleField(env, obj, fid );
}
else
{
return (*env)->GetDoubleField(env, obj, fid );
}
}
void jpa_SetStringField( JNIEnv *env, jclass cls, jobject obj, const char *fieldName, const char *value )
@ -134,75 +134,75 @@ void jpa_SetStringField( JNIEnv *env, jclass cls, jobject obj, const char *field
/* Look for the instance field maxInputChannels in cls */
jfieldID fid = (*env)->GetFieldID(env, cls, fieldName, "Ljava/lang/String;");
if (fid == NULL)
{
jpa_ThrowError( env, "Cannot find String JNI field." );
{
jpa_ThrowError( env, "Cannot find String JNI field." );
}
else
{
jstring jstr = (*env)->NewStringUTF(env, value);
if (jstr == NULL)
{
jpa_ThrowError( env, "Cannot create new String." );
}
else
{
(*env)->SetObjectField(env, obj, fid, jstr );
}
}
else
{
jstring jstr = (*env)->NewStringUTF(env, value);
if (jstr == NULL)
{
jpa_ThrowError( env, "Cannot create new String." );
}
else
{
(*env)->SetObjectField(env, obj, fid, jstr );
}
}
}
PaStreamParameters *jpa_FillStreamParameters( JNIEnv *env, jobject jstreamParam, PaStreamParameters *myParams )
{
jclass cls;
if( jstreamParam == NULL ) return NULL; // OK, not an error
jclass cls;
cls = (*env)->GetObjectClass(env, jstreamParam);
myParams->channelCount = jpa_GetIntField( env, cls, jstreamParam, "channelCount" );
myParams->device = jpa_GetIntField( env, cls, jstreamParam, "device" );
myParams->sampleFormat = jpa_GetIntField( env, cls, jstreamParam, "sampleFormat" );
myParams->suggestedLatency = jpa_GetDoubleField( env, cls, jstreamParam, "suggestedLatency" );
myParams->hostApiSpecificStreamInfo = NULL;
if( jstreamParam == NULL ) return NULL; // OK, not an error
return myParams;
cls = (*env)->GetObjectClass(env, jstreamParam);
myParams->channelCount = jpa_GetIntField( env, cls, jstreamParam, "channelCount" );
myParams->device = jpa_GetIntField( env, cls, jstreamParam, "device" );
myParams->sampleFormat = jpa_GetIntField( env, cls, jstreamParam, "sampleFormat" );
myParams->suggestedLatency = jpa_GetDoubleField( env, cls, jstreamParam, "suggestedLatency" );
myParams->hostApiSpecificStreamInfo = NULL;
return myParams;
}
// Create an exception that will be thrown when we return from the JNI call.
jint jpa_ThrowError( JNIEnv *env, const char *message )
{
return (*env)->ThrowNew(env, (*env)->FindClass( env, "java/lang/RuntimeException"),
return (*env)->ThrowNew(env, (*env)->FindClass( env, "java/lang/RuntimeException"),
message );
}
// Throw an exception on error.
jint jpa_CheckError( JNIEnv *env, PaError err )
{
if( err == -1 )
{
if( err == -1 )
{
return jpa_ThrowError( env, "-1, possibly no available default device" );
}
else if( err < 0 )
{
if( err == paUnanticipatedHostError )
{
const PaHostErrorInfo *hostErrorInfo = Pa_GetLastHostErrorInfo();
return jpa_ThrowError( env, hostErrorInfo->errorText );
}
else
{
return jpa_ThrowError( env, Pa_GetErrorText( err ) );
}
}
else
{
return err;
}
if( err == paUnanticipatedHostError )
{
const PaHostErrorInfo *hostErrorInfo = Pa_GetLastHostErrorInfo();
return jpa_ThrowError( env, hostErrorInfo->errorText );
}
else
{
return jpa_ThrowError( env, Pa_GetErrorText( err ) );
}
}
else
{
return err;
}
}
// Get the stream pointer from a BlockingStream long field.
PaStream *jpa_GetStreamPointer( JNIEnv *env, jobject blockingStream )
{
jclass cls = (*env)->GetObjectClass(env, blockingStream);
return (PaStream *) jpa_GetLongField( env, cls, blockingStream, "nativeStream" );
jclass cls = (*env)->GetObjectClass(env, blockingStream);
return (PaStream *) jpa_GetLongField( env, cls, blockingStream, "nativeStream" );
}

View file

@ -26,13 +26,13 @@
*/
/*
* The text above constitutes the entire PortAudio license; however,
* 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
* they can be incorporated into the canonical version. It is also
* requested that these non-binding requests be included along with the
* license above.
*/

View file

@ -219,7 +219,7 @@ public class TestBasic extends TestCase
e.printStackTrace();
}
assertTrue( "caught no expection", (caught != null) );
assertTrue( "caught no exception", (caught != null) );
assertTrue( "exception should say stream is stopped", caught
.getMessage().contains( "stopped" ) );
@ -233,7 +233,7 @@ public class TestBasic extends TestCase
caught = e;
e.printStackTrace();
}
assertTrue( "caught no expection", (caught != null) );
assertTrue( "caught no exception", (caught != null) );
assertTrue( "exception should say stream is stopped", caught
.getMessage().contains( "null" ) );
@ -251,7 +251,7 @@ public class TestBasic extends TestCase
e.printStackTrace();
}
assertTrue( "caught no expection", (caught != null) );
assertTrue( "caught no exception", (caught != null) );
assertTrue( "exception should say tried to", caught.getMessage()
.contains( "Tried to write short" ) );

View file

@ -35,6 +35,7 @@ Pa_GetStreamReadAvailable @31
Pa_GetStreamWriteAvailable @32
Pa_GetSampleSize @33
Pa_Sleep @34
Pa_GetVersionInfo @35
PaAsio_GetAvailableBufferSizes @50
PaAsio_ShowControlPanel @51
PaUtil_InitializeX86PlainConverters @52
@ -45,10 +46,14 @@ PaWasapi_GetAudioClient @56
PaWasapi_UpdateDeviceList @57
PaWasapi_GetDeviceCurrentFormat @58
PaWasapi_GetDeviceDefaultFormat @59
PaWasapi_GetDeviceRole @60
PaWasapi_ThreadPriorityBoost @61
PaWasapi_ThreadPriorityRevert @62
PaWasapi_GetFramesPerHostBuffer @63
PaWasapi_GetJackCount @64
PaWasapi_GetJackDescription @65
PaWasapi_SetDefaultInterfaceId @66
PaWasapi_GetDeviceMixFormat @60
PaWasapi_GetDeviceRole @61
PaWasapi_ThreadPriorityBoost @62
PaWasapi_ThreadPriorityRevert @63
PaWasapi_GetFramesPerHostBuffer @64
PaWasapi_GetJackCount @65
PaWasapi_GetJackDescription @66
PaWasapi_SetStreamStateHandler @68
PaWasapiWinrt_SetDefaultDeviceId @67
PaWasapiWinrt_PopulateDeviceList @69
PaWasapi_GetIMMDevice @70

View file

@ -24,7 +24,7 @@ This DLL contains all 5 current Win32 PA APIS (MME/DS/ASIO/WASAPI/WDMKS)
Service pack 5:
Latest known URL:
http://msdn2.microsoft.com/en-us/vstudio/aa718363.aspx
Yes there EXISTS a service pack 6 , but the processor pack (below) isnt compatible with it.
Yes there EXISTS a service pack 6 , but the processor pack (below) isn't compatible with it.
Processor Pack(only works with above SP5)
Latest known URL:

View file

@ -38,16 +38,25 @@ Pa_GetStreamReadAvailable @31
Pa_GetStreamWriteAvailable @32
Pa_GetSampleSize @33
Pa_Sleep @34
Pa_GetVersionInfo @35
@DEF_EXCLUDE_ASIO_SYMBOLS@PaAsio_GetAvailableBufferSizes @50
@DEF_EXCLUDE_ASIO_SYMBOLS@PaAsio_ShowControlPanel @51
@DEF_EXCLUDE_X86_PLAIN_CONVERTERS@PaUtil_InitializeX86PlainConverters @52
@DEF_EXCLUDE_ASIO_SYMBOLS@PaAsio_GetInputChannelName @53
@DEF_EXCLUDE_ASIO_SYMBOLS@PaAsio_GetOutputChannelName @54
PaUtil_SetDebugPrintFunction @55
@DEF_EXCLUDE_WASAPI_SYMBOLS@PaWasapi_GetDeviceDefaultFormat @56
@DEF_EXCLUDE_WASAPI_SYMBOLS@PaWasapi_GetDeviceRole @57
@DEF_EXCLUDE_WASAPI_SYMBOLS@PaWasapi_ThreadPriorityBoost @58
@DEF_EXCLUDE_WASAPI_SYMBOLS@PaWasapi_ThreadPriorityRevert @59
@DEF_EXCLUDE_WASAPI_SYMBOLS@PaWasapi_GetFramesPerHostBuffer @60
@DEF_EXCLUDE_WASAPI_SYMBOLS@PaWasapi_GetJackDescription @61
@DEF_EXCLUDE_WASAPI_SYMBOLS@PaWasapi_GetJackCount @62
@DEF_EXCLUDE_WASAPI_SYMBOLS@PaWasapi_GetAudioClient @56
@DEF_EXCLUDE_WASAPI_SYMBOLS@PaWasapi_UpdateDeviceList @57
@DEF_EXCLUDE_WASAPI_SYMBOLS@PaWasapi_GetDeviceCurrentFormat @58
@DEF_EXCLUDE_WASAPI_SYMBOLS@PaWasapi_GetDeviceDefaultFormat @59
@DEF_EXCLUDE_WASAPI_SYMBOLS@PaWasapi_GetDeviceMixFormat @60
@DEF_EXCLUDE_WASAPI_SYMBOLS@PaWasapi_GetDeviceRole @61
@DEF_EXCLUDE_WASAPI_SYMBOLS@PaWasapi_ThreadPriorityBoost @62
@DEF_EXCLUDE_WASAPI_SYMBOLS@PaWasapi_ThreadPriorityRevert @63
@DEF_EXCLUDE_WASAPI_SYMBOLS@PaWasapi_GetFramesPerHostBuffer @64
@DEF_EXCLUDE_WASAPI_SYMBOLS@PaWasapi_GetJackCount @65
@DEF_EXCLUDE_WASAPI_SYMBOLS@PaWasapi_GetJackDescription @66
@DEF_EXCLUDE_WASAPI_SYMBOLS@PaWasapi_SetStreamStateHandler @68
@DEF_EXCLUDE_WASAPI_SYMBOLS@PaWasapiWinrt_SetDefaultDeviceId @67
@DEF_EXCLUDE_WASAPI_SYMBOLS@PaWasapiWinrt_PopulateDeviceList @69
@DEF_EXCLUDE_WASAPI_SYMBOLS@PaWasapi_GetIMMDevice @70

BIN
config.guess vendored

Binary file not shown.

BIN
config.sub vendored

Binary file not shown.

BIN
configure vendored

Binary file not shown.

View file

@ -11,6 +11,15 @@ dnl Init autoconf and make sure configure is being called
dnl from the right directory
AC_INIT([include/portaudio.h])
dnl This is is for testing compilation on Mac OS
PAMAC_TEST_PROGRAM="
/* cdefs.h checks for supported architectures. */
#include <sys/cdefs.h>
int main() {
return 0;
}
"
dnl Define build, build_cpu, build_vendor, build_os
AC_CANONICAL_BUILD
dnl Define host, host_cpu, host_vendor, host_os
@ -204,76 +213,22 @@ case "${host_os}" in
AC_DEFINE(PA_USE_COREAUDIO,1)
CFLAGS="$CFLAGS -I\$(top_srcdir)/src/os/unix -Wno-deprecated -Werror"
LIBS="-framework CoreAudio -framework AudioToolbox -framework AudioUnit -framework Carbon"
CFLAGS="$CFLAGS -I\$(top_srcdir)/src/os/unix -Wno-deprecated"
LIBS="-framework CoreAudio -framework AudioToolbox -framework AudioUnit -framework CoreFoundation -framework CoreServices"
if test "x$enable_mac_universal" = "xyes" ; then
case `xcodebuild -version | sed -n 's/Xcode \(.*\)/\1/p'` in
[12]*|3.0|3.1)
dnl In pre-3.2 versions of Xcode, xcodebuild doesn't
dnl support -sdk, so we can't use that to look for
dnl SDKs. However, in those versions of Xcode, the
dnl SDKs are under /Developer/SDKs, so we can just look
dnl there. Also, we assume they had no SDKs later
dnl than 10.5, as 3.2 was the version that came with
dnl 10.6, at least if the Wikipedia page for Xcode
dnl is to be believed.
if [[ -d /Developer/SDKs/MacOSX10.5.sdk ]] ; then
mac_version_min="-mmacosx-version-min=10.3"
mac_sysroot="-isysroot /Developer/SDKs/MacOSX10.5.sdk"
else
mac_version_min="-mmacosx-version-min=10.3"
mac_sysroot="-isysroot /Developer/SDKs/MacOSX10.4u.sdk"
fi
;;
*)
dnl In 3.2 and later, xcodebuild supports -sdk, and, in
dnl 4.3 and later, the SDKs aren't under /Developer/SDKs
dnl as there *is* no /Developer, so we use -sdk to check
dnl what SDKs are available and to get the full path of
dnl the SDKs.
if xcodebuild -version -sdk macosx10.5 Path >/dev/null 2>&1 ; then
mac_version_min="-mmacosx-version-min=10.3"
mac_sysroot="-isysroot `xcodebuild -version -sdk macosx10.5 Path`"
elif xcodebuild -version -sdk macosx10.6 Path >/dev/null 2>&1 ; then
mac_version_min="-mmacosx-version-min=10.4"
mac_sysroot="-isysroot `xcodebuild -version -sdk macosx10.6 Path`"
elif xcodebuild -version -sdk macosx10.7 Path >/dev/null 2>&1 ; then
mac_version_min="-mmacosx-version-min=10.4"
mac_sysroot="-isysroot `xcodebuild -version -sdk macosx10.7 Path`"
elif xcodebuild -version -sdk macosx10.8 Path >/dev/null 2>&1 ; then
mac_version_min="-mmacosx-version-min=10.4"
mac_sysroot="-isysroot `xcodebuild -version -sdk macosx10.8 Path`"
elif xcodebuild -version -sdk macosx10.9 Path >/dev/null 2>&1 ; then
mac_version_min="-mmacosx-version-min=10.4"
mac_sysroot="-isysroot `xcodebuild -version -sdk macosx10.9 Path`"
elif xcodebuild -version -sdk macosx10.10 Path >/dev/null 2>&1 ; then
mac_version_min="-mmacosx-version-min=10.4"
mac_sysroot="-isysroot `xcodebuild -version -sdk macosx10.10 Path`"
elif xcodebuild -version -sdk macosx10.11 Path >/dev/null 2>&1 ; then
mac_version_min="-mmacosx-version-min=10.4"
mac_sysroot="-isysroot `xcodebuild -version -sdk macosx10.11 Path`"
elif xcodebuild -version -sdk macosx10.12 Path >/dev/null 2>&1 ; then
mac_version_min="-mmacosx-version-min=10.4"
mac_sysroot="-isysroot `xcodebuild -version -sdk macosx10.12 Path`"
elif xcodebuild -version -sdk macosx10.13 Path >/dev/null 2>&1 ; then
mac_version_min="-mmacosx-version-min=10.4"
mac_sysroot="-isysroot `xcodebuild -version -sdk macosx10.13 Path`"
else
AC_MSG_ERROR([Could not find 10.5 to 10.13 SDK.])
fi
esac
mac_version_min="-mmacosx-version-min=10.6"
mac_sysroot="-isysroot $(xcrun --sdk macosx --show-sdk-path)"
dnl Pick which architectures to build for based on what
dnl the compiler supports.
dnl the compiler and SDK supports.
mac_arches=""
for arch in i386 x86_64 ppc ppc64
for arch in x86_64 arm64
do
save_CFLAGS="$CFLAGS"
CFLAGS="$CFLAGS -arch $arch"
AC_TRY_COMPILE([], [return 0;],
AC_COMPILE_IFELSE(
[AC_LANG_SOURCE([$PAMAC_TEST_PROGRAM])],
[
if [[ -z "$mac_arches" ]] ; then
mac_arches="-arch $arch"
@ -310,6 +265,7 @@ case "${host_os}" in
#VC98="\"/c/Program Files/Microsoft Visual Studio/VC98/Include\""
#CFLAGS="$CFLAGS -I$VC98 -DPA_NO_WMME -DPA_NO_ASIO"
CFLAGS="$CFLAGS -I$DXDIR/include -UPA_USE_DS -DPA_USE_DS=1"
INCLUDES="$INCLUDES pa_win_ds.h pa_win_waveformat.h"
fi
if [[ "x$with_asio" = "xyes" ]]; then
@ -318,13 +274,14 @@ case "${host_os}" in
LIBS="${LIBS} -lwinmm -lm -lole32 -luuid"
DLL_LIBS="${DLL_LIBS} -lwinmm -lm -lole32 -luuid"
CFLAGS="$CFLAGS -ffast-math -fomit-frame-pointer -I\$(top_srcdir)/src/hostapi/asio -I$ASIODIR/host/pc -I$ASIODIR/common -I$ASIODIR/host -UPA_USE_ASIO -DPA_USE_ASIO=1 -DWINDOWS"
INCLUDES="$INCLUDES pa_asio.h"
dnl Setting the windows version flags below resolves a conflict between Interlocked*
dnl definitions in mingw winbase.h and Interlocked* hacks in ASIO SDK combase.h
dnl Setting the windows version flags below resolves a conflict between Interlocked*
dnl definitions in mingw winbase.h and Interlocked* hacks in ASIO SDK combase.h
dnl combase.h is included by asiodrvr.h
dnl PortAudio does not actually require Win XP (winver 501) APIs
dnl PortAudio does not actually require Win XP (winver 501) APIs
CFLAGS="$CFLAGS -D_WIN32_WINNT=0x0501 -DWINVER=0x0501"
CXXFLAGS="$CFLAGS"
fi
@ -336,6 +293,7 @@ case "${host_os}" in
#VC98="\"/c/Program Files/Microsoft Visual Studio/VC98/Include\""
#CFLAGS="$CFLAGS -I$VC98 -DPA_NO_WMME -DPA_NO_ASIO"
CFLAGS="$CFLAGS -I$DXDIR/include -UPA_USE_WDMKS -DPA_USE_WDMKS=1"
INCLUDES="$INCLUDES pa_win_wdmks.h"
fi
if [[ "x$with_wmme" = "xyes" ]]; then
@ -343,6 +301,7 @@ case "${host_os}" in
LIBS="${LIBS} -lwinmm -lm -lole32 -luuid"
DLL_LIBS="${DLL_LIBS} -lwinmm"
CFLAGS="$CFLAGS -UPA_USE_WMME -DPA_USE_WMME=1"
INCLUDES="$INCLUDES pa_win_wmme.h pa_win_waveformat.h"
fi
if [[ "x$with_wasapi" = "xyes" ]]; then
@ -350,6 +309,7 @@ case "${host_os}" in
LIBS="${LIBS} -lwinmm -lm -lole32 -luuid"
DLL_LIBS="${DLL_LIBS} -lwinmm -lole32"
CFLAGS="$CFLAGS -UPA_USE_WASAPI -DPA_USE_WASAPI=1"
INCLUDES="$INCLUDES pa_win_wasapi.h pa_win_waveformat.h"
fi
;;
@ -383,7 +343,7 @@ case "${host_os}" in
dnl The _REENTRANT option for pthread safety. Perhaps not necessary but it 'll do no harm.
dnl
THREAD_CFLAGS="-D_REENTRANT"
OTHER_OBJS="pa_sgi/pa_sgi.o src/os/unix/pa_unix_hostapis.o src/os/unix/pa_unix_util.o"
dnl SGI books say -lpthread should be the last of the libs mentioned.
@ -397,7 +357,7 @@ case "${host_os}" in
dnl Unix configuration
CFLAGS="$CFLAGS -I\$(top_srcdir)/src/os/unix"
AC_CHECK_LIB(pthread, pthread_create,[have_pthread="yes"],
AC_MSG_ERROR([libpthread not found!]))

20207
configure~ Normal file

File diff suppressed because it is too large Load diff

View file

@ -112,7 +112,7 @@ Many of the tests in the /tests directory of the PortAudio distribution implemen
@subsection read_write_io_method The Read/Write I/O Method
As an alternative to the callback I/O method, PortAudio provides a synchronous read/write interface for acquiring and playing audio. This can be useful for applications that don't require the lowest possibly latency, or don't warrant the increased complexity of synchronising with an asynchronous callback funciton. This I/O method is also useful when calling PortAudio from programming languages that don't support asynchronous callbacks.
As an alternative to the callback I/O method, PortAudio provides a synchronous read/write interface for acquiring and playing audio. This can be useful for applications that don't require the lowest possibly latency, or don't warrant the increased complexity of synchronising with an asynchronous callback function. This I/O method is also useful when calling PortAudio from programming languages that don't support asynchronous callbacks.
To open a Stream in read/write mode you pass a NULL stream callback function pointer to Pa_OpenStream().

View file

@ -34,9 +34,9 @@ Documentation for non-portable platform-specific host API extensions
- <a href="http://www.portaudio.com">The PortAudio website</a>
- <a href="http://lists.columbia.edu/mailman/listinfo/portaudio/">Our mailing list for users and developers</a><br>
- <a href="http://www.portaudio.com/contacts.html">Our mailing list for users and developers</a><br>
- <a href="http://www.assembla.com/spaces/portaudio/wiki">The PortAudio wiki</a>
- <a href="https://github.com/PortAudio/portaudio/wiki">The PortAudio wiki</a>
@section developer_resources Developer Resources
@ -44,18 +44,20 @@ Documentation for non-portable platform-specific host API extensions
- @ref srcguide
@endif
- <a href="http://www.assembla.com/spaces/portaudio/wiki">Our wiki and issue tracking system</a>
- <a href="https://github.com/PortAudio/portaudio/">Our repository on GitHub</a>
- <a href="https://www.assembla.com/spaces/portaudio/wiki/DeveloperGuidelines">Developer guidelines</a>
- <a href="https://github.com/PortAudio/portaudio/wiki/DeveloperGuidelines">Developer guidelines</a>
- <a href="https://www.assembla.com/spaces/portaudio/wiki/ImplementationStyleGuidelines">Implementation style guidelines</a>
If you're interested in helping out with PortAudio development we're more than happy for you to be involved. Just drop by the PortAudio mailing list and ask how you can help. Or <a href="http://www.assembla.com/spaces/portaudio/tickets">check out the starter tickets</a>.
- <a href="https://github.com/PortAudio/portaudio/wiki/ImplementationStyleGuidelines">Implementation style guidelines</a>
If you're interested in helping out with PortAudio development we're more than happy for you to be involved.
Just drop by the PortAudio mailing list and ask how you can help.
Or check out these <a href="https://github.com/PortAudio/portaudio/issues?q=is%3Aopen+is%3Aissue+label%3A%22good+first+issue%22">
recommended starter issues</a>.
@section older_api_versions Older API Versions
This documentation covers the current API version: PortAudio V19, API version 2.0. API 2.0 differs in a number of ways from previous versions (most often encountered in PortAudio V18), please consult the enhancement proposals for details of what was added/changed for V19:
http://www.portaudio.com/docs/proposals/index.html
*/
*/

View file

@ -23,7 +23,7 @@ The "-G" option specifies the type of build metadata which will be generated. Yo
"make install" should install the same set of files that are installed using the usual configure script included with PortAudio along with a few extra files (similar to pkg-config metadata files) which make it easier for other CMake projects to use the installed libraries.
On Windows, you can use CMake to generate Visual Studio project files which can be used to create the PortAudio libraries. The following serves as an example (and should be done from a directory outside the PortAudio tree) which will create Visual Studio 2015 project files targetting a 64-bit build:
On Windows, you can use CMake to generate Visual Studio project files which can be used to create the PortAudio libraries. The following serves as an example (and should be done from a directory outside the PortAudio tree) which will create Visual Studio 2015 project files targeting a 64-bit build:
C:\PABUILD> cmake {portaudio path} -G "Visual Studio 14 2015 Win64"

View file

@ -47,7 +47,7 @@ On some systems you may need to use:
cp /usr/local/lib/libportaudio.a /YOUR/PROJECT/DIR
@endcode
You may also need to copy portaudio.h, located in the include/ directory of PortAudio into your project. Note that you will usually need to link with the approriate libraries that you used, such as ALSA and JACK, as well as with librt and libpthread. For example:
You may also need to copy portaudio.h, located in the include/ directory of PortAudio into your project. Note that you will usually need to link with the appropriate libraries that you used, such as ALSA and JACK, as well as with librt and libpthread. For example:
@code
gcc main.c libportaudio.a -lrt -lm -lasound -ljack -pthread -o YOUR_BINARY

View file

@ -3,11 +3,11 @@
@section comp_mac_ca_1 Requirements
* OS X 10.4 or later. PortAudio v19 currently only compiles and runs on OS X version 10.4 or later. Because of its heavy reliance on memory barriers, it's not clear how easy it would be to back-port PortAudio to OS X version 10.3. Leopard support requires the 2007 snapshot or later.
* OS X 10.6 or later. PortAudio v19.7 currently only compiles and runs on OS X version 10.6 or later.
* Apple's Xcode and its related tools installed in the default location. There is no Xcode project for PortAudio.
* Mac 10.4 SDK. Look for "/Developer/SDKs/MacOSX10.4u.sdk" folder on your system. It may be installed with XCode. If not then you can download it from Apple Developer Connection. http://connect.apple.com/
* Mac 10.6 SDK. Look for "/Developer/SDKs/MacOSX10.6.sdk" folder on your system. It may be installed with XCode. If not then you can download it from Apple Developer Connection. http://connect.apple.com/
@section comp_mac_ca_2 Building
@ -29,7 +29,7 @@ There are a variety of other options for building PortAudio. The default describ
@subsection comp_mac_ca_3.1 Building Non-Universal Libraries
By default, PortAudio is built as a universal binary. This includes 64-bit versions if you are compiling on 10.5, Leopard. If you want a "thin", or single architecture library, you have two options:
By default, PortAudio is built as a universal binary. This includes 64-bit versions if you are compiling on 10.6, Snow Leopard. If you want a "thin", or single architecture library, you have two options:
* build a non-universal library using configure options.
* use lipo(1) on whatever part of the library you plan to use.
@ -44,11 +44,11 @@ To build a non-universal library for the host architecture, simply use the <i>--
./configure --disable-mac-universal && make
@endcode
The <i>--disable-mac-universal</i> option may also be used in conjunction with environment variables to give you more control over the universal binary build process. For example, to build a universal binary for the i386 and ppc architectures using the 10.4u sdk (which is the default on 10.4, but not 10.5), you might specify this configure command line:
The <i>--disable-mac-universal</i> option may also be used in conjunction with environment variables to give you more control over the universal binary build process. For example, to build a universal binary for the i386 and ppc architectures using the 10.6 sdk, you might specify this configure command line:
@code
CFLAGS="-O2 -g -Wall -arch i386 -arch ppc -isysroot /Developer/SDKs/MacOSX10.4u.sdk -mmacosx-version-min=10.3" \
LDFLAGS="-arch i386 -arch ppc -isysroot /Developer/SDKs/MacOSX10.4u.sdk -mmacosx-version-min=10.3" \
CFLAGS="-O2 -g -Wall -arch i386 -arch ppc -isysroot /Developer/SDKs/MacOSX10.6.sdk -mmacosx-version-min=10.6" \
LDFLAGS="-arch i386 -arch ppc -isysroot /Developer/SDKs/MacOSX10.6.sdk -mmacosx-version-min=10.6" \
./configure --disable-mac-universal --disable-dependency-tracking
@endcode
@ -99,7 +99,7 @@ You will need to add the following frameworks to your XCode project:
- AudioToolbox.framework
- AudioUnit.framework
- CoreServices.framework
- Carbon.framework
- CoreFoundation.framework
@section comp_mac_ca_5 Using the Library in Other Projects

View file

@ -3,7 +3,10 @@
@section comp_mingw1 Portaudio for Windows With MinGW
<strong>This document contains old or out-of-date information. Please see a draft of new MinGW information on our Wiki: <a href="https://app.assembla.com/spaces/portaudio/wiki/Notes_about_building_PortAudio_with_MinGW">PortAudio Wiki: Notes about building PortAudio with MinGW</a></strong>
<strong>This document contains old or out-of-date information. Please see
a draft of new MinGW information on our
Wiki: <a href="https://github.com/PortAudio/portaudio/wiki/Notes_about_building_PortAudio_with_MinGW">
PortAudio Wiki: Notes about building PortAudio with MinGW</a></strong>
= MinGW/MSYS =
@ -50,4 +53,4 @@ To update your copy or check out a fresh copy of the source
Back to the Tutorial: \ref tutorial_start
*/
*/

View file

@ -10,7 +10,7 @@ PortAudio will not start playing back audio until you start the stream. After ca
if( err != paNoError ) goto error;
@endcode
You can communicate with your callback routine through the data structure you passed in on the open call, or through global variables, or using other interprocess communication techniques, but please be aware that your callback function may be called at interrupt time when your foreground process is least expecting it. So avoid sharing complex data structures that are easily corrupted like double linked lists, and avoid using locks such as mutexs as this may cause your callback function to block and therefore drop audio. Such techniques may even cause deadlock on some platforms.
You can communicate with your callback routine through the data structure you passed in on the open call, or through global variables, or using other interprocess communication techniques, but please be aware that your callback function may be called at interrupt time when your foreground process is least expecting it. So avoid sharing complex data structures that are easily corrupted like double linked lists, and avoid using locks such as mutexes as this may cause your callback function to block and therefore drop audio. Such techniques may even cause deadlock on some platforms.
PortAudio will continue to call your callback and process audio until you stop the stream. This can be done in one of several ways, but, before we do so, we'll want to see that some of our audio gets processed by sleeping for a few seconds. This is easy to do with Pa_Sleep(), which is used by many of the examples in the patests/ directory for exactly this purpose. Note that, for a variety of reasons, you can not rely on this function for accurate scheduling, so your stream may not run for exactly the same amount of time as you expect, but it's good enough for our example.

View file

@ -37,7 +37,9 @@ Below are the steps to writing a PortAudio application using the callback techni
In addition to this "Callback" architecture, V19 also supports a "Blocking I/O" model which uses read and write calls which may be more familiar to non-audio programmers. Note that at this time, not all APIs support this functionality.
In this tutorial, we'll show how to use the callback architecture to play a sawtooth wave. Much of the tutorial is taken from the file paex_saw.c, which is part of the PortAudio distribution. When you're done with this tutorial, you'll be armed with the basic knowledge you need to write an audio program. If you need more sample code, look in the "examples" and "test" directory of the PortAudio distribution. Another great source of info is the portaudio.h Doxygen page, which documents the entire V19 API. Also see the page for <a href="http://www.assembla.com/spaces/portaudio/wiki/Tips">tips on programming PortAudio</a> on the PortAudio wiki.
In this tutorial, we'll show how to use the callback architecture to play a sawtooth wave. Much of the tutorial is taken from the file paex_saw.c, which is part of the PortAudio distribution. When you're done with this tutorial, you'll be armed with the basic knowledge you need to write an audio program. If you need more sample code, look in the "examples" and "test" directory of the PortAudio distribution. Another great source of info is the portaudio.h Doxygen page, which documents the entire V19 API.
Also see the page for <a href="https://github.com/PortAudio/portaudio/wiki/Tips">tips on programming PortAudio</a>
on the PortAudio wiki.
@section tut_start4 Programming Tutorial Contents
@ -56,4 +58,4 @@ Once you have a basic understanding of how to use PortAudio, you might be intere
Next: \ref writing_a_callback
*/
*/

View file

@ -10,7 +10,7 @@ The next task is to write your own "callback" function. The "callback" is a func
Before we begin, it's important to realize that the callback is a delicate place. This is because some systems perform the callback in a special thread, or interrupt handler, and it is rarely treated the same as the rest of your code.
For most modern systems, you won't be able to cause crashes by making disallowed calls in the callback, but if you want your code to produce glitch-free audio, you will have to make sure you avoid function calls that may take an unbounded amount of time
to execute. Exactly what these are depend on your platform but almost certainly include the following: memory allocation/deallocation, I/O (including file I/O as well as console I/O, such as printf()), context switching (such as exec() or
yield()), mutex operations, or anything else that might rely on the OS. If you think short critical sections are safe please go read about priority inversion. Windows amd Mac OS schedulers have no real-time safe priority inversion prevention. Other platforms require special mutex flags. In addition, it is not safe to call any PortAudio API functions in the callback except as explicitly permitted in the documentation.
yield()), mutex operations, or anything else that might rely on the OS. If you think short critical sections are safe please go read about priority inversion. Windows and Mac OS schedulers have no real-time safe priority inversion prevention. Other platforms require special mutex flags. In addition, it is not safe to call any PortAudio API functions in the callback except as explicitly permitted in the documentation.
Your callback function must return an int and accept the exact parameters specified in this typedef:

View file

@ -3,6 +3,7 @@
MACRO(ADD_EXAMPLE appl_name)
ADD_EXECUTABLE(${appl_name} "${appl_name}.c")
TARGET_LINK_LIBRARIES(${appl_name} portaudio_static)
TARGET_INCLUDE_DIRECTORIES(${appl_name} PRIVATE ../src/common)
SET_TARGET_PROPERTIES(${appl_name} PROPERTIES FOLDER "Examples C")
IF(WIN32)
SET_PROPERTY(TARGET ${appl_name} APPEND_STRING PROPERTY COMPILE_DEFINITIONS _CRT_SECURE_NO_WARNINGS)
@ -24,12 +25,10 @@ IF(PA_USE_ASIO AND WIN32)
ADD_EXAMPLE(paex_mono_asio_channel_select)
ENDIF()
ADD_EXAMPLE(paex_ocean_shore)
TARGET_INCLUDE_DIRECTORIES(paex_ocean_shore PRIVATE ../src/common)
ADD_EXAMPLE(paex_pink)
ADD_EXAMPLE(paex_read_write_wire)
ADD_EXAMPLE(paex_record)
ADD_EXAMPLE(paex_record_file)
TARGET_INCLUDE_DIRECTORIES(paex_record_file PRIVATE ../src/common)
ADD_EXAMPLE(paex_saw)
ADD_EXAMPLE(paex_sine)
ADD_EXAMPLE_CPP(paex_sine_c++)

View file

@ -1,7 +1,7 @@
/** @file pa_devs.c
@ingroup examples_src
@ingroup examples_src
@brief List available devices, including device information.
@author Phil Burk http://www.softsynth.com
@author Phil Burk http://www.softsynth.com
@note Define PA_USE_ASIO=0 to compile this code on Windows without
ASIO support.
@ -34,13 +34,13 @@
*/
/*
* The text above constitutes the entire PortAudio license; however,
* 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
* they can be incorporated into the canonical version. It is also
* requested that these non-binding requests be included along with the
* license above.
*/
@ -106,14 +106,14 @@ int main(void)
PaStreamParameters inputParameters, outputParameters;
PaError err;
err = Pa_Initialize();
if( err != paNoError )
{
printf( "ERROR: Pa_Initialize returned 0x%x\n", err );
goto error;
}
printf( "PortAudio version: 0x%08X\n", Pa_GetVersion());
printf( "Version text: '%s'\n", Pa_GetVersionInfo()->versionText );
@ -124,13 +124,13 @@ int main(void)
err = numDevices;
goto error;
}
printf( "Number of devices = %d\n", numDevices );
for( i=0; i<numDevices; i++ )
{
deviceInfo = Pa_GetDeviceInfo( i );
printf( "--------------------------------------- device #%d\n", i );
/* Mark global and API specific default devices */
defaultDisplayed = 0;
if( i == Pa_GetDefaultInputDevice() )
@ -144,7 +144,7 @@ int main(void)
printf( "[ Default %s Input", hostInfo->name );
defaultDisplayed = 1;
}
if( i == Pa_GetDefaultOutputDevice() )
{
printf( (defaultDisplayed ? "," : "[") );
@ -154,7 +154,7 @@ int main(void)
else if( i == Pa_GetHostApiInfo( deviceInfo->hostApi )->defaultOutputDevice )
{
const PaHostApiInfo *hostInfo = Pa_GetHostApiInfo( deviceInfo->hostApi );
printf( (defaultDisplayed ? "," : "[") );
printf( (defaultDisplayed ? "," : "[") );
printf( " Default %s Output", hostInfo->name );
defaultDisplayed = 1;
}
@ -188,7 +188,7 @@ int main(void)
long minLatency, maxLatency, preferredLatency, granularity;
err = PaAsio_GetAvailableLatencyValues( i,
&minLatency, &maxLatency, &preferredLatency, &granularity );
&minLatency, &maxLatency, &preferredLatency, &granularity );
printf( "ASIO minimum buffer size = %ld\n", minLatency );
printf( "ASIO maximum buffer size = %ld\n", maxLatency );
@ -210,7 +210,7 @@ int main(void)
inputParameters.sampleFormat = paInt16;
inputParameters.suggestedLatency = 0; /* ignored by Pa_IsFormatSupported() */
inputParameters.hostApiSpecificStreamInfo = NULL;
outputParameters.device = i;
outputParameters.channelCount = deviceInfo->maxOutputChannels;
outputParameters.sampleFormat = paInt16;

View file

@ -1,7 +1,7 @@
/** @file pa_fuzz.c
@ingroup examples_src
@ingroup examples_src
@brief Distort input like a fuzz box.
@author Phil Burk http://www.softsynth.com
@author Phil Burk http://www.softsynth.com
*/
/*
* $Id$
@ -31,13 +31,13 @@
*/
/*
* The text above constitutes the entire PortAudio license; however,
* 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
* they can be incorporated into the canonical version. It is also
* requested that these non-binding requests be included along with the
* license above.
*/
@ -116,7 +116,7 @@ static int fuzzCallback( const void *inputBuffer, void *outputBuffer,
*out++ = *in++; /* right - clean */
}
}
return paContinue;
}
@ -133,8 +133,8 @@ int main(void)
inputParameters.device = Pa_GetDefaultInputDevice(); /* default input device */
if (inputParameters.device == paNoDevice) {
fprintf(stderr,"Error: No default input device.\n");
goto error;
fprintf(stderr,"Error: No default input device.\n");
goto error;
}
inputParameters.channelCount = 2; /* stereo input */
inputParameters.sampleFormat = PA_SAMPLE_TYPE;
@ -143,8 +143,8 @@ int main(void)
outputParameters.device = Pa_GetDefaultOutputDevice(); /* default output device */
if (outputParameters.device == paNoDevice) {
fprintf(stderr,"Error: No default output device.\n");
goto error;
fprintf(stderr,"Error: No default output device.\n");
goto error;
}
outputParameters.channelCount = 2; /* stereo output */
outputParameters.sampleFormat = PA_SAMPLE_TYPE;
@ -176,7 +176,7 @@ int main(void)
error:
Pa_Terminate();
fprintf( stderr, "An error occured while using the portaudio stream\n" );
fprintf( stderr, "An error occurred while using the portaudio stream\n" );
fprintf( stderr, "Error number: %d\n", err );
fprintf( stderr, "Error message: %s\n", Pa_GetErrorText( err ) );
return -1;

Some files were not shown because too many files have changed in this diff Show more