From: <man...@us...> - 2013-09-14 16:25:11
|
Revision: 2706 http://sourceforge.net/p/modplug/code/2706 Author: manxorist Date: 2013-09-14 16:24:56 +0000 (Sat, 14 Sep 2013) Log Message: ----------- [Fix] sounddev: Fix deadlock when using WDM-KS with low latencies on some drivers (via portaudio update). [Fix] sounddev: Fix stratup crash on wine (via portaudio update). Merged revision(s) 2694-2705 from branches/manx/portaudio: [Var] Update portaudio to version svn-r1910 as of 2013-09-09. [Var] portaudio: Improve documentation of local portaudio modifications. [Fix] VS2008 projects need ksguid.lib and ksuser.lib . [Fix] sounddev: Portaudio encodes device names in UTF8 now, convert them accordingly. ........ Revision Links: -------------- http://sourceforge.net/p/modplug/code/1910 Modified Paths: -------------- trunk/OpenMPT/include/portaudio/CMakeLists.txt trunk/OpenMPT/include/portaudio/Doxyfile trunk/OpenMPT/include/portaudio/Doxyfile.developer trunk/OpenMPT/include/portaudio/OpenMPT.txt trunk/OpenMPT/include/portaudio/build/msvc/portaudio.def trunk/OpenMPT/include/portaudio/cmake_support/options_cmake.h.in trunk/OpenMPT/include/portaudio/configure trunk/OpenMPT/include/portaudio/configure.in trunk/OpenMPT/include/portaudio/doc/src/mainpage.dox trunk/OpenMPT/include/portaudio/examples/pa_devs.c trunk/OpenMPT/include/portaudio/examples/paex_write_sine.c trunk/OpenMPT/include/portaudio/include/pa_mac_core.h trunk/OpenMPT/include/portaudio/include/pa_win_ds.h trunk/OpenMPT/include/portaudio/include/portaudio.h trunk/OpenMPT/include/portaudio/pablio/README.txt trunk/OpenMPT/include/portaudio/pablio/pablio.h trunk/OpenMPT/include/portaudio/portaudio.vcproj trunk/OpenMPT/include/portaudio/portaudio.vcxproj trunk/OpenMPT/include/portaudio/portaudio.vcxproj.filters trunk/OpenMPT/include/portaudio/qa/loopback/README.txt trunk/OpenMPT/include/portaudio/qa/loopback/src/audio_analyzer.c trunk/OpenMPT/include/portaudio/qa/loopback/src/paqa.c trunk/OpenMPT/include/portaudio/qa/paqa_latency.c trunk/OpenMPT/include/portaudio/src/common/pa_front.c trunk/OpenMPT/include/portaudio/src/common/pa_hostapi.h trunk/OpenMPT/include/portaudio/src/common/pa_process.c trunk/OpenMPT/include/portaudio/src/common/pa_ringbuffer.h trunk/OpenMPT/include/portaudio/src/common/pa_trace.c trunk/OpenMPT/include/portaudio/src/common/pa_trace.h trunk/OpenMPT/include/portaudio/src/hostapi/alsa/pa_linux_alsa.c trunk/OpenMPT/include/portaudio/src/hostapi/asio/pa_asio.cpp trunk/OpenMPT/include/portaudio/src/hostapi/coreaudio/pa_mac_core.c trunk/OpenMPT/include/portaudio/src/hostapi/coreaudio/pa_mac_core_blocking.c trunk/OpenMPT/include/portaudio/src/hostapi/coreaudio/pa_mac_core_internal.h trunk/OpenMPT/include/portaudio/src/hostapi/dsound/pa_win_ds.c trunk/OpenMPT/include/portaudio/src/hostapi/oss/pa_unix_oss.c trunk/OpenMPT/include/portaudio/src/hostapi/wasapi/mingw-include/ksmedia.h trunk/OpenMPT/include/portaudio/src/hostapi/wasapi/pa_win_wasapi.c trunk/OpenMPT/include/portaudio/src/hostapi/wdmks/pa_win_wdmks.c trunk/OpenMPT/include/portaudio/src/hostapi/wdmks/readme.txt trunk/OpenMPT/include/portaudio/src/hostapi/wmme/pa_win_wmme.c trunk/OpenMPT/include/portaudio/src/os/win/pa_win_waveformat.c trunk/OpenMPT/include/portaudio/src/os/win/pa_win_wdmks_utils.c trunk/OpenMPT/include/portaudio/src/os/win/pa_x86_plain_converters.c trunk/OpenMPT/include/portaudio/test/patest_wire.c trunk/OpenMPT/include/portaudio/testcvs/changeme.txt trunk/OpenMPT/include/premake4.lua trunk/OpenMPT/mptrack/mptrack_08.vcproj trunk/OpenMPT/sounddev/SoundDevicePortAudio.cpp Added Paths: ----------- trunk/OpenMPT/include/portaudio/bindings/java/ trunk/OpenMPT/include/portaudio/doc/src/tutorial/ trunk/OpenMPT/include/portaudio/examples/CMakeLists.txt trunk/OpenMPT/include/portaudio/examples/paex_ocean_shore.c trunk/OpenMPT/include/portaudio/examples/paex_record_file.c trunk/OpenMPT/include/portaudio/examples/paex_sine_c++.cpp trunk/OpenMPT/include/portaudio/include/pa_win_wdmks.h trunk/OpenMPT/include/portaudio/test/CMakeLists.txt trunk/OpenMPT/include/portaudio/test/patest_dsound_find_best_latency_params.c trunk/OpenMPT/include/portaudio/test/patest_dsound_low_level_latency_params.c Property Changed: ---------------- trunk/OpenMPT/ trunk/OpenMPT/include/portaudio/bindings/java/c/ trunk/OpenMPT/include/portaudio/bindings/java/c/build/ trunk/OpenMPT/include/portaudio/bindings/java/c/build/vs2010/ trunk/OpenMPT/include/portaudio/bindings/java/c/build/vs2010/PortAudioJNI/ trunk/OpenMPT/include/portaudio/bindings/java/c/src/ trunk/OpenMPT/include/portaudio/bindings/java/jportaudio/ trunk/OpenMPT/include/portaudio/bindings/java/jportaudio/jtests/ trunk/OpenMPT/include/portaudio/bindings/java/jportaudio/jtests/com/ trunk/OpenMPT/include/portaudio/bindings/java/jportaudio/jtests/com/portaudio/ trunk/OpenMPT/include/portaudio/bindings/java/jportaudio/src/ trunk/OpenMPT/include/portaudio/bindings/java/jportaudio/src/com/ trunk/OpenMPT/include/portaudio/bindings/java/jportaudio/src/com/portaudio/ trunk/OpenMPT/include/portaudio/bindings/java/scripts/ Index: trunk/OpenMPT =================================================================== --- trunk/OpenMPT 2013-09-14 16:16:13 UTC (rev 2705) +++ trunk/OpenMPT 2013-09-14 16:24:56 UTC (rev 2706) Property changes on: trunk/OpenMPT ___________________________________________________________________ Modified: svn:mergeinfo ## -6,6 +6,7 ## /branches/manx/lossy-export-xiph:2663,2677,2680 /branches/manx/mptstring-stdstring-support:2204,2208,2212,2214,2217,2220,2224,2259,2261-2262,2264,2267 /branches/manx/nonglobal-mixer:1715-1841 +/branches/manx/portaudio:2694-2705 /branches/manx/premake:2606,2609-2610,2614,2616,2621,2624,2641 /branches/manx/profiler:1813 /branches/manx/project-files-cleanups:1378-1382 \ No newline at end of property Modified: trunk/OpenMPT/include/portaudio/CMakeLists.txt =================================================================== --- trunk/OpenMPT/include/portaudio/CMakeLists.txt 2013-09-14 16:16:13 UTC (rev 2705) +++ trunk/OpenMPT/include/portaudio/CMakeLists.txt 2013-09-14 16:24:56 UTC (rev 2706) @@ -7,17 +7,27 @@ CMAKE_MINIMUM_REQUIRED(VERSION 2.8) +OPTION(PA_CONFIG_LIB_OUTPUT_PATH "Make sure that output paths are kept neat" OFF) IF(CMAKE_CL_64) SET(TARGET_POSTFIX x64) +IF(PA_CONFIG_LIB_OUTPUT_PATH) SET(LIBRARY_OUTPUT_PATH ${CMAKE_CURRENT_BINARY_DIR}/bin/x64) +ENDIF(PA_CONFIG_LIB_OUTPUT_PATH) ELSE(CMAKE_CL_64) SET(TARGET_POSTFIX x86) +IF(PA_CONFIG_LIB_OUTPUT_PATH) SET(LIBRARY_OUTPUT_PATH ${CMAKE_CURRENT_BINARY_DIR}/bin/Win32) +ENDIF(PA_CONFIG_LIB_OUTPUT_PATH) ENDIF(CMAKE_CL_64) +OPTION(PA_ENABLE_DEBUG_OUTPUT "Enable debug output for Portaudio" OFF) +IF(PA_ENABLE_DEBUG_OUTPUT) +ADD_DEFINITIONS(-DPA_ENABLE_DEBUG_OUTPUT) +ENDIF(PA_ENABLE_DEBUG_OUTPUT) + IF(WIN32 AND MSVC) -OPTION(PORTAUDIO_DLL_LINK_WITH_STATIC_RUNTIME "Link with static runtime libraries (minimizes runtime dependencies)" ON) -IF(PORTAUDIO_DLL_LINK_WITH_STATIC_RUNTIME) +OPTION(PA_DLL_LINK_WITH_STATIC_RUNTIME "Link with static runtime libraries (minimizes runtime dependencies)" ON) +IF(PA_DLL_LINK_WITH_STATIC_RUNTIME) FOREACH(flag_var CMAKE_C_FLAGS CMAKE_C_FLAGS_DEBUG CMAKE_C_FLAGS_RELEASE CMAKE_C_FLAGS_MINSIZEREL CMAKE_C_FLAGS_RELWITHDEBINFO @@ -27,12 +37,12 @@ STRING(REGEX REPLACE "/MD" "/MT" ${flag_var} "${${flag_var}}") ENDIF(${flag_var} MATCHES "/MD") ENDFOREACH(flag_var) -ENDIF(PORTAUDIO_DLL_LINK_WITH_STATIC_RUNTIME) +ENDIF(PA_DLL_LINK_WITH_STATIC_RUNTIME) ENDIF(WIN32 AND MSVC) IF(WIN32) -OPTION(PORTAUDIO_UNICODE_BUILD "Enable Portaudio Unicode build" ON) +OPTION(PA_UNICODE_BUILD "Enable Portaudio Unicode build" ON) SET(CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake_support) # Try to find DirectX SDK @@ -42,67 +52,57 @@ FIND_PACKAGE(ASIOSDK) IF(ASIOSDK_FOUND) -OPTION(PORTAUDIO_ENABLE_ASIO "Enable support for ASIO" ON) +OPTION(PA_USE_ASIO "Enable support for ASIO" ON) ELSE(ASIOSDK_FOUND) -OPTION(PORTAUDIO_ENABLE_ASIO "Enable support for ASIO" OFF) +OPTION(PA_USE_ASIO "Enable support for ASIO" OFF) ENDIF(ASIOSDK_FOUND) IF(DXSDK_FOUND) -OPTION(PORTAUDIO_ENABLE_DSOUND "Enable support for DirectSound" ON) +OPTION(PA_USE_DS "Enable support for DirectSound" ON) ELSE(DXSDK_FOUND) -OPTION(PORTAUDIO_ENABLE_DSOUND "Enable support for DirectSound" OFF) +OPTION(PA_USE_DS "Enable support for DirectSound" OFF) ENDIF(DXSDK_FOUND) -OPTION(PORTAUDIO_ENABLE_WMME "Enable support for MME" ON) -OPTION(PORTAUDIO_ENABLE_WASAPI "Enable support for WASAPI" ON) -OPTION(PORTAUDIO_ENABLE_WDMKS "Enable support for WDMKS" ON) -OPTION(PORTAUDIO_USE_WDMKS_DEVICE_INFO "Use WDM/KS API for device info" ON) -MARK_AS_ADVANCED(PORTAUDIO_USE_WDMKS_DEVICE_INFO) -IF(PORTAUDIO_ENABLE_DSOUND) -OPTION(PORTAUDIO_USE_DIRECTSOUNDFULLDUPLEXCREATE "Use DirectSound full duplex create" ON) -MARK_AS_ADVANCED(PORTAUDIO_USE_DIRECTSOUNDFULLDUPLEXCREATE) -ENDIF(PORTAUDIO_ENABLE_DSOUND) +OPTION(PA_USE_WMME "Enable support for MME" ON) +OPTION(PA_USE_WASAPI "Enable support for WASAPI" ON) +OPTION(PA_USE_WDMKS "Enable support for WDMKS" ON) +OPTION(PA_USE_WDMKS_DEVICE_INFO "Use WDM/KS API for device info" ON) +MARK_AS_ADVANCED(PA_USE_WDMKS_DEVICE_INFO) +IF(PA_USE_DS) +OPTION(PA_USE_DIRECTSOUNDFULLDUPLEXCREATE "Use DirectSound full duplex create" ON) +MARK_AS_ADVANCED(PA_USE_DIRECTSOUNDFULLDUPLEXCREATE) +ENDIF(PA_USE_DS) ENDIF(WIN32) -MACRO(SET_HEADER_OPTION OPTION_NAME OPTION_VALUE) - IF(${OPTION_NAME}) - SET(${OPTION_VALUE} "1") - ELSE(${OPTION_NAME}) - SET(${OPTION_VALUE} "0") - ENDIF(${OPTION_NAME}) -ENDMACRO(SET_HEADER_OPTION) - -SET_HEADER_OPTION(PORTAUDIO_ENABLE_ASIO PA_ENABLE_ASIO) -SET_HEADER_OPTION(PORTAUDIO_ENABLE_DSOUND PA_ENABLE_DSOUND) -SET_HEADER_OPTION(PORTAUDIO_ENABLE_WMME PA_ENABLE_WMME) -SET_HEADER_OPTION(PORTAUDIO_ENABLE_WASAPI PA_ENABLE_WASAPI) -SET_HEADER_OPTION(PORTAUDIO_ENABLE_WDMKS PA_ENABLE_WDMKS) - # Set variables for DEF file expansion -IF(NOT PORTAUDIO_ENABLE_ASIO) +IF(NOT PA_USE_ASIO) SET(DEF_EXCLUDE_ASIO_SYMBOLS ";") -ENDIF(NOT PORTAUDIO_ENABLE_ASIO) +ENDIF(NOT PA_USE_ASIO) -IF(NOT PORTAUDIO_ENABLE_WASAPI) +IF(NOT PA_USE_WASAPI) SET(DEF_EXCLUDE_WASAPI_SYMBOLS ";") -ENDIF(NOT PORTAUDIO_ENABLE_WASAPI) +ENDIF(NOT PA_USE_WASAPI) -IF(PORTAUDIO_USE_WDMKS_DEVICE_INFO) +IF(PA_USE_WDMKS_DEVICE_INFO) ADD_DEFINITIONS(-DPAWIN_USE_WDMKS_DEVICE_INFO) -ENDIF(PORTAUDIO_USE_WDMKS_DEVICE_INFO) +ENDIF(PA_USE_WDMKS_DEVICE_INFO) -IF(PORTAUDIO_USE_DIRECTSOUNDFULLDUPLEXCREATE) +IF(PA_USE_DIRECTSOUNDFULLDUPLEXCREATE) ADD_DEFINITIONS(-DPAWIN_USE_DIRECTSOUNDFULLDUPLEXCREATE) -ENDIF(PORTAUDIO_USE_DIRECTSOUNDFULLDUPLEXCREATE) +ENDIF(PA_USE_DIRECTSOUNDFULLDUPLEXCREATE) ####################################### IF(WIN32) INCLUDE_DIRECTORIES(src/os/win) ENDIF(WIN32) -IF(PORTAUDIO_ENABLE_ASIO) +IF(PA_USE_ASIO) INCLUDE_DIRECTORIES(${ASIOSDK_ROOT_DIR}/common) INCLUDE_DIRECTORIES(${ASIOSDK_ROOT_DIR}/host) INCLUDE_DIRECTORIES(${ASIOSDK_ROOT_DIR}/host/pc) +SET(PA_ASIO_INCLUDES + include/pa_asio.h +) + SET(PA_ASIO_SOURCES src/hostapi/asio/pa_asio.cpp ) @@ -120,13 +120,14 @@ SOURCE_GROUP("hostapi\\ASIO\\ASIOSDK" FILES ${PA_ASIOSDK_SOURCES} ) -ENDIF(PORTAUDIO_ENABLE_ASIO) +ENDIF(PA_USE_ASIO) -IF(PORTAUDIO_ENABLE_DSOUND) +IF(PA_USE_DS) INCLUDE_DIRECTORIES(${DXSDK_INCLUDE_DIR}) INCLUDE_DIRECTORIES(src/os/win) SET(PA_DS_INCLUDES + include/pa_win_ds.h src/hostapi/dsound/pa_win_ds_dynlink.h ) @@ -139,9 +140,14 @@ ${PA_DS_INCLUDES} ${PA_DS_SOURCES} ) -ENDIF(PORTAUDIO_ENABLE_DSOUND) +ENDIF(PA_USE_DS) -IF(PORTAUDIO_ENABLE_WMME) +IF(PA_USE_WMME) + +SET(PA_WMME_INCLUDES + include/pa_win_wmme.h +) + SET(PA_WMME_SOURCES src/hostapi/wmme/pa_win_wmme.c ) @@ -149,9 +155,14 @@ SOURCE_GROUP("hostapi\\wmme" FILES ${PA_WMME_SOURCES} ) -ENDIF(PORTAUDIO_ENABLE_WMME) +ENDIF(PA_USE_WMME) -IF(PORTAUDIO_ENABLE_WASAPI) +IF(PA_USE_WASAPI) + +SET(PA_WASAPI_INCLUDES + include/pa_win_wasapi.h +) + SET(PA_WASAPI_SOURCES src/hostapi/wasapi/pa_win_wasapi.c ) @@ -159,9 +170,14 @@ SOURCE_GROUP("hostapi\\wasapi" FILES ${PA_WASAPI_SOURCES} ) -ENDIF(PORTAUDIO_ENABLE_WASAPI) +ENDIF(PA_USE_WASAPI) -IF(PORTAUDIO_ENABLE_WDMKS) +IF(PA_USE_WDMKS) + +SET(PA_WDMKS_INCLUDES + include/pa_win_wdmks.h +) + SET(PA_WDMKS_SOURCES src/hostapi/wdmks/pa_win_wdmks.c ) @@ -169,7 +185,7 @@ SOURCE_GROUP("hostapi\\wdmks" FILES ${PA_WDMKS_SOURCES} ) -ENDIF(PORTAUDIO_ENABLE_WDMKS) +ENDIF(PA_USE_WDMKS) SET(PA_SKELETON_SOURCES src/hostapi/skeleton/pa_hostapi_skeleton.c @@ -182,10 +198,11 @@ IF(WIN32) SET(PA_INCLUDES include/portaudio.h - include/pa_asio.h - include/pa_win_ds.h - include/pa_win_wasapi.h - include/pa_win_wmme.h + ${PA_ASIO_INCLUDES} + ${PA_DS_INCLUDES} + ${PA_WMME_INCLUDES} + ${PA_WASAPI_INCLUDES} + ${PA_WDMKS_INCLUDES} ) ENDIF(WIN32) @@ -269,13 +286,13 @@ ${PA_PLATFORM_SOURCES} ) -IF(PORTAUDIO_UNICODE_BUILD) +IF(PA_UNICODE_BUILD) SET_SOURCE_FILES_PROPERTIES( ${SOURCES_LESS_ASIO_SDK} PROPERTIES COMPILE_DEFINITIONS "UNICODE;_UNICODE" ) -ENDIF(PORTAUDIO_UNICODE_BUILD) +ENDIF(PA_UNICODE_BUILD) ADD_LIBRARY(portaudio SHARED ${PA_INCLUDES} @@ -302,26 +319,31 @@ IF(WIN32) # If we use DirectSound, we need this for the library to be found (if not in VS project settings) -IF(PORTAUDIO_ENABLE_DSOUND AND DXSDK_FOUND) +IF(PA_USE_DS AND DXSDK_FOUND) TARGET_LINK_LIBRARIES(portaudio ${DXSDK_DSOUND_LIBRARY}) -ENDIF(PORTAUDIO_ENABLE_DSOUND AND DXSDK_FOUND) +ENDIF(PA_USE_DS AND DXSDK_FOUND) # If we use WDM/KS we need setupapi.lib -IF(PORTAUDIO_ENABLE_WDMKS) +IF(PA_USE_WDMKS) TARGET_LINK_LIBRARIES(portaudio setupapi) -ENDIF(PORTAUDIO_ENABLE_WDMKS) +ENDIF(PA_USE_WDMKS) SET_TARGET_PROPERTIES(portaudio PROPERTIES OUTPUT_NAME portaudio_${TARGET_POSTFIX}) SET_TARGET_PROPERTIES(portaudio_static PROPERTIES OUTPUT_NAME portaudio_static_${TARGET_POSTFIX}) ENDIF(WIN32) -OPTION(PORTAUDIO_BUILD_TESTS "Include test projects" OFF) -MARK_AS_ADVANCED(PORTAUDIO_BUILD_TESTS) +OPTION(PA_BUILD_TESTS "Include test projects" OFF) +OPTION(PA_BUILD_EXAMPLES "Include example projects" OFF) # Prepared for inclusion of test files -IF(PORTAUDIO_BUILD_TESTS) +IF(PA_BUILD_TESTS) SUBDIRS(test) -ENDIF(PORTAUDIO_BUILD_TESTS) +ENDIF(PA_BUILD_TESTS) +# Prepared for inclusion of test files +IF(PA_BUILD_EXAMPLES) +SUBDIRS(examples) +ENDIF(PA_BUILD_EXAMPLES) + ################################# Modified: trunk/OpenMPT/include/portaudio/Doxyfile =================================================================== --- trunk/OpenMPT/include/portaudio/Doxyfile 2013-09-14 16:16:13 UTC (rev 2705) +++ trunk/OpenMPT/include/portaudio/Doxyfile 2013-09-14 16:24:56 UTC (rev 2706) @@ -84,10 +84,12 @@ #--------------------------------------------------------------------------- INPUT = doc/src \ include \ + bindings/java \ examples FILE_PATTERNS = *.h \ *.c \ *.cpp \ + *.java \ *.dox RECURSIVE = YES EXCLUDE = src/hostapi/wasapi/mingw-include Modified: trunk/OpenMPT/include/portaudio/Doxyfile.developer =================================================================== --- trunk/OpenMPT/include/portaudio/Doxyfile.developer 2013-09-14 16:16:13 UTC (rev 2705) +++ trunk/OpenMPT/include/portaudio/Doxyfile.developer 2013-09-14 16:24:56 UTC (rev 2706) @@ -84,6 +84,7 @@ #--------------------------------------------------------------------------- INPUT = doc/src \ include \ + bindings/java \ examples \ src \ test \ @@ -91,6 +92,7 @@ FILE_PATTERNS = *.h \ *.c \ *.cpp \ + *.java \ *.dox RECURSIVE = YES EXCLUDE = src/hostapi/wasapi/mingw-include Modified: trunk/OpenMPT/include/portaudio/OpenMPT.txt =================================================================== --- trunk/OpenMPT/include/portaudio/OpenMPT.txt 2013-09-14 16:16:13 UTC (rev 2705) +++ trunk/OpenMPT/include/portaudio/OpenMPT.txt 2013-09-14 16:24:56 UTC (rev 2706) @@ -1,2 +1,5 @@ -For building, premake4 is used to generate Visual Studio project files. -See ../premake4.lua for details. + - Portaudio version svn-r1910 as of 2013-09-07. + - A small modification to portaudio code has been made in src/hostapi/wdmks/pa_win_wdmks.c + to facilitate linking against strmiids.lib . Look for "OpenMPT" there. + - For building, premake4 is used to generate Visual Studio project files. + See ../premake4.lua for details. Index: trunk/OpenMPT/include/portaudio/bindings/java =================================================================== --- branches/manx/portaudio/include/portaudio/bindings/java 2013-09-14 16:16:13 UTC (rev 2705) +++ trunk/OpenMPT/include/portaudio/bindings/java 2013-09-14 16:24:56 UTC (rev 2706) Property changes on: trunk/OpenMPT/include/portaudio/bindings/java ___________________________________________________________________ Added: tsvn:logminsize ## -0,0 +1 ## +10 \ No newline at end of property Modified: trunk/OpenMPT/include/portaudio/build/msvc/portaudio.def =================================================================== --- trunk/OpenMPT/include/portaudio/build/msvc/portaudio.def 2013-09-14 16:16:13 UTC (rev 2705) +++ trunk/OpenMPT/include/portaudio/build/msvc/portaudio.def 2013-09-14 16:24:56 UTC (rev 2706) @@ -35,11 +35,11 @@ Pa_GetStreamWriteAvailable @32 Pa_GetSampleSize @33 Pa_Sleep @34 -;PaAsio_GetAvailableBufferSizes @50 -;PaAsio_ShowControlPanel @51 +PaAsio_GetAvailableBufferSizes @50 +PaAsio_ShowControlPanel @51 PaUtil_InitializeX86PlainConverters @52 -;PaAsio_GetInputChannelName @53 -;PaAsio_GetOutputChannelName @54 +PaAsio_GetInputChannelName @53 +PaAsio_GetOutputChannelName @54 PaUtil_SetDebugPrintFunction @55 PaWasapi_GetDeviceDefaultFormat @56 PaWasapi_GetDeviceRole @57 Modified: trunk/OpenMPT/include/portaudio/cmake_support/options_cmake.h.in =================================================================== --- trunk/OpenMPT/include/portaudio/cmake_support/options_cmake.h.in 2013-09-14 16:16:13 UTC (rev 2705) +++ trunk/OpenMPT/include/portaudio/cmake_support/options_cmake.h.in 2013-09-14 16:24:56 UTC (rev 2706) @@ -21,11 +21,11 @@ #error "This header needs to be included before pa_hostapi.h!!" #endif -#define PA_USE_ASIO @PA_ENABLE_ASIO@ -#define PA_USE_DS @PA_ENABLE_DSOUND@ -#define PA_USE_WMME @PA_ENABLE_WMME@ -#define PA_USE_WASAPI @PA_ENABLE_WASAPI@ -#define PA_USE_WDMKS @PA_ENABLE_WDMKS@ +#cmakedefine01 PA_USE_ASIO +#cmakedefine01 PA_USE_DS +#cmakedefine01 PA_USE_WMME +#cmakedefine01 PA_USE_WASAPI +#cmakedefine01 PA_USE_WDMKS #else #error "Platform currently not supported by CMake script" #endif Modified: trunk/OpenMPT/include/portaudio/configure =================================================================== --- trunk/OpenMPT/include/portaudio/configure 2013-09-14 16:16:13 UTC (rev 2705) +++ trunk/OpenMPT/include/portaudio/configure 2013-09-14 16:24:56 UTC (rev 2706) @@ -15769,23 +15769,61 @@ LIBS="-framework CoreAudio -framework AudioToolbox -framework AudioUnit -framework Carbon" if test "x$enable_mac_universal" = "xyes" ; then - if [ -d /Developer/SDKs/MacOSX10.5.sdk ] ; then - mac_version_min="-mmacosx-version-min=10.3" - mac_arches="-arch i386 -arch ppc -arch x86_64 -arch ppc64" - mac_sysroot="-isysroot /Developer/SDKs/MacOSX10.5.sdk" - elif [ -d /Developer/SDKs/MacOSX10.6.sdk ] ; then - mac_version_min="-mmacosx-version-min=10.4" - mac_arches="-arch i386 -arch x86_64" - mac_sysroot="-isysroot /Developer/SDKs/MacOSX10.6.sdk" - elif [ -d /Developer/SDKs/MacOSX10.7.sdk ] ; then - mac_version_min="-mmacosx-version-min=10.4" - mac_arches="-arch i386 -arch x86_64" - mac_sysroot="-isysroot /Developer/SDKs/MacOSX10.7.sdk" - else - mac_version_min="-mmacosx-version-min=10.3" - mac_arches="-arch i386 -arch ppc" - mac_sysroot="-isysroot /Developer/SDKs/MacOSX10.4u.sdk" - fi + case "xcodebuild -version | sed -n 's/Xcode \(.*\)/\1/p'" in + + 12*|3.0|3.1) + 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 + ;; + + *) + 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`" + else + as_fn_error $? "Couldn't find 10.5, 10.6, or 10.7 SDK" "$LINENO" 5 + fi + esac + + mac_arches="" + for arch in i386 x86_64 ppc ppc64 + do + save_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS -arch $arch" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ +return 0; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + + if [ -z "$mac_arches" ] ; then + mac_arches="-arch $arch" + else + mac_arches="$mac_arches -arch $arch" + fi + +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + CFLAGS="$save_CFLAGS" + done else mac_arches="" mac_sysroot="" @@ -15807,7 +15845,7 @@ if [ "x$with_directx" = "xyes" ]; then DXDIR="$with_dxdir" add_objects src/hostapi/dsound/pa_win_ds.o src/hostapi/dsound/pa_win_ds_dynlink.o src/os/win/pa_win_hostapis.o src/os/win/pa_win_util.o src/os/win/pa_win_coinitialize.o src/os/win/pa_win_waveformat.o - LIBS="-lwinmm -lm -ldsound -lole32" + LIBS="${LIBS} -lwinmm -lm -ldsound -lole32" DLL_LIBS="${DLL_LIBS} -lwinmm -lm -L$DXDIR/lib -ldsound -lole32" #VC98="\"/c/Program Files/Microsoft Visual Studio/VC98/Include\"" #CFLAGS="$CFLAGS -I$VC98 -DPA_NO_WMME -DPA_NO_ASIO" @@ -15817,7 +15855,7 @@ if [ "x$with_asio" = "xyes" ]; then ASIODIR="$with_asiodir" add_objects src/hostapi/asio/pa_asio.o src/common/pa_ringbuffer.o src/os/win/pa_win_hostapis.o src/os/win/pa_win_util.o src/os/win/pa_win_coinitialize.o src/hostapi/asio/iasiothiscallresolver.o $ASIODIR/common/asio.o $ASIODIR/host/asiodrivers.o $ASIODIR/host/pc/asiolist.o - LIBS="-lwinmm -lm -lole32 -luuid" + 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" @@ -15828,8 +15866,8 @@ if [ "x$with_wdmks" = "xyes" ]; then DXDIR="$with_dxdir" - add_objects src/hostapi/wdmks/pa_win_wdmks.o src/os/win/pa_win_hostapis.o src/os/win/pa_win_util.o - LIBS="-lwinmm -lm -luuid -lsetupapi -lole32" + add_objects src/hostapi/wdmks/pa_win_wdmks.o src/common/pa_ringbuffer.o src/os/win/pa_win_hostapis.o src/os/win/pa_win_util.o src/os/win/pa_win_wdmks_util.o src/os/win/pa_win_waveformat.o + LIBS="${LIBS} -lwinmm -lm -luuid -lsetupapi -lole32" DLL_LIBS="${DLL_LIBS} -lwinmm -lm -L$DXDIR/lib -luuid -lsetupapi -lole32" #VC98="\"/c/Program Files/Microsoft Visual Studio/VC98/Include\"" #CFLAGS="$CFLAGS -I$VC98 -DPA_NO_WMME -DPA_NO_ASIO" @@ -15838,14 +15876,14 @@ if [ "x$with_wmme" = "xyes" ]; then add_objects src/hostapi/wmme/pa_win_wmme.o src/os/win/pa_win_hostapis.o src/os/win/pa_win_util.o src/os/win/pa_win_waveformat.o - LIBS="-lwinmm -lm -lole32 -luuid" + LIBS="${LIBS} -lwinmm -lm -lole32 -luuid" DLL_LIBS="${DLL_LIBS} -lwinmm" CFLAGS="$CFLAGS -UPA_USE_WMME -DPA_USE_WMME=1" fi if [ "x$with_wasapi" = "xyes" ]; then add_objects src/hostapi/wasapi/pa_win_wasapi.o src/common/pa_ringbuffer.o src/os/win/pa_win_hostapis.o src/os/win/pa_win_util.o src/os/win/pa_win_coinitialize.o src/os/win/pa_win_waveformat.o - LIBS="-lwinmm -lm -lole32 -luuid" + LIBS="${LIBS} -lwinmm -lm -lole32 -luuid" DLL_LIBS="${DLL_LIBS} -lwinmm -lole32" CFLAGS="$CFLAGS -I\$(top_srcdir)/src/hostapi/wasapi/mingw-include -UPA_USE_WASAPI -DPA_USE_WASAPI=1" fi Modified: trunk/OpenMPT/include/portaudio/configure.in =================================================================== --- trunk/OpenMPT/include/portaudio/configure.in 2013-09-14 16:16:13 UTC (rev 2705) +++ trunk/OpenMPT/include/portaudio/configure.in 2013-09-14 16:24:56 UTC (rev 2706) @@ -208,23 +208,63 @@ LIBS="-framework CoreAudio -framework AudioToolbox -framework AudioUnit -framework Carbon" if test "x$enable_mac_universal" = "xyes" ; then - if [[ -d /Developer/SDKs/MacOSX10.5.sdk ]] ; then - mac_version_min="-mmacosx-version-min=10.3" - mac_arches="-arch i386 -arch ppc -arch x86_64 -arch ppc64" - mac_sysroot="-isysroot /Developer/SDKs/MacOSX10.5.sdk" - elif [[ -d /Developer/SDKs/MacOSX10.6.sdk ]] ; then - mac_version_min="-mmacosx-version-min=10.4" - mac_arches="-arch i386 -arch x86_64" - mac_sysroot="-isysroot /Developer/SDKs/MacOSX10.6.sdk" - elif [[ -d /Developer/SDKs/MacOSX10.7.sdk ]] ; then - mac_version_min="-mmacosx-version-min=10.4" - mac_arches="-arch i386 -arch x86_64" - mac_sysroot="-isysroot /Developer/SDKs/MacOSX10.7.sdk" - else - mac_version_min="-mmacosx-version-min=10.3" - mac_arches="-arch i386 -arch ppc" - mac_sysroot="-isysroot /Developer/SDKs/MacOSX10.4u.sdk" - fi + 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`" + else + AC_MSG_ERROR([Couldn't find 10.5, 10.6, or 10.7 SDK]) + fi + esac + + dnl Pick which architectures to build for based on what + dnl the compiler supports. + mac_arches="" + for arch in i386 x86_64 ppc ppc64 + do + save_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS -arch $arch" + AC_TRY_COMPILE([], [return 0;], + [ + if [[ -z "$mac_arches" ]] ; then + mac_arches="-arch $arch" + else + mac_arches="$mac_arches -arch $arch" + fi + ]) + CFLAGS="$save_CFLAGS" + done else mac_arches="" mac_sysroot="" @@ -247,7 +287,7 @@ if [[ "x$with_directx" = "xyes" ]]; then DXDIR="$with_dxdir" add_objects src/hostapi/dsound/pa_win_ds.o src/hostapi/dsound/pa_win_ds_dynlink.o src/os/win/pa_win_hostapis.o src/os/win/pa_win_util.o src/os/win/pa_win_coinitialize.o src/os/win/pa_win_waveformat.o - LIBS="-lwinmm -lm -ldsound -lole32" + LIBS="${LIBS} -lwinmm -lm -ldsound -lole32" DLL_LIBS="${DLL_LIBS} -lwinmm -lm -L$DXDIR/lib -ldsound -lole32" #VC98="\"/c/Program Files/Microsoft Visual Studio/VC98/Include\"" #CFLAGS="$CFLAGS -I$VC98 -DPA_NO_WMME -DPA_NO_ASIO" @@ -257,7 +297,7 @@ if [[ "x$with_asio" = "xyes" ]]; then ASIODIR="$with_asiodir" add_objects src/hostapi/asio/pa_asio.o src/common/pa_ringbuffer.o src/os/win/pa_win_hostapis.o src/os/win/pa_win_util.o src/os/win/pa_win_coinitialize.o src/hostapi/asio/iasiothiscallresolver.o $ASIODIR/common/asio.o $ASIODIR/host/asiodrivers.o $ASIODIR/host/pc/asiolist.o - LIBS="-lwinmm -lm -lole32 -luuid" + 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" @@ -272,8 +312,8 @@ if [[ "x$with_wdmks" = "xyes" ]]; then DXDIR="$with_dxdir" - add_objects src/hostapi/wdmks/pa_win_wdmks.o src/os/win/pa_win_hostapis.o src/os/win/pa_win_util.o - LIBS="-lwinmm -lm -luuid -lsetupapi -lole32" + add_objects src/hostapi/wdmks/pa_win_wdmks.o src/common/pa_ringbuffer.o src/os/win/pa_win_hostapis.o src/os/win/pa_win_util.o src/os/win/pa_win_wdmks_util.o src/os/win/pa_win_waveformat.o + LIBS="${LIBS} -lwinmm -lm -luuid -lsetupapi -lole32" DLL_LIBS="${DLL_LIBS} -lwinmm -lm -L$DXDIR/lib -luuid -lsetupapi -lole32" #VC98="\"/c/Program Files/Microsoft Visual Studio/VC98/Include\"" #CFLAGS="$CFLAGS -I$VC98 -DPA_NO_WMME -DPA_NO_ASIO" @@ -282,14 +322,14 @@ if [[ "x$with_wmme" = "xyes" ]]; then add_objects src/hostapi/wmme/pa_win_wmme.o src/os/win/pa_win_hostapis.o src/os/win/pa_win_util.o src/os/win/pa_win_waveformat.o - LIBS="-lwinmm -lm -lole32 -luuid" + LIBS="${LIBS} -lwinmm -lm -lole32 -luuid" DLL_LIBS="${DLL_LIBS} -lwinmm" CFLAGS="$CFLAGS -UPA_USE_WMME -DPA_USE_WMME=1" fi if [[ "x$with_wasapi" = "xyes" ]]; then add_objects src/hostapi/wasapi/pa_win_wasapi.o src/common/pa_ringbuffer.o src/os/win/pa_win_hostapis.o src/os/win/pa_win_util.o src/os/win/pa_win_coinitialize.o src/os/win/pa_win_waveformat.o - LIBS="-lwinmm -lm -lole32 -luuid" + LIBS="${LIBS} -lwinmm -lm -lole32 -luuid" DLL_LIBS="${DLL_LIBS} -lwinmm -lole32" CFLAGS="$CFLAGS -I\$(top_srcdir)/src/hostapi/wasapi/mingw-include -UPA_USE_WASAPI -DPA_USE_WASAPI=1" fi Modified: trunk/OpenMPT/include/portaudio/doc/src/mainpage.dox =================================================================== --- trunk/OpenMPT/include/portaudio/doc/src/mainpage.dox 2013-09-14 16:16:13 UTC (rev 2705) +++ trunk/OpenMPT/include/portaudio/doc/src/mainpage.dox 2013-09-14 16:24:56 UTC (rev 2706) @@ -3,15 +3,15 @@ @section overview Overview -PortAudio is a cross-platform, open-source C language library for real-time audio input and output. The library provides functions that allow your software to acquire and output real-time audio streams from your computer's hardware audio interfaces. It is designed to simplify writing cross-platform audio applications, and also to simplify the development of audio software in general by hiding the complexities of dealing directly with each native audio API. PortAudio is used to implement sound recording, editing and mixing applications, software synthesizers, effects processors, music players, internet telephony applications, software defined radios and more. Supported platforms include MS Windows, Mac OS X and Linux. Third-party language bindings make it possible to call PortAudio from other programming languages including C++, C#, Python, PureBasic, FreePascal and Lazarus. +PortAudio is a cross-platform, open-source C language library for real-time audio input and output. +The library provides functions that allow your software to acquire and output real-time audio streams from your computer's hardware audio interfaces. It is designed to simplify writing cross-platform audio applications, and also to simplify the development of audio software in general by hiding the complexities of dealing directly with each native audio API. PortAudio is used to implement sound recording, editing and mixing applications, software synthesizers, effects processors, music players, internet telephony applications, software defined radios and more. Supported platforms include MS Windows, Mac OS X and Linux. Third-party language bindings make it possible to call PortAudio from other programming languages including @ref java_binding "Java", C++, C#, Python, PureBasic, FreePascal and Lazarus. - @section start_here Start here - @ref api_overview<br> A top-down view of the PortAudio API, its capabilities, functions and data structures -- <a href="http://www.portaudio.com/trac/wiki/TutorialDir/TutorialStart">PortAudio Tutorials</a><br> +- @ref tutorial_start<br> Get started writing code with PortAudio tutorials - @ref examples_src "Examples"<br> @@ -36,8 +36,10 @@ - <a href="http://music.columbia.edu/mailman/listinfo/portaudio/">Our mailing list for users and developers</a><br> -- <a href="http://www.portaudio.com/trac">The PortAudio wiki</a> +- <a href="http://www.assembla.com/spaces/portaudio/wiki">The PortAudio wiki</a> +- @ref java_binding<br> +Documentation for the Java JNI interface to PortAudio @section developer_resources Developer Resources @@ -45,11 +47,11 @@ - @ref srcguide @endif -- <a href="http://www.portaudio.com/trac">Our Trac wiki and issue tracking system</a> +- <a href="http://www.assembla.com/spaces/portaudio/wiki">Our wiki and issue tracking system</a> - <a href="http://www.portaudio.com/docs/proposals/014-StyleGuide.html">Coding 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.portaudio.com/trac/report/3">check out the starter tickets in Trac</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>. @section older_api_versions Older API Versions Index: trunk/OpenMPT/include/portaudio/doc/src/tutorial =================================================================== --- branches/manx/portaudio/include/portaudio/doc/src/tutorial 2013-09-14 16:16:13 UTC (rev 2705) +++ trunk/OpenMPT/include/portaudio/doc/src/tutorial 2013-09-14 16:24:56 UTC (rev 2706) Property changes on: trunk/OpenMPT/include/portaudio/doc/src/tutorial ___________________________________________________________________ Added: tsvn:logminsize ## -0,0 +1 ## +10 \ No newline at end of property Copied: trunk/OpenMPT/include/portaudio/examples/CMakeLists.txt (from rev 2705, branches/manx/portaudio/include/portaudio/examples/CMakeLists.txt) =================================================================== --- trunk/OpenMPT/include/portaudio/examples/CMakeLists.txt (rev 0) +++ trunk/OpenMPT/include/portaudio/examples/CMakeLists.txt 2013-09-14 16:24:56 UTC (rev 2706) @@ -0,0 +1,27 @@ +# Example projects + +MACRO(ADD_EXAMPLE appl_name) + ADD_EXECUTABLE(${appl_name} "${appl_name}.c") + TARGET_LINK_LIBRARIES(${appl_name} portaudio_static) +ENDMACRO(ADD_EXAMPLE) + +MACRO(ADD_EXAMPLE_CPP appl_name) + ADD_EXECUTABLE(${appl_name} "${appl_name}.cpp") + TARGET_LINK_LIBRARIES(${appl_name} portaudio_static) +ENDMACRO(ADD_EXAMPLE_CPP) + +ADD_EXAMPLE(pa_devs) +ADD_EXAMPLE(pa_fuzz) +ADD_EXAMPLE(paex_mono_asio_channel_select) +ADD_EXAMPLE(paex_ocean_shore) +ADD_EXAMPLE(paex_pink) +ADD_EXAMPLE(paex_read_write_wire) +ADD_EXAMPLE(paex_record) +ADD_EXAMPLE(paex_record_file) +ADD_EXAMPLE(paex_saw) +ADD_EXAMPLE(paex_sine) +ADD_EXAMPLE_CPP(paex_sine_c++) +ADD_EXAMPLE(paex_wmme_ac3) +ADD_EXAMPLE(paex_wmme_surround) +ADD_EXAMPLE(paex_write_sine) +ADD_EXAMPLE(paex_write_sine_nonint) Modified: trunk/OpenMPT/include/portaudio/examples/pa_devs.c =================================================================== --- trunk/OpenMPT/include/portaudio/examples/pa_devs.c 2013-09-14 16:16:13 UTC (rev 2705) +++ trunk/OpenMPT/include/portaudio/examples/pa_devs.c 2013-09-14 16:24:56 UTC (rev 2706) @@ -7,7 +7,7 @@ ASIO support. */ /* - * $Id: pa_devs.c 1752 2011-09-08 03:21:55Z philburk $ + * $Id: pa_devs.c 1891 2013-05-05 14:00:02Z rbencina $ * * This program uses the PortAudio Portable Audio Library. * For more information see: http://www.portaudio.com @@ -49,6 +49,8 @@ #include "portaudio.h" #ifdef WIN32 +#include <windows.h> + #if PA_USE_ASIO #include "pa_asio.h" #endif @@ -105,7 +107,12 @@ PaError err; - Pa_Initialize(); + err = Pa_Initialize(); + if( err != paNoError ) + { + printf( "ERROR: Pa_Initialize returned 0x%x\n", err ); + goto error; + } printf( "PortAudio version number = %d\nPortAudio version text = '%s'\n", Pa_GetVersion(), Pa_GetVersionText() ); @@ -157,7 +164,15 @@ printf( " ]\n" ); /* print device info fields */ +#ifdef WIN32 + { /* Use wide char on windows, so we can show UTF-8 encoded device names */ + wchar_t wideName[MAX_PATH]; + MultiByteToWideChar(CP_UTF8, 0, deviceInfo->name, -1, wideName, MAX_PATH-1); + wprintf( L"Name = %s\n", wideName ); + } +#else printf( "Name = %s\n", deviceInfo->name ); +#endif printf( "Host API = %s\n", Pa_GetHostApiInfo( deviceInfo->hostApi )->name ); printf( "Max inputs = %d", deviceInfo->maxInputChannels ); printf( ", Max outputs = %d\n", deviceInfo->maxOutputChannels ); @@ -232,7 +247,6 @@ error: Pa_Terminate(); - fprintf( stderr, "An error occured while using the portaudio stream\n" ); fprintf( stderr, "Error number: %d\n", err ); fprintf( stderr, "Error message: %s\n", Pa_GetErrorText( err ) ); return err; Copied: trunk/OpenMPT/include/portaudio/examples/paex_ocean_shore.c (from rev 2705, branches/manx/portaudio/include/portaudio/examples/paex_ocean_shore.c) =================================================================== --- trunk/OpenMPT/include/portaudio/examples/paex_ocean_shore.c (rev 0) +++ trunk/OpenMPT/include/portaudio/examples/paex_ocean_shore.c 2013-09-14 16:24:56 UTC (rev 2706) @@ -0,0 +1,533 @@ +/** @file paex_ocean_shore.c + @ingroup examples_src + @brief Generate Pink Noise using Gardner method, and make "waves". Provides an example of how to + post stuff to/from the audio callback using lock-free FIFOs implemented by the PA ringbuffer. + + Optimization suggested by James McCartney uses a tree + to select which random value to replace. +<pre> + x x x x x x x x x x x x x x x x + x x x x x x x x + x x x x + x x + x +</pre> + Tree is generated by counting trailing zeros in an increasing index. + When the index is zero, no random number is selected. + + @author Phil Burk http://www.softsynth.com + Robert Bielik +*/ +/* + * $Id: paex_ocean_shore.c 1816 2012-02-22 12:20:26Z robiwan $ + * + * This program uses the PortAudio Portable Audio Library. + * For more information see: http://www.portaudio.com + * Copyright (c) 1999-2000 Ross Bencina and Phil Burk + * + * 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. + */ + +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <math.h> +#include <time.h> + +#include "portaudio.h" +#include "pa_ringbuffer.h" +#include "pa_util.h" + +#define PINK_MAX_RANDOM_ROWS (30) +#define PINK_RANDOM_BITS (24) +#define PINK_RANDOM_SHIFT ((sizeof(long)*8)-PINK_RANDOM_BITS) + +typedef struct +{ + long pink_Rows[PINK_MAX_RANDOM_ROWS]; + long pink_RunningSum; /* Used to optimize summing of generators. */ + int pink_Index; /* Incremented each sample. */ + int pink_IndexMask; /* Index wrapped by ANDing with this mask. */ + float pink_Scalar; /* Used to scale within range of -1.0 to +1.0 */ +} +PinkNoise; + +typedef struct +{ + float bq_b0; + float bq_b1; + float bq_b2; + float bq_a1; + float bq_a2; +} BiQuad; + +typedef enum +{ + State_kAttack, + State_kPreDecay, + State_kDecay, + State_kCnt, +} EnvState; + +typedef struct +{ + PinkNoise wave_left; + PinkNoise wave_right; + + BiQuad wave_bq_coeffs; + float wave_bq_left[2]; + float wave_bq_right[2]; + + EnvState wave_envelope_state; + float wave_envelope_level; + float wave_envelope_max_level; + float wave_pan_left; + float wave_pan_right; + float wave_attack_incr; + float wave_decay_incr; + +} OceanWave; + +/* Prototypes */ +static unsigned long GenerateRandomNumber( void ); +void InitializePinkNoise( PinkNoise *pink, int numRows ); +float GeneratePinkNoise( PinkNoise *pink ); +unsigned GenerateWave( OceanWave* wave, float* output, unsigned noOfFrames); + +/************************************************************/ +/* Calculate pseudo-random 32 bit number based on linear congruential method. */ +static unsigned long GenerateRandomNumber( void ) +{ + /* Change this seed for different random sequences. */ + static unsigned long randSeed = 22222; + randSeed = (randSeed * 196314165) + 907633515; + return randSeed; +} + +/************************************************************/ +/* Setup PinkNoise structure for N rows of generators. */ +void InitializePinkNoise( PinkNoise *pink, int numRows ) +{ + int i; + long pmax; + pink->pink_Index = 0; + pink->pink_IndexMask = (1<<numRows) - 1; + /* Calculate maximum possible signed random value. Extra 1 for white noise always added. */ + pmax = (numRows + 1) * (1<<(PINK_RANDOM_BITS-1)); + pink->pink_Scalar = 1.0f / pmax; + /* Initialize rows. */ + for( i=0; i<numRows; i++ ) pink->pink_Rows[i] = 0; + pink->pink_RunningSum = 0; +} + +/* Generate Pink noise values between -1.0 and +1.0 */ +float GeneratePinkNoise( PinkNoise *pink ) +{ + long newRandom; + long sum; + float output; + /* Increment and mask index. */ + pink->pink_Index = (pink->pink_Index + 1) & pink->pink_IndexMask; + /* If index is zero, don't update any random values. */ + if( pink->pink_Index != 0 ) + { + /* Determine how many trailing zeros in PinkIndex. */ + /* This algorithm will hang if n==0 so test first. */ + int numZeros = 0; + int n = pink->pink_Index; + while( (n & 1) == 0 ) + { + n = n >> 1; + numZeros++; + } + /* Replace the indexed ROWS random value. + * Subtract and add back to RunningSum instead of adding all the random + * values together. Only one changes each time. + */ + pink->pink_RunningSum -= pink->pink_Rows[numZeros]; + newRandom = ((long)GenerateRandomNumber()) >> PINK_RANDOM_SHIFT; + pink->pink_RunningSum += newRandom; + pink->pink_Rows[numZeros] = newRandom; + } + + /* Add extra white noise value. */ + newRandom = ((long)GenerateRandomNumber()) >> PINK_RANDOM_SHIFT; + sum = pink->pink_RunningSum + newRandom; + /* Scale to range of -1.0 to 0.9999. */ + output = pink->pink_Scalar * sum; + return output; +} + +float ProcessBiquad(const BiQuad* coeffs, float* memory, float input) +{ + float w = input - coeffs->bq_a1 * memory[0] - coeffs->bq_a2 * memory[1]; + float out = coeffs->bq_b1 * memory[0] + coeffs->bq_b2 * memory[1] + coeffs->bq_b0 * w; + memory[1] = memory[0]; + memory[0] = w; + return out; +} + +static const float one_over_2Q_LP = 0.3f; +static const float one_over_2Q_HP = 1.0f; + +unsigned GenerateWave( OceanWave* wave, float* output, unsigned noOfFrames ) +{ + unsigned retval=0,i; + float targetLevel, levelIncr, currentLevel; + switch (wave->wave_envelope_state) + { + case State_kAttack: + targetLevel = noOfFrames * wave->wave_attack_incr + wave->wave_envelope_level; + if (targetLevel >= wave->wave_envelope_max_level) + { + /* Go to decay state */ + wave->wave_envelope_state = State_kPreDecay; + targetLevel = wave->wave_envelope_max_level; + } + /* Calculate lowpass biquad coeffs + + alpha = sin(w0)/(2*Q) + + b0 = (1 - cos(w0))/2 + b1 = 1 - cos(w0) + b2 = (1 - cos(w0))/2 + a0 = 1 + alpha + a1 = -2*cos(w0) + a2 = 1 - alpha + + w0 = [0 - pi[ + */ + { + const float w0 = 3.141592654f * targetLevel / wave->wave_envelope_max_level; + const float alpha = sinf(w0) * one_over_2Q_LP; + const float cosw0 = cosf(w0); + const float a0_fact = 1.0f / (1.0f + alpha); + wave->wave_bq_coeffs.bq_b1 = (1.0f - cosw0) * a0_fact; + wave->wave_bq_coeffs.bq_b0 = wave->wave_bq_coeffs.bq_b1 * 0.5f; + wave->wave_bq_coeffs.bq_b2 = wave->wave_bq_coeffs.bq_b0; + wave->wave_bq_coeffs.bq_a2 = (1.0f - alpha) * a0_fact; + wave->wave_bq_coeffs.bq_a1 = -2.0f * cosw0 * a0_fact; + } + break; + + case State_kPreDecay: + /* Reset biquad state */ + memset(wave->wave_bq_left, 0, 2 * sizeof(float)); + memset(wave->wave_bq_right, 0, 2 * sizeof(float)); + wave->wave_envelope_state = State_kDecay; + + /* Deliberate fall-through */ + + case State_kDecay: + targetLevel = noOfFrames * wave->wave_decay_incr + wave->wave_envelope_level; + if (targetLevel < 0.001f) + { + /* < -60 dB, we're done */ + wave->wave_envelope_state = 3; + retval = 1; + } + /* Calculate highpass biquad coeffs + + alpha = sin(w0)/(2*Q) + + b0 = (1 + cos(w0))/2 + b1 = -(1 + cos(w0)) + b2 = (1 + cos(w0))/2 + a0 = 1 + alpha + a1 = -2*cos(w0) + a2 = 1 - alpha + + w0 = [0 - pi/2[ + */ + { + const float v = targetLevel / wave->wave_envelope_max_level; + const float w0 = 1.5707963f * (1.0f - (v*v)); + const float alpha = sinf(w0) * one_over_2Q_HP; + const float cosw0 = cosf(w0); + const float a0_fact = 1.0f / (1.0f + alpha); + wave->wave_bq_coeffs.bq_b1 = (float)(- (1 + cosw0) * a0_fact); + wave->wave_bq_coeffs.bq_b0 = -wave->wave_bq_coeffs.bq_b1 * 0.5f; + wave->wave_bq_coeffs.bq_b2 = wave->wave_bq_coeffs.bq_b0; + wave->wave_bq_coeffs.bq_a2 = (float)((1.0 - alpha) * a0_fact); + wave->wave_bq_coeffs.bq_a1 = (float)(-2.0 * cosw0 * a0_fact); + } + break; + + default: + break; + } + + currentLevel = wave->wave_envelope_level; + wave->wave_envelope_level = targetLevel; + levelIncr = (targetLevel - currentLevel) / noOfFrames; + + for (i = 0; i < noOfFrames; ++i, currentLevel += levelIncr) + { + (*output++) += ProcessBiquad(&wave->wave_bq_coeffs, wave->wave_bq_left, (GeneratePinkNoise(&wave->wave_left))) * currentLevel * wave->wave_pan_left; + (*output++) += ProcessBiquad(&wave->wave_bq_coeffs, wave->wave_bq_right, (GeneratePinkNoise(&wave->wave_right))) * currentLevel * wave->wave_pan_right; + } + + return retval; +} + + +/*******************************************************************/ + +/* Context for callback routine. */ +typedef struct +{ + OceanWave* waves[16]; /* Maximum 16 waves */ + unsigned noOfActiveWaves; + + /* Ring buffer (FIFO) for "communicating" towards audio callback */ + PaUtilRingBuffer rBufToRT; + void* rBufToRTData; + + /* Ring buffer (FIFO) for "communicating" from audio callback */ + PaUtilRingBuffer rBufFromRT; + void* rBufFromRTData; +} +paTestData; + +/* This routine will be called by the PortAudio engine when audio is needed. +** It may called at interrupt level on some machines so don't do anything +** that could mess up the system like calling malloc() or free(). +*/ +static int patestCallback(const void* inputBuffer, + void* outputBuffer, + unsigned long framesPerBuffer, + const PaStreamCallbackTimeInfo* timeInfo, + PaStreamCallbackFlags statusFlags, + void* userData) +{ + int i; + paTestData *data = (paTestData*)userData; + float *out = (float*)outputBuffer; + (void) inputBuffer; /* Prevent "unused variable" warnings. */ + + /* Reset output data first */ + memset(out, 0, framesPerBuffer * 2 * sizeof(float)); + + for (i = 0; i < 16; ++i) + { + /* Consume the input queue */ + if (data->waves[i] == 0 && PaUtil_GetRingBufferReadAvailable(&data->rBufToRT)) + { + OceanWave* ptr = 0; + PaUtil_ReadRingBuffer(&data->rBufToRT, &ptr, 1); + data->waves[i] = ptr; + } + + if (data->waves[i] != 0) + { + if (GenerateWave(data->waves[i], out, framesPerBuffer)) + { + /* If wave is "done", post it back to the main thread for deletion */ + PaUtil_WriteRingBuffer(&data->rBufFromRT, &data->waves[i], 1); + data->waves[i] = 0; + } + } + } + return paContinue; +} + +#define NEW_ROW_SIZE (12 + (8*rand())/RAND_MAX) + +OceanWave* InitializeWave(double SR, float attackInSeconds, float maxLevel, float positionLeftRight) +{ + OceanWave* wave = NULL; + static unsigned lastNoOfRows = 12; + unsigned newNoOfRows; + + wave = (OceanWave*)PaUtil_AllocateMemory(sizeof(OceanWave)); + if (wave != NULL) + { + InitializePinkNoise(&wave->wave_left, lastNoOfRows); + while ((newNoOfRows = NEW_ROW_SIZE) == lastNoOfRows); + InitializePinkNoise(&wave->wave_right, newNoOfRows); + lastNoOfRows = newNoOfRows; + + wave->wave_envelope_state = State_kAttack; + wave->wave_envelope_level = 0.f; + wave->wave_envelope_max_level = maxLevel; + wave->wave_attack_incr = wave->wave_envelope_max_level / (attackInSeconds * (float)SR); + wave->wave_decay_incr = - wave->wave_envelope_max_level / (attackInSeconds * 4 * (float)SR); + + wave->wave_pan_left = sqrtf(1.0 - positionLeftRight); + wave->wave_pan_right = sqrtf(positionLeftRight); + } + return wave; +} + +static float GenerateFloatRandom(float minValue, float maxValue) +{ + return minValue + ((maxValue - minValue) * rand()) / RAND_MAX; +} + +/*******************************************************************/ +int main(void); +int main(void) +{ + PaStream* stream; + PaError err; + paTestData data = {0}; + PaStreamParameters outputParameters; + double tstamp; + double tstart; + double tdelta = 0; + static const double SR = 44100.0; + static const int FPB = 128; /* Frames per buffer: 2.9 ms buffers. */ + + /* Initialize communication buffers (queues) */ + data.rBufToRTData = PaUtil_AllocateMemory(sizeof(OceanWave*) * 256); + if (data.rBufToRTData == NULL) + { + return 1; + } + PaUtil_InitializeRingBuffer(&data.rBufToRT, sizeof(OceanWave*), 256, data.rBufToRTData); + + data.rBufFromRTData = PaUtil_AllocateMemory(sizeof(OceanWave*) * 256); + if (data.rBufFromRTData == NULL) + { + return 1; + } + PaUtil_InitializeRingBuffer(&data.rBufFromRT, sizeof(OceanWave*), 256, data.rBufFromRTData); + + err = Pa_Initialize(); + if( err != paNoError ) goto error; + + /* Open a stereo PortAudio stream so we can hear the result. */ + outputParameters.device = Pa_GetDefaultOutputDevice(); /* Take the default output device. */ + if (outputParameters.device == paNoDevice) { + fprintf(stderr,"Error: No default output device.\n"); + goto error; + } + outputParameters.channelCount = 2; /* Stereo output, most likely supported. */ + outputParameters.hostApiSpecificStreamInfo = NULL; + outputParameters.sampleFormat = paFloat32; /* 32 bit floating point output. */ + outputParameters.suggestedLatency = Pa_GetDeviceInfo(outputParameters.device)->defaultLowOutputLatency; + err = Pa_OpenStream(&stream, + NULL, /* No input. */ + &outputParameters, + SR, /* Sample rate. */ + FPB, /* Frames per buffer. */ + paDitherOff, /* Clip but don't dither */ + patestCallback, + &data); + if( err != paNoError ) goto error; + + err = Pa_StartStream( stream ); + if( err != paNoError ) goto error; + + printf("Stereo \"ocean waves\" for one minute...\n"); + + tstart = PaUtil_GetTime(); + tstamp = tstart; + srand( (unsigned)time(NULL) ); + + while( ( err = Pa_IsStreamActive( stream ) ) == 1 ) + { + const double tcurrent = PaUtil_GetTime(); + + /* Delete "waves" that the callback is finished with */ + while (PaUtil_GetRingBufferReadAvailable(&data.rBufFromRT) > 0) + { + OceanWave* ptr = 0; + PaUtil_ReadRingBuffer(&data.rBufFromRT, &ptr, 1); + if (ptr != 0) + { + printf("Wave is deleted...\n"); + PaUtil_FreeMemory(ptr); + --data.noOfActiveWaves; + } + } + + if (tcurrent - tstart < 60.0) /* Only start new "waves" during one minute */ + { + if (tcurrent >= tstamp) + { + double tdelta = GenerateFloatRandom(1.0f, 4.0f); + tstamp += tdelta; + + if (data.noOfActiveWaves<16) + { + const float attackTime = GenerateFloatRandom(2.0f, 6.0f); + const float level = GenerateFloatRandom(0.1f, 1.0f); + const float pos = GenerateFloatRandom(0.0f, 1.0f); + OceanWave* p = InitializeWave(SR, attackTime, level, pos); + if (p != NULL) + { + /* Post wave to audio callback */ + PaUtil_WriteRingBuffer(&data.rBufToRT, &p, 1); + ++data.noOfActiveWaves; + + printf("Starting wave at level = %.2f, attack = %.2lf, pos = %.2lf\n", level, attackTime, pos); + } + } + } + } + else + { + if (data.noOfActiveWaves == 0) + { + printf("All waves finished!\n"); + break; + } + } + + Pa_Sleep(100); + } + if( err < 0 ) goto error; + + err = Pa_CloseStream( stream ); + if( err != paNoError ) goto error; + + if (data.rBufToRTData) + { + PaUtil_FreeMemory(data.rBufToRTData); + } + if (data.rBufFromRTData) + { + PaUtil_FreeMemory(data.rBufFromRTData); + } + + Pa_Sleep(1000); + + Pa_Terminate(); + return 0; + +e... [truncated message content] |