PortAudio portable cross-platform audio I/O library (fork)
  • C 51.1%
  • Shell 33.2%
  • C++ 11.6%
  • Makefile 2.3%
  • Java 0.8%
  • Other 1%
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
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
.github GH Actions: add separate workflow for CMake testing every OS 2021-04-28 17:13:32 -07:00
bindings [macOS] drop support for 10.5 (#511) 2021-04-28 17:38:18 -07:00
build Added Pa_GetVersionInfo to portaudio.def (#574) 2021-05-27 10:07:27 +10:00
cmake_support Added Pa_GetVersionInfo to portaudio.def (#574) 2021-05-27 10:07:27 +10:00
doc [macOS] drop support for 10.5 (#511) 2021-04-28 17:38:18 -07:00
examples CMake: clean up including headers for examples 2021-04-28 17:13:32 -07:00
include 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
qa CMake: build qa executables 2021-04-28 17:13:32 -07:00
src Have PaUtil_GetTime() use monotonic time on Unix (#559) 2021-06-08 17:52:32 -07:00
test test: time out in patest_sine_time.c (#585) 2021-06-08 17:19:14 -07:00
.editorconfig Add .editorconfig (#394) 2021-02-18 12:49:18 +11:00
.gitattributes Add .gitattributes to fix EOL 2016-05-18 22:05:13 -07:00
.gitignore mac autoconf: support current and future SDKs (#470) 2021-01-26 15:25:10 -08:00
aclocal.m4 Fix user-facing and non-user-facing typos 2020-12-11 20:24:05 -05:00
clear_gitrevision.sh PA_GIT_REVISION: new scripts to replace SVN revision 2016-09-05 17:03:27 -07:00
CMakeLists.txt Unify windows error processing into a single PaWinUtil_SetLastSystemErrorInfo function (#495) 2021-06-09 10:43:40 +10:00
config.guess Files needed for compiling on El Capitan. 2016-01-04 17:22:56 +00:00
config.sub Files needed for compiling on El Capitan. 2016-01-04 17:22:56 +00:00
configure [macOS] drop support for 10.5 (#511) 2021-04-28 17:38:18 -07:00
configure.in [macOS] drop support for 10.5 (#511) 2021-04-28 17:38:18 -07:00
depcomp Files needed for compiling on El Capitan. 2016-01-04 17:22:56 +00:00
Doxyfile removed bindings/java from doxygen generated documentation 2015-09-06 10:26:16 +00:00
Doxyfile.developer Normalize all the line endings 2016-05-18 22:13:20 -07:00
i686-w64-mingw32.cmake Add a GitHub action for cross-compiling to MinGW via CMake. 2020-10-22 11:40:11 +11:00
install-sh Files needed for compiling on El Capitan. 2016-01-04 17:22:56 +00:00
LICENSE.txt moved trunk into place 2008-03-20 14:24:39 +00:00
ltmain.sh Fix user-facing and non-user-facing typos 2021-01-27 17:40:26 -08:00
Makefile.in configure/make: export PaWasapi_* and PaWasapiWinrt_* symbols (#500) 2021-02-11 12:37:23 +11:00
missing Files needed for compiling on El Capitan. 2016-01-04 17:22:56 +00:00
portaudio-2.0.pc.in moved trunk into place 2008-03-20 14:24:39 +00:00
README.configure.txt Add support for 10.11 SDK so PortAudio can compile on Mac. 2016-01-04 17:22:00 +00:00
README.md Fix user-facing and non-user-facing typos 2020-12-11 20:24:05 -05:00
SConstruct moved trunk into place 2008-03-20 14:24:39 +00:00
update_gitrevision.sh PA_GIT_REVISION: new scripts to replace SVN revision 2016-09-05 17:03:27 -07:00

PortAudio - portable audio I/O library

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