# PortAudio - Release Notes

Link to PortAudio Home Page

## V18 - 5/6/02

> All source code and documentation now under CVS.

> Ran most of the code through AStyle to cleanup ragged indentation caused by using different editors. Used this command:
> `astyle --style=ansi -c -o --convert-tabs --indent-preprocessor *.c`

> Added "pa_common/pa_convert.c" for Mac OS X. Start of new conversion utilities.

> ASIO

> - New Pa_ASIO_Adaptor_Init function to init Callback adpatation variables,
> - Cleanup of Pa_ASIO_Callback_Input
> - Break apart device loading to debug random failure in Pa_ASIO_QueryDeviceInfo
> - Deallocate all resources in PaHost_Term for cases where Pa_CloseStream is not called properly
> - New Pa_ASIO_loadDriver that calls CoInitialize on each thread on Windows. Allows use by multiple threads.
> - Correct error code management in PaHost_Term, removed various compiler warning
> - Add Mac includes for <Devices.h> and <Timer.h>
> - Pa_ASIO_QueryDeviceInfo bug correction, memory allocation checking, better error handling
> Mac OS X
> - Major cleanup and improvements.
> - Fixed device queries for numChannels and sampleRates,
> - Audio input works if using same CoreAudio device (some HW devices make separate CoreAudio devices).
> - Added paInt16, paInt8, format using new "pa_common/pa_convert.c" file.
> - Return error if opened in mono mode cuz not supported.
> - Check for getenv("PA_MIN_LATEWNCY_MSEC") to set latency externally.
> - Use getrusage() instead of gettimeofday() for CPU Load calculation.
> Windows MME
> - Fixed bug that caused TIMEOUT in Pa_StopStream(). Added check for past_StopSoon() in Pa_TimeSlice(). Thanks Julien Maillard.
> - Detect Win XP versus NT, use lower latency.
> - Fix DBUG typo;
> - removed init of CurrentCount which was not compiling on Borland
> - general cleanup, factored streamData alloc and cpu usage initialization
> - stopped counting WAVE_MAPPER when there were no audio cards plugged in
> Windows DirectSound
> - Detect Win XP and Win 2K properly when determining latency.
> Unix OSS
> - Use high real-time priority if app is running with root priveledges. Lowers latency.
> - Added watch dog thread that prevents real-time thread from hogging CPU and hanging the computer.
> - Check error return from read() and write().
> - Check CPU endianness instead of assuming Little Endian.

## V17 - 10/15/01

> Unix OSS
> - Set num channels back to two after device query for ALSA. This fixed a bug in V16 that sometimes caused a failure when querying for the sample rates. Thanks Stweart Greenhill.

> #### Macintosh Sound Manager

> - Use NewSndCallBackUPP() for CARBON compatibility.

## V16 - 9/27/01

> Added Alpha implementations for ASIO, SGI, and BeOS!
> - CPULoad is now calculated based on the time spent to generate a known number of frames. This is more accurate than a simple percentage of real-time. Implemented in pa_unix_oss, pa_win_wmme and pa_win_ds.
> - Fix dither and shift for recording PaUInt8 format data.
> - Added "patest_maxsines.c" which tests `Pa_GetCPULoad().`

> #### Windows WMME

> - sDevicePtrs now allocated using `GlobalAlloc()`. This prevents a crash in Pa_Terminate() on Win2000. Thanks Mike Berry for finding this. Thanks Mike Berry.
> - Pass process instead of thread to `SetPriorityClass`(). This fixes a bug that caused the priority to not be increased. Thanks to Alberto di Bene for spotting this.

> #### Windows DirectSound

> - Casts for compiling with __MWERKS__ CodeWarrior.

> #### UNIX OSS

> - Derived from Linux OSS implementation.
> - Numerous patches from Heiko Purnhagen, Stephen Brandon, etc.
> - Improved query mechanism which often bailed out unnecessarily.
> - Removed sNumDevices and potential related bugs,
> - Use `getenv("PA_MIN_LATENCY_MSEC")` in code to set desired latency. User can set by entering:
> `export PA_MIN_LATENCY_MSEC=40`

> #### Macintosh Sound Manager

> - Pass unused event to WaitNextEvent instead of NULL to prevent Mac OSX crash. Thanks Dominic Mazzoni.
> - Use requested number of input channels.

## V15 - 5/29/01

> - New Linux OSS Beta

> #### Windows WMME

> - sDevicePtrs now allocated based on sizeof(pointer). Was allocating too much space.
> - Check for excessive numbers of channels. Some drivers reported bogus numbers.
> - Apply Mike Berry's changes for CodeWarrior on PC including condition including of memory.h, and explicit typecasting on memory allocation.

> #### Macintosh Sound Manager

> - ScanInputDevices was setting sDefaultOutputDeviceID instead of sDefaultInputDeviceID.
> - Device Scan was crashing for anything other than siBadSoundInDevice, but some Macs may return other errors! Caused failure to init on some G4s under OS9.
> - Fix TIMEOUT in record mode.
> - Change CARBON_COMPATIBLE to TARGET_API_MAC_CARBON

## V14 - 2/6/01

> - Added implementation for Windows MultiMedia Extensions (WMME) by Ross and Phil
> - Changed Pa_StopStream() so that it waits for the buffers to drain.
> - Added Pa_AbortStream() that stops immediately without waiting.
> - Added new test: patest_stop.c to test above two mods.
> - Fixed Pa_StreamTime() so that it returns current play position instead of the write position. Added "patest_sync.c" to demo audio/video sync.
> - Improved stability of Macintosh implementation. Added timeouts to prevent hangs.
> - Added Pa_GetSampleSize( PaSampleFormat format );
> - Changes some "int"s to "long"s so that PA works properly on Macintosh which often compiles using 16 bit ints.
> - Added Implementation Guide

## V12 - 1/9/01

> - Mac now scans for and queries all devices. But it does not yet support selecting any other than the default device.
> - Blocking I/O calls renamed to separate them from the PortAudio API.
> - Cleaned up indentation problems with tabs versus spaces.
> - Now attempts to correct bogus sample rate info returned from DirectSound device queries.