mirror of
https://github.com/thestk/stk
synced 2026-01-15 05:51:52 +00:00
Compare commits
32 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
6aacd357d7 | ||
|
|
0d4bb84732 | ||
|
|
270edc855f | ||
|
|
d7d6079f6b | ||
|
|
cea6f547d2 | ||
|
|
212950d364 | ||
|
|
aeaef391ef | ||
|
|
d0345712db | ||
|
|
1cb2c81d04 | ||
|
|
b671638f99 | ||
|
|
169b005a2d | ||
|
|
73008d02a1 | ||
|
|
e364d81c8f | ||
|
|
3675846c66 | ||
|
|
fd5e37863d | ||
|
|
7f97ab5f71 | ||
|
|
8b29e0ea6d | ||
|
|
2af2f1c816 | ||
|
|
f39c1fb06d | ||
|
|
35ca4abcb9 | ||
|
|
cc2dd22e97 | ||
|
|
e0279e305b | ||
|
|
ce765cc391 | ||
|
|
9bf39f53c6 | ||
|
|
4397e05158 | ||
|
|
70835eccb4 | ||
|
|
79334d2c8d | ||
|
|
16918b0914 | ||
|
|
3acb9502ae | ||
|
|
92d81d67c2 | ||
|
|
893ff3d954 | ||
|
|
b343913233 |
@@ -1,6 +1,7 @@
|
|||||||
cmake_minimum_required(VERSION 3.1) ##TODO: which version is better
|
cmake_minimum_required(VERSION 3.1) ##TODO: which version is better
|
||||||
|
|
||||||
project(STK VERSION 4.6.1)
|
project(STK VERSION 4.6.1)
|
||||||
|
set (CMAKE_CXX_STANDARD 11)
|
||||||
|
|
||||||
set(CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/cmake ${CMAKE_MODULE_PATH})
|
set(CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/cmake ${CMAKE_MODULE_PATH})
|
||||||
|
|
||||||
@@ -10,8 +11,13 @@ endif()
|
|||||||
SET_PROPERTY(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS "Release" "Debug" "RelWithDebInfo" "MinSizeRel")
|
SET_PROPERTY(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS "Release" "Debug" "RelWithDebInfo" "MinSizeRel")
|
||||||
message("Build type: " ${CMAKE_BUILD_TYPE})
|
message("Build type: " ${CMAKE_BUILD_TYPE})
|
||||||
|
|
||||||
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -O3 -DNDEBUG")
|
if(MSVC)
|
||||||
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -g -D_STK_DEBUG_ -D__RTAUDIO_DEBUG__ -D__RTMIDI_DEBUG__")
|
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /O2 /DNDEBUG")
|
||||||
|
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /Z7 /Ob0 /Od /RTC1 /D_ITERATOR_DEBUG_LEVEL=2 /D_STK_DEBUG_ /D__RTAUDIO_DEBUG__ /D__RTMIDI_DEBUG__")
|
||||||
|
else()
|
||||||
|
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -O3 -DNDEBUG")
|
||||||
|
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -g -D_STK_DEBUG_ -D__RTAUDIO_DEBUG__ -D__RTMIDI_DEBUG__")
|
||||||
|
endif()
|
||||||
|
|
||||||
if(${CMAKE_CXX_COMPILER_ID} STREQUAL GNU)
|
if(${CMAKE_CXX_COMPILER_ID} STREQUAL GNU)
|
||||||
message("GCC.")
|
message("GCC.")
|
||||||
@@ -29,6 +35,7 @@ option(ENABLE_DS "Enable DirectSound API support (windows only)" ON)
|
|||||||
option(ENABLE_WASAPI "Enable Windows Audio Session API support (windows only)" OFF)
|
option(ENABLE_WASAPI "Enable Windows Audio Session API support (windows only)" OFF)
|
||||||
# option(ENABLE_CORE "Enable CoreAudio API support (mac only)" ON)
|
# option(ENABLE_CORE "Enable CoreAudio API support (mac only)" ON)
|
||||||
option(COMPILE_PROJECTS "Compile all the example projects" ON)
|
option(COMPILE_PROJECTS "Compile all the example projects" ON)
|
||||||
|
option(INSTALL_HEADERS "Install headers" ON)
|
||||||
|
|
||||||
include_directories("./include")
|
include_directories("./include")
|
||||||
file(GLOB STK_SRC "./src/*.cpp") # GLOB instead of GLOB_RECURSE as the asio depends on system
|
file(GLOB STK_SRC "./src/*.cpp") # GLOB instead of GLOB_RECURSE as the asio depends on system
|
||||||
@@ -38,13 +45,54 @@ file(GLOB STK_SRC "./src/*.cpp") # GLOB instead of GLOB_RECURSE as the asio depe
|
|||||||
#========================================#
|
#========================================#
|
||||||
if(REALTIME)
|
if(REALTIME)
|
||||||
if(ENABLE_JACK)
|
if(ENABLE_JACK)
|
||||||
find_library(JACK_LIBRARY jack) # find_package(JACK) # TODO: NEED FindJACK.cmake
|
# Try to find PkgConfig
|
||||||
if(JACK_LIBRARY)
|
find_package(PkgConfig QUIET)
|
||||||
message("Jack API found: ${JACK_LIBRARY}")
|
|
||||||
link_libraries(${JACK_LIBRARY})
|
if(PkgConfig_FOUND)
|
||||||
|
# PkgConfig is available, use it
|
||||||
|
pkg_check_modules(JACK QUIET jack)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if(NOT JACK_FOUND)
|
||||||
|
# PkgConfig was not found or Jack was not found through it, try a fallback
|
||||||
|
message(STATUS "PkgConfig not found or failed to find Jack, attempting fallback")
|
||||||
|
|
||||||
|
# Fallback: Search in common locations
|
||||||
|
find_path(JACK_INCLUDE_DIR
|
||||||
|
NAMES jack/jack.h
|
||||||
|
HINTS
|
||||||
|
ENV JACK_ROOT
|
||||||
|
"$ENV{ProgramFiles}/Jack"
|
||||||
|
/usr/local/include
|
||||||
|
/usr/include
|
||||||
|
)
|
||||||
|
|
||||||
|
find_library(JACK_LIBRARY
|
||||||
|
NAMES jack
|
||||||
|
HINTS
|
||||||
|
ENV JACK_ROOT
|
||||||
|
"$ENV{ProgramFiles}/Jack"
|
||||||
|
/usr/local/lib
|
||||||
|
/usr/lib
|
||||||
|
)
|
||||||
|
|
||||||
|
# Check if the fallback was successful
|
||||||
|
if(JACK_INCLUDE_DIR AND JACK_LIBRARY)
|
||||||
|
set(JACK_FOUND TRUE)
|
||||||
|
set(JACK_INCLUDE_DIRS ${JACK_INCLUDE_DIR})
|
||||||
|
set(JACK_LIBRARIES ${JACK_LIBRARY})
|
||||||
|
message(STATUS "Found Jack (fallback):")
|
||||||
|
message(STATUS " Includes: ${JACK_INCLUDE_DIRS}")
|
||||||
|
message(STATUS " Libraries: ${JACK_LIBRARIES}")
|
||||||
|
else()
|
||||||
|
message(WARNING "Failed to find Jack library even with fallback. Please install Jack development package or ensure it is in a standard location.")
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if(JACK_FOUND)
|
||||||
|
include_directories(${JACK_INCLUDE_DIRS})
|
||||||
|
link_libraries(${JACK_LIBRARIES})
|
||||||
add_definitions(-D__UNIX_JACK__)
|
add_definitions(-D__UNIX_JACK__)
|
||||||
else()
|
|
||||||
message(WARNING "JACK support requires the jack library!")
|
|
||||||
endif()
|
endif()
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
@@ -77,7 +125,6 @@ if(REALTIME)
|
|||||||
# Tested under MSYS2 with Mingw64 toolchain
|
# Tested under MSYS2 with Mingw64 toolchain
|
||||||
#============== WINDOWS ================#
|
#============== WINDOWS ================#
|
||||||
message("Windows DETECTED!")
|
message("Windows DETECTED!")
|
||||||
|
|
||||||
link_libraries(winmm ole32 wsock32)
|
link_libraries(winmm ole32 wsock32)
|
||||||
add_definitions(-D__WINDOWS_MM__)
|
add_definitions(-D__WINDOWS_MM__)
|
||||||
|
|
||||||
@@ -112,17 +159,27 @@ TEST_BIG_ENDIAN(IS_BIG_ENDIAN)
|
|||||||
if(NOT IS_BIG_ENDIAN)
|
if(NOT IS_BIG_ENDIAN)
|
||||||
add_definitions(-D__LITTLE_ENDIAN__)
|
add_definitions(-D__LITTLE_ENDIAN__)
|
||||||
endif()
|
endif()
|
||||||
|
add_definitions(-D_USE_MATH_DEFINES)
|
||||||
|
if(INSTALL_HEADERS)
|
||||||
|
file(GLOB STK_HEADERS "include/*.h")
|
||||||
|
install(FILES ${STK_HEADERS} DESTINATION include/stk)
|
||||||
|
endif()
|
||||||
#========================================#
|
#========================================#
|
||||||
#========== Build the Library ===========#
|
#========== Build the Library ===========#
|
||||||
#========================================#
|
#========================================#
|
||||||
if(BUILD_STATIC)
|
if(BUILD_STATIC)
|
||||||
add_library(stk STATIC ${STK_SRC} )
|
add_library(stk STATIC ${STK_SRC} )
|
||||||
|
target_include_directories(stk PRIVATE include PUBLIC $<INSTALL_INTERFACE:include>)
|
||||||
|
set_target_properties(stk PROPERTIES PUBLIC_HEADER "${LIBSTK_HEADERS}")
|
||||||
|
list(APPEND STK_TARGETS stk)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if(BUILD_SHARED)
|
if(BUILD_SHARED)
|
||||||
add_library(stk_SHARED SHARED ${STK_SRC})
|
add_library(stk_SHARED SHARED ${STK_SRC})
|
||||||
set_target_properties(stk_SHARED PROPERTIES OUTPUT_NAME stk) # rename the shared library name
|
set_target_properties(stk_SHARED PROPERTIES OUTPUT_NAME stk) # rename the shared library name
|
||||||
|
target_include_directories(stk_SHARED PRIVATE include PUBLIC $<INSTALL_INTERFACE:include>)
|
||||||
|
set_target_properties(stk_SHARED PROPERTIES PUBLIC_HEADER "${LIBSTK_HEADERS}")
|
||||||
|
list(APPEND STK_TARGETS stk_SHARED)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
#========================================#
|
#========================================#
|
||||||
@@ -135,4 +192,16 @@ if(COMPILE_PROJECTS)
|
|||||||
add_subdirectory(projects/demo)
|
add_subdirectory(projects/demo)
|
||||||
add_subdirectory(projects/effects)
|
add_subdirectory(projects/effects)
|
||||||
add_subdirectory(projects/ragamatic)
|
add_subdirectory(projects/ragamatic)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
#========================================#
|
||||||
|
#========= Install ======================#
|
||||||
|
#========================================#
|
||||||
|
|
||||||
|
install(TARGETS ${STK_TARGETS} EXPORT stk-config
|
||||||
|
LIBRARY DESTINATION lib
|
||||||
|
ARCHIVE DESTINATION lib
|
||||||
|
RUNTIME DESTINATION bin
|
||||||
|
PUBLIC_HEADER DESTINATION include/stk)
|
||||||
|
|
||||||
|
install(EXPORT stk-config DESTINATION lib/cmake/stk)
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
# The Synthesis ToolKit in C++ (STK)
|
# The Synthesis ToolKit in C++ (STK)
|
||||||
By Perry R. Cook and Gary P. Scavone, 1995-2021.
|
By Perry R. Cook and Gary P. Scavone, 1995-2023.
|
||||||
|
|
||||||
The Synthesis ToolKit in C++ can be used in a variety of ways, depending on your particular needs. Some people simply choose the classes they need for a particular project and copy those to their project directory. Others like to compile and link to a library of object files. STK was not designed with one particular style of use in mind.
|
The Synthesis ToolKit in C++ can be used in a variety of ways, depending on your particular needs. Some people simply choose the classes they need for a particular project and copy those to their project directory. Others like to compile and link to a library of object files. STK was not designed with one particular style of use in mind.
|
||||||
|
|
||||||
|
|||||||
2
LICENSE
2
LICENSE
@@ -1,6 +1,6 @@
|
|||||||
The Synthesis ToolKit in C++ (STK)
|
The Synthesis ToolKit in C++ (STK)
|
||||||
|
|
||||||
Copyright (c) 1995-2021 Perry R. Cook and Gary P. Scavone
|
Copyright (c) 1995-2023 Perry R. Cook and Gary P. Scavone
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining
|
Permission is hereby granted, free of charge, to any person obtaining
|
||||||
a copy of this software and associated documentation files (the
|
a copy of this software and associated documentation files (the
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
# The Synthesis ToolKit in C++ (STK)
|
# The Synthesis ToolKit in C++ (STK)
|
||||||
By Perry R. Cook and Gary P. Scavone, 1995--2021.
|
By Perry R. Cook and Gary P. Scavone, 1995--2023.
|
||||||
|
|
||||||
This distribution of the Synthesis ToolKit in C++ (STK) contains the following:
|
This distribution of the Synthesis ToolKit in C++ (STK) contains the following:
|
||||||
|
|
||||||
|
|||||||
16
configure.ac
16
configure.ac
@@ -1,5 +1,5 @@
|
|||||||
# Process this file with autoconf to produce a configure script.
|
# Process this file with autoconf to produce a configure script.
|
||||||
AC_INIT(STK, 4.6.2, gary.scavone@mcgill.ca, stk)
|
AC_INIT([STK],[5.0.0],[gary.scavone@mcgill.ca],[stk])
|
||||||
AC_CONFIG_AUX_DIR(config)
|
AC_CONFIG_AUX_DIR(config)
|
||||||
AC_CONFIG_SRCDIR(src/Stk.cpp)
|
AC_CONFIG_SRCDIR(src/Stk.cpp)
|
||||||
AC_CONFIG_FILES(Makefile src/Makefile projects/demo/Makefile projects/effects/Makefile projects/ragamatic/Makefile projects/examples/Makefile projects/examples/libMakefile projects/eguitar/Makefile)
|
AC_CONFIG_FILES(Makefile src/Makefile projects/demo/Makefile projects/effects/Makefile projects/ragamatic/Makefile projects/examples/Makefile projects/examples/libMakefile projects/eguitar/Makefile)
|
||||||
@@ -20,13 +20,15 @@ if [[ $AR = "no" ]] ; then
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
# Checks for header files.
|
# Checks for header files.
|
||||||
AC_HEADER_STDC
|
AC_CHECK_INCLUDES_DEFAULT
|
||||||
|
AC_PROG_EGREP
|
||||||
|
|
||||||
AC_CHECK_HEADERS(fcntl.h sys/ioctl.h sys/time.h termio.h unistd.h)
|
AC_CHECK_HEADERS(fcntl.h sys/ioctl.h sys/time.h termio.h unistd.h)
|
||||||
|
|
||||||
# Checks for typedefs, structures, and compiler characteristics.
|
# Checks for typedefs, structures, and compiler characteristics.
|
||||||
AC_C_CONST
|
AC_C_CONST
|
||||||
AC_TYPE_SIZE_T
|
AC_TYPE_SIZE_T
|
||||||
AC_HEADER_TIME
|
|
||||||
AC_C_BIGENDIAN
|
AC_C_BIGENDIAN
|
||||||
AC_EGREP_CPP(yes,
|
AC_EGREP_CPP(yes,
|
||||||
[#ifndef WORDS_BIGENDIAN
|
[#ifndef WORDS_BIGENDIAN
|
||||||
@@ -162,6 +164,14 @@ api="$api -D__UNIX_JACK__"
|
|||||||
AC_MSG_RESULT(using ALSA)
|
AC_MSG_RESULT(using ALSA)
|
||||||
AC_CHECK_LIB(asound, snd_pcm_open, , AC_MSG_ERROR(ALSA support requires the asound library!))])
|
AC_CHECK_LIB(asound, snd_pcm_open, , AC_MSG_ERROR(ALSA support requires the asound library!))])
|
||||||
|
|
||||||
|
# Look for PulseAudio flag
|
||||||
|
AC_ARG_WITH(pulse, [ --with-pulse = choose PulseAudio support (linux only)])
|
||||||
|
AS_IF([test "x$with_pulse" == "xyes"], [
|
||||||
|
api="$api -D__LINUX_PULSE__"
|
||||||
|
AC_MSG_RESULT(using PulseAudio)
|
||||||
|
AC_CHECK_LIB(pulse, pa_proplist_gets, , AC_MSG_ERROR(PulseAudio support requires the libpulse library!))
|
||||||
|
AC_CHECK_LIB(pulse-simple, pa_simple_new, , AC_MSG_ERROR(PulseAudio support requires the libpulse-simple library!))])
|
||||||
|
|
||||||
# Look for OSS flag
|
# Look for OSS flag
|
||||||
AC_ARG_WITH(oss, [ --with-oss = choose OSS API support (unixes only)])
|
AC_ARG_WITH(oss, [ --with-oss = choose OSS API support (unixes only)])
|
||||||
AS_IF([test "x$with_oss" == "xyes"], [
|
AS_IF([test "x$with_oss" == "xyes"], [
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
The Synthesis ToolKit in C++ (STK)
|
The Synthesis ToolKit in C++ (STK)
|
||||||
|
|
||||||
By Perry R. Cook and Gary P. Scavone, 1995--2021.
|
By Perry R. Cook and Gary P. Scavone, 1995--2023.
|
||||||
|
|
||||||
Please read the file README and INSTALL for more general STK information.
|
Please read the file README and INSTALL for more general STK information.
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
The Synthesis ToolKit in C++ (STK)
|
The Synthesis ToolKit in C++ (STK)
|
||||||
|
|
||||||
By Perry R. Cook and Gary P. Scavone, 1995--2021.
|
By Perry R. Cook and Gary P. Scavone, 1995--2023.
|
||||||
|
|
||||||
Please read the file README and INSTALL for more general STK information.
|
Please read the file README and INSTALL for more general STK information.
|
||||||
|
|
||||||
@@ -10,7 +10,7 @@ It is necessary to install the OS X developer kit (or the command line tools) in
|
|||||||
|
|
||||||
Tcl/Tk on OS X:
|
Tcl/Tk on OS X:
|
||||||
|
|
||||||
I think that Tcl/Tk interpreter is now included in the Xcode package, since I haven't had to download it for several years now.
|
The Tcl/Tk interpreter included in the Xcode package seems outdated. Try getting tcl-tk through HomeBrew for an updated version.
|
||||||
|
|
||||||
It appears that socket support in Tcl/Tk on OS X uses the Nagle algorithm, which produces poor response between changes made in the Tcl/Tk script and the resulting audio updates. Note that this is only a problem when using a socket connection from a Tcl/Tk script.
|
It appears that socket support in Tcl/Tk on OS X uses the Nagle algorithm, which produces poor response between changes made in the Tcl/Tk script and the resulting audio updates. Note that this is only a problem when using a socket connection from a Tcl/Tk script.
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
The Synthesis ToolKit in C++ (STK)
|
The Synthesis ToolKit in C++ (STK)
|
||||||
|
|
||||||
By Perry R. Cook and Gary P. Scavone, 1995--2021.
|
By Perry R. Cook and Gary P. Scavone, 1995--2023.
|
||||||
|
|
||||||
Please read the file README and INSTALL for more general STK information.
|
Please read the file README and INSTALL for more general STK information.
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
The Synthesis ToolKit in C++ (STK)
|
The Synthesis ToolKit in C++ (STK)
|
||||||
|
|
||||||
By Perry R. Cook and Gary P. Scavone, 1995--2021.
|
By Perry R. Cook and Gary P. Scavone, 1995--2023.
|
||||||
|
|
||||||
Please read the file README.md for more general STK information.
|
Please read the file README.md for more general STK information.
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,17 @@
|
|||||||
The Synthesis ToolKit in C++ (STK)
|
The Synthesis ToolKit in C++ (STK)
|
||||||
|
|
||||||
By Perry R. Cook and Gary P. Scavone, 1995--2021.
|
By Perry R. Cook and Gary P. Scavone, 1995--2023.
|
||||||
|
|
||||||
|
v.5.0.1 (10 August 2023)
|
||||||
|
- see github site for complete details (github.com/thestk/stk)
|
||||||
|
- cmake updates
|
||||||
|
- fix for demo msvc project in Windows
|
||||||
|
|
||||||
|
v.5.0.0 (4 August 2023)
|
||||||
|
- see github site for complete details (github.com/thestk/stk)
|
||||||
|
- new filter design functionality in BiQuad (thanks to Navin Kumar!)
|
||||||
|
- update to PitShift to use a single delay line
|
||||||
|
- various updates for new RtAudio API
|
||||||
|
|
||||||
v.4.6.2 (17 November 2021)
|
v.4.6.2 (17 November 2021)
|
||||||
- see github site for complete details (github.com/thestk/stk)
|
- see github site for complete details (github.com/thestk/stk)
|
||||||
|
|||||||
3105
doc/doxygen/Doxyfile
3105
doc/doxygen/Doxyfile
File diff suppressed because it is too large
Load Diff
@@ -1,10 +1,21 @@
|
|||||||
/*! \page download Download and Release Notes
|
/*! \page download Download and Release Notes
|
||||||
|
|
||||||
\section down Download Version 4.6.2 (17 November 2021):
|
\section down Download Version 5.0.1 (10 August 2023):
|
||||||
|
|
||||||
- <A HREF="http://ccrma.stanford.edu/software/stk/release/stk-4.6.2.tar.gz">Source distribution</A>
|
- <A HREF="http://ccrma.stanford.edu/software/stk/release/stk-5.0.1.tar.gz">Source distribution</A>
|
||||||
|
|
||||||
\section notes Release Notes:
|
\section notes Release Notes:
|
||||||
|
\subsection v5dot0dot1 Version 5.0.1
|
||||||
|
- see github site for complete details (github.com/thestk/stk)
|
||||||
|
- cmake updates
|
||||||
|
- fix for demo msvc project in Windows
|
||||||
|
|
||||||
|
\subsection v5dot0dot0 Version 5.0.0
|
||||||
|
- see github site for complete details (github.com/thestk/stk)
|
||||||
|
- new filter design functionality in BiQuad (thanks to Navin Kumar!)
|
||||||
|
- update to PitShift to use a single delay line
|
||||||
|
- various updates for new RtAudio API
|
||||||
|
|
||||||
\subsection v4dot6dot2 Version 4.6.2
|
\subsection v4dot6dot2 Version 4.6.2
|
||||||
- see github site for complete details (github.com/thestk/stk)
|
- see github site for complete details (github.com/thestk/stk)
|
||||||
- bug fixes in LentPitShift and Granulate classes
|
- bug fixes in LentPitShift and Granulate classes
|
||||||
|
|||||||
@@ -25,7 +25,7 @@ STK GitHub site: https://github.com/thestk/stk
|
|||||||
STK WWW site: http://ccrma.stanford.edu/software/stk/
|
STK WWW site: http://ccrma.stanford.edu/software/stk/
|
||||||
|
|
||||||
The Synthesis ToolKit in C++ (STK)
|
The Synthesis ToolKit in C++ (STK)
|
||||||
Copyright (c) 1995--2021 Perry R. Cook and Gary P. Scavone
|
Copyright (c) 1995--2023 Perry R. Cook and Gary P. Scavone
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining
|
Permission is hereby granted, free of charge, to any person obtaining
|
||||||
a copy of this software and associated documentation files (the
|
a copy of this software and associated documentation files (the
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
<table>
|
<table>
|
||||||
<tr><td><A HREF="http://ccrma.stanford.edu/software/stk/"><I>The Synthesis ToolKit in C++ (STK)</I></A></td></tr>
|
<tr><td><A HREF="http://ccrma.stanford.edu/software/stk/"><I>The Synthesis ToolKit in C++ (STK)</I></A></td></tr>
|
||||||
<tr><td>©1995--2021 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr>
|
<tr><td>©1995--2023 Perry R. Cook and Gary P. Scavone. All Rights Reserved.</td></tr>
|
||||||
</table>
|
</table>
|
||||||
|
|
||||||
</BODY>
|
</BODY>
|
||||||
|
|||||||
@@ -30,6 +30,7 @@ platforms and should work with any standard C++ compiler.
|
|||||||
- \ref links
|
- \ref links
|
||||||
- \ref faq
|
- \ref faq
|
||||||
- \ref tutorial
|
- \ref tutorial
|
||||||
|
- <A href="http://github.com/thestk/stk">Stk on GitHub</A>
|
||||||
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
STK: A ToolKit of Audio Synthesis Classes and Instruments in C++
|
STK: A ToolKit of Audio Synthesis Classes and Instruments in C++
|
||||||
|
|
||||||
By Perry R. Cook and Gary P. Scavone, 1995--2021.
|
By Perry R. Cook and Gary P. Scavone, 1995--2023.
|
||||||
|
|
||||||
STK Classes - See the HTML documentation in the html directory for complete information.
|
STK Classes - See the HTML documentation in the html directory for complete information.
|
||||||
|
|
||||||
|
|||||||
BIN
doc/html/ccrma.gif
Normal file
BIN
doc/html/ccrma.gif
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 8.1 KiB |
BIN
doc/html/mcgill.gif
Normal file
BIN
doc/html/mcgill.gif
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 3.7 KiB |
BIN
doc/html/princeton.gif
Normal file
BIN
doc/html/princeton.gif
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 5.3 KiB |
@@ -17,7 +17,7 @@ namespace stk {
|
|||||||
be non-negative. All time settings are in seconds and must be
|
be non-negative. All time settings are in seconds and must be
|
||||||
positive.
|
positive.
|
||||||
|
|
||||||
by Perry R. Cook and Gary P. Scavone, 1995--2021.
|
by Perry R. Cook and Gary P. Scavone, 1995--2023.
|
||||||
*/
|
*/
|
||||||
/***************************************************/
|
/***************************************************/
|
||||||
|
|
||||||
|
|||||||
@@ -26,7 +26,7 @@ namespace stk {
|
|||||||
to \e keyOn and \e keyOff messages by ramping to
|
to \e keyOn and \e keyOff messages by ramping to
|
||||||
1.0 on keyOn and to 0.0 on keyOff.
|
1.0 on keyOn and to 0.0 on keyOff.
|
||||||
|
|
||||||
by Perry R. Cook and Gary P. Scavone, 1995--2021.
|
by Perry R. Cook and Gary P. Scavone, 1995--2023.
|
||||||
*/
|
*/
|
||||||
/***************************************************/
|
/***************************************************/
|
||||||
|
|
||||||
|
|||||||
@@ -35,7 +35,7 @@ namespace stk {
|
|||||||
type who should worry about this (making
|
type who should worry about this (making
|
||||||
money) worry away.
|
money) worry away.
|
||||||
|
|
||||||
by Perry R. Cook and Gary P. Scavone, 1995--2021.
|
by Perry R. Cook and Gary P. Scavone, 1995--2023.
|
||||||
*/
|
*/
|
||||||
/***************************************************/
|
/***************************************************/
|
||||||
|
|
||||||
|
|||||||
@@ -13,10 +13,15 @@ namespace stk {
|
|||||||
Methods are provided for creating a resonance or notch in the
|
Methods are provided for creating a resonance or notch in the
|
||||||
frequency response while maintaining a constant filter gain.
|
frequency response while maintaining a constant filter gain.
|
||||||
|
|
||||||
by Perry R. Cook and Gary P. Scavone, 1995--2021.
|
Formulae used calculate coefficients for lowpass, highpass,
|
||||||
|
bandpass, bandreject and allpass are found on pg. 55 of
|
||||||
|
Udo Zölzer's "DAFX - Digital Audio Effects" (2011 2nd ed).
|
||||||
|
|
||||||
|
by Perry R. Cook and Gary P. Scavone, 1995--2023.
|
||||||
*/
|
*/
|
||||||
/***************************************************/
|
/***************************************************/
|
||||||
|
|
||||||
|
const StkFloat RECIP_SQRT_2 = static_cast<StkFloat>( M_SQRT1_2 );
|
||||||
class BiQuad : public Filter
|
class BiQuad : public Filter
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
@@ -74,12 +79,72 @@ public:
|
|||||||
*/
|
*/
|
||||||
void setNotch( StkFloat frequency, StkFloat radius );
|
void setNotch( StkFloat frequency, StkFloat radius );
|
||||||
|
|
||||||
|
//! Set the filter coefficients for a low-pass with cutoff frequency \e fc (in Hz) and Q-factor \e Q.
|
||||||
|
/*!
|
||||||
|
This method determines the filter coefficients corresponding to a
|
||||||
|
low-pass filter with cutoff placed at \e fc, where sloping behaviour
|
||||||
|
and resonance are determined by \e Q. The default value for \e Q is
|
||||||
|
1/sqrt(2), resulting in a gradual attenuation of frequencies higher than
|
||||||
|
\e fc without added resonance. Values greater than this will more
|
||||||
|
aggressively attenuate frequencies above \e fc while also adding a
|
||||||
|
resonance at \e fc. Values less than this will result in a more gradual
|
||||||
|
attenuation of frequencies above \e fc, but will also attenuate
|
||||||
|
frequencies below \e fc as well. Both \e fc and \e Q must be positive.
|
||||||
|
*/
|
||||||
|
void setLowPass( StkFloat fc, StkFloat Q=RECIP_SQRT_2 );
|
||||||
|
|
||||||
|
//! Set the filter coefficients for a high-pass with cutoff frequency \e fc (in Hz) and Q-factor \e Q.
|
||||||
|
/*!
|
||||||
|
This method determines the filter coefficients corresponding to a high-pass
|
||||||
|
filter with cutoff placed at \e fc, where sloping behaviour and resonance
|
||||||
|
are determined by \e Q. The default value for \e Q is 1/sqrt(2), resulting
|
||||||
|
in a gradual attenuation of frequencies lower than \e fc without added
|
||||||
|
resonance. Values greater than this will more aggressively attenuate
|
||||||
|
frequencies below \e fc while also adding a resonance at \e fc. Values less
|
||||||
|
than this will result in a more gradual attenuation of frequencies below
|
||||||
|
\e fc, but will also attenuate frequencies above \e fc as well.
|
||||||
|
Both \e fc and \e Q must be positive.
|
||||||
|
*/
|
||||||
|
void setHighPass( StkFloat fc, StkFloat Q=RECIP_SQRT_2 );
|
||||||
|
|
||||||
|
//! Set the filter coefficients for a band-pass centered at \e fc (in Hz) with Q-factor \e Q.
|
||||||
|
/*!
|
||||||
|
This method determines the filter coefficients corresponding to a band-pass
|
||||||
|
filter with pass-band centered at \e fc, where band width and slope a
|
||||||
|
determined by \e Q. Values for \e Q that are less than 1.0 will attenuate
|
||||||
|
frequencies above and below \e fc more gradually, resulting in a convex
|
||||||
|
slope and a wider band. Values for \e Q greater than 1.0 will attenuate
|
||||||
|
frequencies above and below \e fc more aggressively, resulting in a
|
||||||
|
concave slope and a narrower band. Both \e fc and \e Q must be positive.
|
||||||
|
*/
|
||||||
|
void setBandPass( StkFloat fc, StkFloat Q );
|
||||||
|
|
||||||
|
//! Set the filter coefficients for a band-reject centered at \e fc (in Hz) with Q-factor \e Q.
|
||||||
|
/*!
|
||||||
|
This method determines the filter coefficients corresponding to a
|
||||||
|
band-reject filter with stop-band centered at \e fc, where band width
|
||||||
|
and slope are determined by \e Q. Values for \e Q that are less than 1.0
|
||||||
|
will yield a wider band with greater attenuation of \e fc. Values for \e Q
|
||||||
|
greater than 1.0 will yield a narrower band with less attenuation of \e fc.
|
||||||
|
Both \e fc and \e Q must be positive.
|
||||||
|
*/
|
||||||
|
void setBandReject( StkFloat fc, StkFloat Q );
|
||||||
|
|
||||||
|
//! Set the filter coefficients for an all-pass centered at \e fc (in Hz) with Q-factor \e Q.
|
||||||
|
/*!
|
||||||
|
This method determines the filter coefficients corresponding to
|
||||||
|
an all-pass filter whose phase response crosses -pi radians at \e fc.
|
||||||
|
High values for \e Q will result in a more instantaenous shift in phase
|
||||||
|
response at \e fc. Lower values will result in a more gradual shift in
|
||||||
|
phase response around \e fc. Both \e fc and \e Q must be positive.
|
||||||
|
*/
|
||||||
|
void setAllPass( StkFloat fc, StkFloat Q );
|
||||||
|
|
||||||
//! Sets the filter zeroes for equal resonance gain.
|
//! Sets the filter zeroes for equal resonance gain.
|
||||||
/*!
|
/*!
|
||||||
When using the filter as a resonator, zeroes places at z = 1, z
|
When using the filter as a resonator, zeroes places at z = 1, z
|
||||||
= -1 will result in a constant gain at resonance of 1 / (1 - R),
|
= -1 will result in a constant gain at resonance of 1 / (1 - R),
|
||||||
where R is the pole radius setting.
|
where R is the pole radius setting.
|
||||||
|
|
||||||
*/
|
*/
|
||||||
void setEqualGainZeroes( void );
|
void setEqualGainZeroes( void );
|
||||||
|
|
||||||
@@ -114,6 +179,14 @@ public:
|
|||||||
protected:
|
protected:
|
||||||
|
|
||||||
virtual void sampleRateChanged( StkFloat newRate, StkFloat oldRate );
|
virtual void sampleRateChanged( StkFloat newRate, StkFloat oldRate );
|
||||||
|
|
||||||
|
// Helper function to update the three intermediate values for the predefined filter types
|
||||||
|
// along with the feedback filter coefficients. Performs the debug check for fc and Q-factor arguments.
|
||||||
|
void setCommonFilterValues( StkFloat fc, StkFloat Q );
|
||||||
|
|
||||||
|
StkFloat K_;
|
||||||
|
StkFloat kSqr_;
|
||||||
|
StkFloat denom_;
|
||||||
};
|
};
|
||||||
|
|
||||||
inline StkFloat BiQuad :: tick( StkFloat input )
|
inline StkFloat BiQuad :: tick( StkFloat input )
|
||||||
|
|||||||
@@ -25,7 +25,7 @@ namespace stk {
|
|||||||
- Vibrato Gain = 1
|
- Vibrato Gain = 1
|
||||||
- Volume = 128
|
- Volume = 128
|
||||||
|
|
||||||
by Perry R. Cook and Gary P. Scavone, 1995--2021.
|
by Perry R. Cook and Gary P. Scavone, 1995--2023.
|
||||||
*/
|
*/
|
||||||
/***************************************************/
|
/***************************************************/
|
||||||
|
|
||||||
|
|||||||
@@ -43,7 +43,7 @@ namespace stk {
|
|||||||
- Register State = 1
|
- Register State = 1
|
||||||
- Breath Pressure = 128
|
- Breath Pressure = 128
|
||||||
|
|
||||||
by Perry R. Cook and Gary P. Scavone, 1995--2021.
|
by Perry R. Cook and Gary P. Scavone, 1995--2023.
|
||||||
*/
|
*/
|
||||||
/***************************************************/
|
/***************************************************/
|
||||||
|
|
||||||
|
|||||||
@@ -15,7 +15,7 @@ namespace stk {
|
|||||||
(1986). The output is an instantaneous
|
(1986). The output is an instantaneous
|
||||||
reflection coefficient value.
|
reflection coefficient value.
|
||||||
|
|
||||||
by Perry R. Cook and Gary P. Scavone, 1995--2021.
|
by Perry R. Cook and Gary P. Scavone, 1995--2023.
|
||||||
*/
|
*/
|
||||||
/***************************************************/
|
/***************************************************/
|
||||||
|
|
||||||
|
|||||||
@@ -32,7 +32,7 @@ namespace stk {
|
|||||||
- Frequency = 101
|
- Frequency = 101
|
||||||
- Volume = 128
|
- Volume = 128
|
||||||
|
|
||||||
by Perry R. Cook and Gary P. Scavone, 1995--2021.
|
by Perry R. Cook and Gary P. Scavone, 1995--2023.
|
||||||
Contributions by Esteban Maestre, 2011.
|
Contributions by Esteban Maestre, 2011.
|
||||||
*/
|
*/
|
||||||
/***************************************************/
|
/***************************************************/
|
||||||
|
|||||||
@@ -28,7 +28,7 @@ namespace stk {
|
|||||||
- Vibrato Gain = 1
|
- Vibrato Gain = 1
|
||||||
- Volume = 128
|
- Volume = 128
|
||||||
|
|
||||||
by Perry R. Cook and Gary P. Scavone, 1995--2021.
|
by Perry R. Cook and Gary P. Scavone, 1995--2023.
|
||||||
*/
|
*/
|
||||||
/***************************************************/
|
/***************************************************/
|
||||||
|
|
||||||
|
|||||||
@@ -14,7 +14,7 @@ namespace stk {
|
|||||||
This class implements a chorus effect. It takes a monophonic
|
This class implements a chorus effect. It takes a monophonic
|
||||||
input signal and produces a stereo output signal.
|
input signal and produces a stereo output signal.
|
||||||
|
|
||||||
by Perry R. Cook and Gary P. Scavone, 1995--2021.
|
by Perry R. Cook and Gary P. Scavone, 1995--2023.
|
||||||
*/
|
*/
|
||||||
/***************************************************/
|
/***************************************************/
|
||||||
|
|
||||||
|
|||||||
@@ -31,7 +31,7 @@ namespace stk {
|
|||||||
- Vibrato Gain = 1
|
- Vibrato Gain = 1
|
||||||
- Breath Pressure = 128
|
- Breath Pressure = 128
|
||||||
|
|
||||||
by Perry R. Cook and Gary P. Scavone, 1995--2021.
|
by Perry R. Cook and Gary P. Scavone, 1995--2023.
|
||||||
*/
|
*/
|
||||||
/***************************************************/
|
/***************************************************/
|
||||||
|
|
||||||
|
|||||||
@@ -17,7 +17,7 @@ namespace stk {
|
|||||||
A non-interpolating delay line is typically used in fixed
|
A non-interpolating delay line is typically used in fixed
|
||||||
delay-length applications, such as for reverberation.
|
delay-length applications, such as for reverberation.
|
||||||
|
|
||||||
by Perry R. Cook and Gary P. Scavone, 1995--2021.
|
by Perry R. Cook and Gary P. Scavone, 1995--2023.
|
||||||
*/
|
*/
|
||||||
/***************************************************/
|
/***************************************************/
|
||||||
|
|
||||||
|
|||||||
@@ -21,7 +21,7 @@ namespace stk {
|
|||||||
minimum delay possible in this implementation is limited to a
|
minimum delay possible in this implementation is limited to a
|
||||||
value of 0.5.
|
value of 0.5.
|
||||||
|
|
||||||
by Perry R. Cook and Gary P. Scavone, 1995--2021.
|
by Perry R. Cook and Gary P. Scavone, 1995--2023.
|
||||||
*/
|
*/
|
||||||
/***************************************************/
|
/***************************************************/
|
||||||
|
|
||||||
|
|||||||
@@ -20,7 +20,7 @@ namespace stk {
|
|||||||
delay setting. The use of higher order Lagrange interpolators can
|
delay setting. The use of higher order Lagrange interpolators can
|
||||||
typically improve (minimize) this attenuation characteristic.
|
typically improve (minimize) this attenuation characteristic.
|
||||||
|
|
||||||
by Perry R. Cook and Gary P. Scavone, 1995--2021.
|
by Perry R. Cook and Gary P. Scavone, 1995--2023.
|
||||||
*/
|
*/
|
||||||
/***************************************************/
|
/***************************************************/
|
||||||
|
|
||||||
|
|||||||
@@ -20,7 +20,7 @@ namespace stk {
|
|||||||
of simultaneous voices) via a #define in the
|
of simultaneous voices) via a #define in the
|
||||||
Drummer.h.
|
Drummer.h.
|
||||||
|
|
||||||
by Perry R. Cook and Gary P. Scavone, 1995--2021.
|
by Perry R. Cook and Gary P. Scavone, 1995--2023.
|
||||||
*/
|
*/
|
||||||
/***************************************************/
|
/***************************************************/
|
||||||
|
|
||||||
|
|||||||
@@ -12,7 +12,7 @@ namespace stk {
|
|||||||
|
|
||||||
This class implements an echo effect.
|
This class implements an echo effect.
|
||||||
|
|
||||||
by Perry R. Cook and Gary P. Scavone, 1995--2021.
|
by Perry R. Cook and Gary P. Scavone, 1995--2023.
|
||||||
*/
|
*/
|
||||||
/***************************************************/
|
/***************************************************/
|
||||||
|
|
||||||
|
|||||||
@@ -14,7 +14,7 @@ namespace stk {
|
|||||||
subclasses. It is general enough to support both monophonic and
|
subclasses. It is general enough to support both monophonic and
|
||||||
polyphonic input/output classes.
|
polyphonic input/output classes.
|
||||||
|
|
||||||
by Perry R. Cook and Gary P. Scavone, 1995--2021.
|
by Perry R. Cook and Gary P. Scavone, 1995--2023.
|
||||||
*/
|
*/
|
||||||
/***************************************************/
|
/***************************************************/
|
||||||
|
|
||||||
|
|||||||
@@ -15,7 +15,7 @@ namespace stk {
|
|||||||
keyOff messages, ramping to a specified target (default = 1.0) on
|
keyOff messages, ramping to a specified target (default = 1.0) on
|
||||||
keyOn and to a specified target (default = 0.0) on keyOff.
|
keyOn and to a specified target (default = 0.0) on keyOff.
|
||||||
|
|
||||||
by Perry R. Cook and Gary P. Scavone, 1995--2021.
|
by Perry R. Cook and Gary P. Scavone, 1995--2023.
|
||||||
*/
|
*/
|
||||||
/***************************************************/
|
/***************************************************/
|
||||||
|
|
||||||
|
|||||||
@@ -30,7 +30,7 @@ namespace stk {
|
|||||||
type who should worry about this (making
|
type who should worry about this (making
|
||||||
money) worry away.
|
money) worry away.
|
||||||
|
|
||||||
by Perry R. Cook and Gary P. Scavone, 1995--2021.
|
by Perry R. Cook and Gary P. Scavone, 1995--2023.
|
||||||
*/
|
*/
|
||||||
/***************************************************/
|
/***************************************************/
|
||||||
|
|
||||||
|
|||||||
@@ -33,7 +33,7 @@ namespace stk {
|
|||||||
type who should worry about this (making
|
type who should worry about this (making
|
||||||
money) worry away.
|
money) worry away.
|
||||||
|
|
||||||
by Perry R. Cook and Gary P. Scavone, 1995--2021.
|
by Perry R. Cook and Gary P. Scavone, 1995--2023.
|
||||||
*/
|
*/
|
||||||
/***************************************************/
|
/***************************************************/
|
||||||
|
|
||||||
|
|||||||
@@ -19,7 +19,7 @@ namespace stk {
|
|||||||
the overloaded one that takes an StkFrames object for
|
the overloaded one that takes an StkFrames object for
|
||||||
multi-channel and/or multi-frame data.
|
multi-channel and/or multi-frame data.
|
||||||
|
|
||||||
by Perry R. Cook and Gary P. Scavone, 1995--2021.
|
by Perry R. Cook and Gary P. Scavone, 1995--2023.
|
||||||
*/
|
*/
|
||||||
/***************************************************/
|
/***************************************************/
|
||||||
|
|
||||||
|
|||||||
@@ -34,7 +34,7 @@ namespace stk {
|
|||||||
such variable is found, the sample rate is
|
such variable is found, the sample rate is
|
||||||
assumed to be 44100 Hz.
|
assumed to be 44100 Hz.
|
||||||
|
|
||||||
by Perry R. Cook and Gary P. Scavone, 1995--2021.
|
by Perry R. Cook and Gary P. Scavone, 1995--2023.
|
||||||
*/
|
*/
|
||||||
/***************************************************/
|
/***************************************************/
|
||||||
|
|
||||||
|
|||||||
@@ -24,7 +24,7 @@ namespace stk {
|
|||||||
type, the data type will automatically be modified. Compressed
|
type, the data type will automatically be modified. Compressed
|
||||||
data types are not supported.
|
data types are not supported.
|
||||||
|
|
||||||
by Perry R. Cook and Gary P. Scavone, 1995--2021.
|
by Perry R. Cook and Gary P. Scavone, 1995--2023.
|
||||||
*/
|
*/
|
||||||
/***************************************************/
|
/***************************************************/
|
||||||
|
|
||||||
|
|||||||
@@ -45,7 +45,7 @@ namespace stk {
|
|||||||
See the FileRead class for a description of the supported audio
|
See the FileRead class for a description of the supported audio
|
||||||
file formats.
|
file formats.
|
||||||
|
|
||||||
by Perry R. Cook and Gary P. Scavone, 1995--2021.
|
by Perry R. Cook and Gary P. Scavone, 1995--2023.
|
||||||
*/
|
*/
|
||||||
/***************************************************/
|
/***************************************************/
|
||||||
|
|
||||||
|
|||||||
@@ -25,7 +25,7 @@ namespace stk {
|
|||||||
Currently, FileWvOut is non-interpolating and the output rate is
|
Currently, FileWvOut is non-interpolating and the output rate is
|
||||||
always Stk::sampleRate().
|
always Stk::sampleRate().
|
||||||
|
|
||||||
by Perry R. Cook and Gary P. Scavone, 1995--2021.
|
by Perry R. Cook and Gary P. Scavone, 1995--2023.
|
||||||
*/
|
*/
|
||||||
/***************************************************/
|
/***************************************************/
|
||||||
|
|
||||||
|
|||||||
@@ -15,7 +15,7 @@ namespace stk {
|
|||||||
filter subclasses. It is general enough to support both
|
filter subclasses. It is general enough to support both
|
||||||
monophonic and polyphonic input/output classes.
|
monophonic and polyphonic input/output classes.
|
||||||
|
|
||||||
by Perry R. Cook and Gary P. Scavone, 1995--2021.
|
by Perry R. Cook and Gary P. Scavone, 1995--2023.
|
||||||
*/
|
*/
|
||||||
/***************************************************/
|
/***************************************************/
|
||||||
|
|
||||||
|
|||||||
@@ -23,7 +23,7 @@ namespace stk {
|
|||||||
This structure results in one extra multiply per computed sample,
|
This structure results in one extra multiply per computed sample,
|
||||||
but allows easy control of the overall filter gain.
|
but allows easy control of the overall filter gain.
|
||||||
|
|
||||||
by Perry R. Cook and Gary P. Scavone, 1995--2021.
|
by Perry R. Cook and Gary P. Scavone, 1995--2023.
|
||||||
*/
|
*/
|
||||||
/***************************************************/
|
/***************************************************/
|
||||||
|
|
||||||
|
|||||||
@@ -32,7 +32,7 @@ namespace stk {
|
|||||||
- Vibrato Gain = 1
|
- Vibrato Gain = 1
|
||||||
- Breath Pressure = 128
|
- Breath Pressure = 128
|
||||||
|
|
||||||
by Perry R. Cook and Gary P. Scavone, 1995--2021.
|
by Perry R. Cook and Gary P. Scavone, 1995--2023.
|
||||||
*/
|
*/
|
||||||
/***************************************************/
|
/***************************************************/
|
||||||
|
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ namespace stk {
|
|||||||
over time from one frequency setting to another. It provides
|
over time from one frequency setting to another. It provides
|
||||||
methods for controlling the sweep rate and target frequency.
|
methods for controlling the sweep rate and target frequency.
|
||||||
|
|
||||||
by Perry R. Cook and Gary P. Scavone, 1995--2021.
|
by Perry R. Cook and Gary P. Scavone, 1995--2023.
|
||||||
*/
|
*/
|
||||||
/***************************************************/
|
/***************************************************/
|
||||||
|
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ namespace stk {
|
|||||||
implement tables or other types of input to output function
|
implement tables or other types of input to output function
|
||||||
mappings.
|
mappings.
|
||||||
|
|
||||||
by Perry R. Cook and Gary P. Scavone, 1995--2021.
|
by Perry R. Cook and Gary P. Scavone, 1995--2023.
|
||||||
*/
|
*/
|
||||||
/***************************************************/
|
/***************************************************/
|
||||||
|
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ namespace stk {
|
|||||||
generator sample-source subclasses. It is general enough to
|
generator sample-source subclasses. It is general enough to
|
||||||
support both monophonic and polyphonic output classes.
|
support both monophonic and polyphonic output classes.
|
||||||
|
|
||||||
by Perry R. Cook and Gary P. Scavone, 1995--2021.
|
by Perry R. Cook and Gary P. Scavone, 1995--2023.
|
||||||
*/
|
*/
|
||||||
/***************************************************/
|
/***************************************************/
|
||||||
|
|
||||||
|
|||||||
@@ -21,7 +21,7 @@ namespace stk {
|
|||||||
Chris Rolfe and Damian Keller, though there are likely to be a
|
Chris Rolfe and Damian Keller, though there are likely to be a
|
||||||
number of differences in the actual implementation.
|
number of differences in the actual implementation.
|
||||||
|
|
||||||
by Gary Scavone, 2005--2021.
|
by Gary Scavone, 2005--2023.
|
||||||
*/
|
*/
|
||||||
/***************************************************/
|
/***************************************************/
|
||||||
|
|
||||||
|
|||||||
@@ -31,7 +31,7 @@ namespace stk {
|
|||||||
type who should worry about this (making
|
type who should worry about this (making
|
||||||
money) worry away.
|
money) worry away.
|
||||||
|
|
||||||
by Perry R. Cook and Gary P. Scavone, 1995--2021.
|
by Perry R. Cook and Gary P. Scavone, 1995--2023.
|
||||||
*/
|
*/
|
||||||
/***************************************************/
|
/***************************************************/
|
||||||
|
|
||||||
|
|||||||
@@ -27,7 +27,7 @@ namespace stk {
|
|||||||
This structure results in one extra multiply per computed sample,
|
This structure results in one extra multiply per computed sample,
|
||||||
but allows easy control of the overall filter gain.
|
but allows easy control of the overall filter gain.
|
||||||
|
|
||||||
by Perry R. Cook and Gary P. Scavone, 1995--2021.
|
by Perry R. Cook and Gary P. Scavone, 1995--2023.
|
||||||
*/
|
*/
|
||||||
/***************************************************/
|
/***************************************************/
|
||||||
|
|
||||||
|
|||||||
@@ -31,7 +31,7 @@ namespace stk {
|
|||||||
data type for the incoming stream is signed 16-bit integers,
|
data type for the incoming stream is signed 16-bit integers,
|
||||||
though any of the defined StkFormats are permissible.
|
though any of the defined StkFormats are permissible.
|
||||||
|
|
||||||
by Perry R. Cook and Gary P. Scavone, 1995--2021.
|
by Perry R. Cook and Gary P. Scavone, 1995--2023.
|
||||||
*/
|
*/
|
||||||
/***************************************************/
|
/***************************************************/
|
||||||
|
|
||||||
|
|||||||
@@ -25,7 +25,7 @@ namespace stk {
|
|||||||
data type is signed 16-bit integers but any of the defined
|
data type is signed 16-bit integers but any of the defined
|
||||||
StkFormats are permissible.
|
StkFormats are permissible.
|
||||||
|
|
||||||
by Perry R. Cook and Gary P. Scavone, 1995--2021.
|
by Perry R. Cook and Gary P. Scavone, 1995--2023.
|
||||||
*/
|
*/
|
||||||
/***************************************************/
|
/***************************************************/
|
||||||
|
|
||||||
|
|||||||
@@ -12,7 +12,7 @@ namespace stk {
|
|||||||
This class provides a common interface for
|
This class provides a common interface for
|
||||||
all STK instruments.
|
all STK instruments.
|
||||||
|
|
||||||
by Perry R. Cook and Gary P. Scavone, 1995--2021.
|
by Perry R. Cook and Gary P. Scavone, 1995--2023.
|
||||||
*/
|
*/
|
||||||
/***************************************************/
|
/***************************************************/
|
||||||
|
|
||||||
|
|||||||
@@ -24,7 +24,7 @@ namespace stk {
|
|||||||
one-pole lowpass filters have been added inside
|
one-pole lowpass filters have been added inside
|
||||||
the feedback comb filters.
|
the feedback comb filters.
|
||||||
|
|
||||||
by Perry R. Cook and Gary P. Scavone, 1995--2021.
|
by Perry R. Cook and Gary P. Scavone, 1995--2023.
|
||||||
*/
|
*/
|
||||||
/***************************************************/
|
/***************************************************/
|
||||||
|
|
||||||
|
|||||||
@@ -16,7 +16,7 @@ namespace stk {
|
|||||||
Consult Fletcher and Rossing, Karjalainen,
|
Consult Fletcher and Rossing, Karjalainen,
|
||||||
Cook, and others for more information.
|
Cook, and others for more information.
|
||||||
|
|
||||||
by Perry R. Cook and Gary P. Scavone, 1995--2021.
|
by Perry R. Cook and Gary P. Scavone, 1995--2023.
|
||||||
*/
|
*/
|
||||||
/***************************************************/
|
/***************************************************/
|
||||||
|
|
||||||
|
|||||||
@@ -31,7 +31,7 @@ namespace stk {
|
|||||||
- String Detuning = 1
|
- String Detuning = 1
|
||||||
- Microphone Position = 128
|
- Microphone Position = 128
|
||||||
|
|
||||||
by Perry R. Cook and Gary P. Scavone, 1995--2021.
|
by Perry R. Cook and Gary P. Scavone, 1995--2023.
|
||||||
*/
|
*/
|
||||||
/***************************************************/
|
/***************************************************/
|
||||||
|
|
||||||
|
|||||||
@@ -46,7 +46,7 @@ namespace stk {
|
|||||||
This class is primarily for use in STK example programs but it is
|
This class is primarily for use in STK example programs but it is
|
||||||
generic enough to work in many other contexts.
|
generic enough to work in many other contexts.
|
||||||
|
|
||||||
by Perry R. Cook and Gary P. Scavone, 1995--2021.
|
by Perry R. Cook and Gary P. Scavone, 1995--2023.
|
||||||
*/
|
*/
|
||||||
/***************************************************/
|
/***************************************************/
|
||||||
|
|
||||||
|
|||||||
@@ -22,7 +22,7 @@ namespace stk {
|
|||||||
Tempo changes are internally tracked by the class and reflected in
|
Tempo changes are internally tracked by the class and reflected in
|
||||||
the values returned by the function getTickSeconds().
|
the values returned by the function getTickSeconds().
|
||||||
|
|
||||||
by Gary P. Scavone, 2003--2021.
|
by Gary P. Scavone, 2003--2023.
|
||||||
*/
|
*/
|
||||||
/**********************************************************************/
|
/**********************************************************************/
|
||||||
|
|
||||||
|
|||||||
@@ -19,7 +19,7 @@ namespace stk {
|
|||||||
(non-sweeping BiQuad filters), where N is set
|
(non-sweeping BiQuad filters), where N is set
|
||||||
during instantiation.
|
during instantiation.
|
||||||
|
|
||||||
by Perry R. Cook and Gary P. Scavone, 1995--2021.
|
by Perry R. Cook and Gary P. Scavone, 1995--2023.
|
||||||
*/
|
*/
|
||||||
/***************************************************/
|
/***************************************************/
|
||||||
|
|
||||||
|
|||||||
@@ -31,7 +31,7 @@ namespace stk {
|
|||||||
- Two Fixed = 7
|
- Two Fixed = 7
|
||||||
- Clump = 8
|
- Clump = 8
|
||||||
|
|
||||||
by Perry R. Cook and Gary P. Scavone, 1995--2021.
|
by Perry R. Cook and Gary P. Scavone, 1995--2023.
|
||||||
*/
|
*/
|
||||||
/***************************************************/
|
/***************************************************/
|
||||||
|
|
||||||
@@ -53,7 +53,7 @@ public:
|
|||||||
//! Select a bar preset (currently modulo 9).
|
//! Select a bar preset (currently modulo 9).
|
||||||
void setPreset( int preset );
|
void setPreset( int preset );
|
||||||
|
|
||||||
//! Set the modulation (vibrato) depth.
|
//! Set the modulation (vibrato) depth (0.0 - 1.0).
|
||||||
void setModulationDepth( StkFloat mDepth );
|
void setModulationDepth( StkFloat mDepth );
|
||||||
|
|
||||||
//! Perform the control change specified by \e number and \e value (0.0 - 128.0).
|
//! Perform the control change specified by \e number and \e value (0.0 - 128.0).
|
||||||
|
|||||||
@@ -16,7 +16,7 @@ namespace stk {
|
|||||||
modulations to give a nice, natural human
|
modulations to give a nice, natural human
|
||||||
modulation function.
|
modulation function.
|
||||||
|
|
||||||
by Perry R. Cook and Gary P. Scavone, 1995--2021.
|
by Perry R. Cook and Gary P. Scavone, 1995--2023.
|
||||||
*/
|
*/
|
||||||
/***************************************************/
|
/***************************************************/
|
||||||
|
|
||||||
|
|||||||
@@ -22,7 +22,7 @@ namespace stk {
|
|||||||
- Vibrato Gain = 1
|
- Vibrato Gain = 1
|
||||||
- Gain = 128
|
- Gain = 128
|
||||||
|
|
||||||
by Perry R. Cook and Gary P. Scavone, 1995--2021.
|
by Perry R. Cook and Gary P. Scavone, 1995--2023.
|
||||||
*/
|
*/
|
||||||
/***************************************************/
|
/***************************************************/
|
||||||
|
|
||||||
|
|||||||
@@ -29,7 +29,7 @@ namespace stk {
|
|||||||
systems, the pthread library is used. Under
|
systems, the pthread library is used. Under
|
||||||
Windows, critical sections are used.
|
Windows, critical sections are used.
|
||||||
|
|
||||||
by Perry R. Cook and Gary P. Scavone, 1995--2021.
|
by Perry R. Cook and Gary P. Scavone, 1995--2023.
|
||||||
*/
|
*/
|
||||||
/***************************************************/
|
/***************************************************/
|
||||||
|
|
||||||
|
|||||||
@@ -18,7 +18,7 @@ namespace stk {
|
|||||||
another allpass in series, followed by two allpass filters in
|
another allpass in series, followed by two allpass filters in
|
||||||
parallel with corresponding right and left outputs.
|
parallel with corresponding right and left outputs.
|
||||||
|
|
||||||
by Perry R. Cook and Gary P. Scavone, 1995--2021.
|
by Perry R. Cook and Gary P. Scavone, 1995--2023.
|
||||||
*/
|
*/
|
||||||
/***************************************************/
|
/***************************************************/
|
||||||
|
|
||||||
|
|||||||
@@ -14,7 +14,7 @@ namespace stk {
|
|||||||
C rand() function. The quality of the rand()
|
C rand() function. The quality of the rand()
|
||||||
function varies from one OS to another.
|
function varies from one OS to another.
|
||||||
|
|
||||||
by Perry R. Cook and Gary P. Scavone, 1995--2021.
|
by Perry R. Cook and Gary P. Scavone, 1995--2023.
|
||||||
*/
|
*/
|
||||||
/***************************************************/
|
/***************************************************/
|
||||||
|
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ namespace stk {
|
|||||||
provided for setting the pole position along the real axis of the
|
provided for setting the pole position along the real axis of the
|
||||||
z-plane while maintaining a constant peak filter gain.
|
z-plane while maintaining a constant peak filter gain.
|
||||||
|
|
||||||
by Perry R. Cook and Gary P. Scavone, 1995--2021.
|
by Perry R. Cook and Gary P. Scavone, 1995--2023.
|
||||||
*/
|
*/
|
||||||
/***************************************************/
|
/***************************************************/
|
||||||
|
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ namespace stk {
|
|||||||
provided for setting the zero position along the real axis of the
|
provided for setting the zero position along the real axis of the
|
||||||
z-plane while maintaining a constant filter gain.
|
z-plane while maintaining a constant filter gain.
|
||||||
|
|
||||||
by Perry R. Cook and Gary P. Scavone, 1995--2021.
|
by Perry R. Cook and Gary P. Scavone, 1995--2023.
|
||||||
*/
|
*/
|
||||||
/***************************************************/
|
/***************************************************/
|
||||||
|
|
||||||
|
|||||||
@@ -17,7 +17,7 @@ namespace stk {
|
|||||||
allpass and comb delay filters. This class implements two series
|
allpass and comb delay filters. This class implements two series
|
||||||
allpass units and two parallel comb filters.
|
allpass units and two parallel comb filters.
|
||||||
|
|
||||||
by Perry R. Cook and Gary P. Scavone, 1995--2021.
|
by Perry R. Cook and Gary P. Scavone, 1995--2023.
|
||||||
*/
|
*/
|
||||||
/***************************************************/
|
/***************************************************/
|
||||||
|
|
||||||
|
|||||||
@@ -29,7 +29,7 @@ namespace stk {
|
|||||||
type who should worry about this (making
|
type who should worry about this (making
|
||||||
money) worry away.
|
money) worry away.
|
||||||
|
|
||||||
by Perry R. Cook and Gary P. Scavone, 1995--2021.
|
by Perry R. Cook and Gary P. Scavone, 1995--2023.
|
||||||
*/
|
*/
|
||||||
/***************************************************/
|
/***************************************************/
|
||||||
|
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ namespace stk {
|
|||||||
set of 32 static phoneme formant parameters
|
set of 32 static phoneme formant parameters
|
||||||
and provide access to those values.
|
and provide access to those values.
|
||||||
|
|
||||||
by Perry R. Cook and Gary P. Scavone, 1995--2021.
|
by Perry R. Cook and Gary P. Scavone, 1995--2023.
|
||||||
*/
|
*/
|
||||||
/***************************************************/
|
/***************************************************/
|
||||||
|
|
||||||
|
|||||||
@@ -11,13 +11,13 @@ namespace stk {
|
|||||||
\brief STK simple pitch shifter effect class.
|
\brief STK simple pitch shifter effect class.
|
||||||
|
|
||||||
This class implements a simple pitch shifter
|
This class implements a simple pitch shifter
|
||||||
using delay lines.
|
using a delay line.
|
||||||
|
|
||||||
by Perry R. Cook and Gary P. Scavone, 1995--2021.
|
by Perry R. Cook and Gary P. Scavone, 1995--2023.
|
||||||
*/
|
*/
|
||||||
/***************************************************/
|
/***************************************************/
|
||||||
|
|
||||||
const int maxDelay = 5024;
|
const int maxDelay = 5000; //5024;
|
||||||
|
|
||||||
class PitShift : public Effect
|
class PitShift : public Effect
|
||||||
{
|
{
|
||||||
@@ -61,9 +61,10 @@ class PitShift : public Effect
|
|||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
|
||||||
DelayL delayLine_[2];
|
DelayL delayLine_;
|
||||||
StkFloat delay_[2];
|
StkFloat delay_[2];
|
||||||
StkFloat env_[2];
|
StkFloat env_[2];
|
||||||
|
StkFrames window_;
|
||||||
StkFloat rate_;
|
StkFloat rate_;
|
||||||
unsigned long delayLength_;
|
unsigned long delayLength_;
|
||||||
unsigned long halfLength_;
|
unsigned long halfLength_;
|
||||||
@@ -73,26 +74,29 @@ class PitShift : public Effect
|
|||||||
inline StkFloat PitShift :: tick( StkFloat input )
|
inline StkFloat PitShift :: tick( StkFloat input )
|
||||||
{
|
{
|
||||||
// Calculate the two delay length values, keeping them within the
|
// Calculate the two delay length values, keeping them within the
|
||||||
// range 12 to maxDelay-12.
|
// range 0 to delayLength.
|
||||||
delay_[0] += rate_;
|
delay_[0] += rate_;
|
||||||
while ( delay_[0] > maxDelay-12 ) delay_[0] -= delayLength_;
|
while ( delay_[0] >= delayLength_ ) delay_[0] -= delayLength_;
|
||||||
while ( delay_[0] < 12 ) delay_[0] += delayLength_;
|
while ( delay_[0] < 0 ) delay_[0] += delayLength_;
|
||||||
|
|
||||||
delay_[1] = delay_[0] + halfLength_;
|
delay_[1] = delay_[0] + halfLength_;
|
||||||
while ( delay_[1] > maxDelay-12 ) delay_[1] -= delayLength_;
|
while ( delay_[1] >= delayLength_ ) delay_[1] -= delayLength_;
|
||||||
while ( delay_[1] < 12 ) delay_[1] += delayLength_;
|
while ( delay_[1] < 0 ) delay_[1] += delayLength_;
|
||||||
|
|
||||||
// Set the new delay line lengths.
|
// Set the new delay line lengths.
|
||||||
delayLine_[0].setDelay( delay_[0] );
|
delayLine_.setDelay( delay_[0] );
|
||||||
delayLine_[1].setDelay( delay_[1] );
|
|
||||||
|
|
||||||
// Calculate a triangular envelope.
|
// Calculate a triangular envelope.
|
||||||
env_[1] = fabs( ( delay_[0] - halfLength_ + 12 ) * ( 1.0 / (halfLength_ + 12 ) ) );
|
//env_[1] = fabs( ( delay_[0] - halfLength_ ) * ( 1.0 / (halfLength_ ) ) );
|
||||||
env_[0] = 1.0 - env_[1];
|
//env_[0] = 1.0 - env_[1];
|
||||||
|
|
||||||
|
// Or use the precomputed hanning window.
|
||||||
|
env_[1] = window_[delay_[0]];
|
||||||
|
env_[0] = window_[delay_[1]];
|
||||||
|
|
||||||
// Delay input and apply envelope.
|
// Delay input and apply envelope.
|
||||||
lastFrame_[0] = env_[0] * delayLine_[0].tick( input );
|
lastFrame_[0] = env_[1] * delayLine_.tapOut( delay_[1] );
|
||||||
lastFrame_[0] += env_[1] * delayLine_[1].tick( input );
|
lastFrame_[0] += env_[0] * delayLine_.tick( input );
|
||||||
|
|
||||||
// Compute effect mix and output.
|
// Compute effect mix and output.
|
||||||
lastFrame_[0] *= effectMix_;
|
lastFrame_[0] *= effectMix_;
|
||||||
|
|||||||
@@ -27,7 +27,7 @@ namespace stk {
|
|||||||
Stanford, bearing the names of Karplus and/or
|
Stanford, bearing the names of Karplus and/or
|
||||||
Strong.
|
Strong.
|
||||||
|
|
||||||
by Perry R. Cook and Gary P. Scavone, 1995--2021.
|
by Perry R. Cook and Gary P. Scavone, 1995--2023.
|
||||||
*/
|
*/
|
||||||
/***************************************************/
|
/***************************************************/
|
||||||
|
|
||||||
|
|||||||
@@ -14,7 +14,7 @@ namespace stk {
|
|||||||
coefficient. Another method is provided to create a DC blocking
|
coefficient. Another method is provided to create a DC blocking
|
||||||
filter.
|
filter.
|
||||||
|
|
||||||
by Perry R. Cook and Gary P. Scavone, 1995--2021.
|
by Perry R. Cook and Gary P. Scavone, 1995--2023.
|
||||||
*/
|
*/
|
||||||
/***************************************************/
|
/***************************************************/
|
||||||
|
|
||||||
|
|||||||
@@ -29,7 +29,7 @@ namespace stk {
|
|||||||
- Breath Pressure = 128
|
- Breath Pressure = 128
|
||||||
|
|
||||||
by Mathias Bredholt, McGill University.
|
by Mathias Bredholt, McGill University.
|
||||||
Formatted for STK by Gary Scavone, 2021.
|
Formatted for STK by Gary Scavone, 2023.
|
||||||
*/
|
*/
|
||||||
/***************************************************/
|
/***************************************************/
|
||||||
|
|
||||||
|
|||||||
@@ -20,7 +20,7 @@ namespace stk {
|
|||||||
Smith (1986), Hirschman, Cook, Scavone, and
|
Smith (1986), Hirschman, Cook, Scavone, and
|
||||||
others for more information.
|
others for more information.
|
||||||
|
|
||||||
by Perry R. Cook and Gary P. Scavone, 1995--2021.
|
by Perry R. Cook and Gary P. Scavone, 1995--2023.
|
||||||
*/
|
*/
|
||||||
/***************************************************/
|
/***************************************************/
|
||||||
|
|
||||||
|
|||||||
@@ -23,7 +23,7 @@ namespace stk {
|
|||||||
- Zero Radii = 1
|
- Zero Radii = 1
|
||||||
- Envelope Gain = 128
|
- Envelope Gain = 128
|
||||||
|
|
||||||
by Perry R. Cook and Gary P. Scavone, 1995--2021.
|
by Perry R. Cook and Gary P. Scavone, 1995--2023.
|
||||||
*/
|
*/
|
||||||
/***************************************************/
|
/***************************************************/
|
||||||
|
|
||||||
|
|||||||
@@ -33,7 +33,7 @@ namespace stk {
|
|||||||
type who should worry about this (making
|
type who should worry about this (making
|
||||||
money) worry away.
|
money) worry away.
|
||||||
|
|
||||||
by Perry R. Cook and Gary P. Scavone, 1995--2021.
|
by Perry R. Cook and Gary P. Scavone, 1995--2023.
|
||||||
*/
|
*/
|
||||||
/***************************************************/
|
/***************************************************/
|
||||||
|
|
||||||
|
|||||||
@@ -11,7 +11,7 @@
|
|||||||
RtAudio WWW site: http://www.music.mcgill.ca/~gary/rtaudio/
|
RtAudio WWW site: http://www.music.mcgill.ca/~gary/rtaudio/
|
||||||
|
|
||||||
RtAudio: realtime audio i/o C++ classes
|
RtAudio: realtime audio i/o C++ classes
|
||||||
Copyright (c) 2001-2021 Gary P. Scavone
|
Copyright (c) 2001-2023 Gary P. Scavone
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person
|
Permission is hereby granted, free of charge, to any person
|
||||||
obtaining a copy of this software and associated documentation files
|
obtaining a copy of this software and associated documentation files
|
||||||
@@ -46,7 +46,24 @@
|
|||||||
#ifndef __RTAUDIO_H
|
#ifndef __RTAUDIO_H
|
||||||
#define __RTAUDIO_H
|
#define __RTAUDIO_H
|
||||||
|
|
||||||
#define RTAUDIO_VERSION "5.2.0"
|
#define RTAUDIO_VERSION_MAJOR 6
|
||||||
|
#define RTAUDIO_VERSION_MINOR 0
|
||||||
|
#define RTAUDIO_VERSION_PATCH 1
|
||||||
|
#define RTAUDIO_VERSION_BETA 0
|
||||||
|
|
||||||
|
#define RTAUDIO_TOSTRING2(n) #n
|
||||||
|
#define RTAUDIO_TOSTRING(n) RTAUDIO_TOSTRING2(n)
|
||||||
|
|
||||||
|
#if RTAUDIO_VERSION_BETA > 0
|
||||||
|
#define RTAUDIO_VERSION RTAUDIO_TOSTRING(RTAUDIO_VERSION_MAJOR) \
|
||||||
|
"." RTAUDIO_TOSTRING(RTAUDIO_VERSION_MINOR) \
|
||||||
|
"." RTAUDIO_TOSTRING(RTAUDIO_VERSION_PATCH) \
|
||||||
|
"beta" RTAUDIO_TOSTRING(RTAUDIO_VERSION_BETA)
|
||||||
|
#else
|
||||||
|
#define RTAUDIO_VERSION RTAUDIO_TOSTRING(RTAUDIO_VERSION_MAJOR) \
|
||||||
|
"." RTAUDIO_TOSTRING(RTAUDIO_VERSION_MINOR) \
|
||||||
|
"." RTAUDIO_TOSTRING(RTAUDIO_VERSION_PATCH)
|
||||||
|
#endif
|
||||||
|
|
||||||
#if defined _WIN32 || defined __CYGWIN__
|
#if defined _WIN32 || defined __CYGWIN__
|
||||||
#if defined(RTAUDIO_EXPORT)
|
#if defined(RTAUDIO_EXPORT)
|
||||||
@@ -64,8 +81,8 @@
|
|||||||
|
|
||||||
#include <string>
|
#include <string>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
#include <stdexcept>
|
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
|
#include <functional>
|
||||||
|
|
||||||
/*! \typedef typedef unsigned long RtAudioFormat;
|
/*! \typedef typedef unsigned long RtAudioFormat;
|
||||||
\brief RtAudio data format type.
|
\brief RtAudio data format type.
|
||||||
@@ -75,6 +92,8 @@
|
|||||||
internal routines will automatically take care of any necessary
|
internal routines will automatically take care of any necessary
|
||||||
byte-swapping between the host format and the soundcard. Thus,
|
byte-swapping between the host format and the soundcard. Thus,
|
||||||
endian-ness is not a concern in the following format definitions.
|
endian-ness is not a concern in the following format definitions.
|
||||||
|
Note that there are no range checks for floating-point values that
|
||||||
|
extend beyond plus/minus 1.0.
|
||||||
|
|
||||||
- \e RTAUDIO_SINT8: 8-bit signed integer.
|
- \e RTAUDIO_SINT8: 8-bit signed integer.
|
||||||
- \e RTAUDIO_SINT16: 16-bit signed integer.
|
- \e RTAUDIO_SINT16: 16-bit signed integer.
|
||||||
@@ -206,52 +225,19 @@ typedef int (*RtAudioCallback)( void *outputBuffer, void *inputBuffer,
|
|||||||
RtAudioStreamStatus status,
|
RtAudioStreamStatus status,
|
||||||
void *userData );
|
void *userData );
|
||||||
|
|
||||||
/************************************************************************/
|
enum RtAudioErrorType {
|
||||||
/*! \class RtAudioError
|
RTAUDIO_NO_ERROR = 0, /*!< No error. */
|
||||||
\brief Exception handling class for RtAudio.
|
RTAUDIO_WARNING, /*!< A non-critical error. */
|
||||||
|
RTAUDIO_UNKNOWN_ERROR, /*!< An unspecified error type. */
|
||||||
The RtAudioError class is quite simple but it does allow errors to be
|
RTAUDIO_NO_DEVICES_FOUND, /*!< No devices found on system. */
|
||||||
"caught" by RtAudioError::Type. See the RtAudio documentation to know
|
RTAUDIO_INVALID_DEVICE, /*!< An invalid device ID was specified. */
|
||||||
which methods can throw an RtAudioError.
|
RTAUDIO_DEVICE_DISCONNECT, /*!< A device in use was disconnected. */
|
||||||
*/
|
RTAUDIO_MEMORY_ERROR, /*!< An error occurred during memory allocation. */
|
||||||
/************************************************************************/
|
RTAUDIO_INVALID_PARAMETER, /*!< An invalid parameter was specified to a function. */
|
||||||
|
RTAUDIO_INVALID_USE, /*!< The function was called incorrectly. */
|
||||||
class RTAUDIO_DLL_PUBLIC RtAudioError : public std::runtime_error
|
RTAUDIO_DRIVER_ERROR, /*!< A system driver error occurred. */
|
||||||
{
|
RTAUDIO_SYSTEM_ERROR, /*!< A system error occurred. */
|
||||||
public:
|
RTAUDIO_THREAD_ERROR /*!< A thread error occurred. */
|
||||||
//! Defined RtAudioError types.
|
|
||||||
enum Type {
|
|
||||||
WARNING, /*!< A non-critical error. */
|
|
||||||
DEBUG_WARNING, /*!< A non-critical error which might be useful for debugging. */
|
|
||||||
UNSPECIFIED, /*!< The default, unspecified error type. */
|
|
||||||
NO_DEVICES_FOUND, /*!< No devices found on system. */
|
|
||||||
INVALID_DEVICE, /*!< An invalid device ID was specified. */
|
|
||||||
MEMORY_ERROR, /*!< An error occurred during memory allocation. */
|
|
||||||
INVALID_PARAMETER, /*!< An invalid parameter was specified to a function. */
|
|
||||||
INVALID_USE, /*!< The function was called incorrectly. */
|
|
||||||
DRIVER_ERROR, /*!< A system driver error occurred. */
|
|
||||||
SYSTEM_ERROR, /*!< A system error occurred. */
|
|
||||||
THREAD_ERROR /*!< A thread error occurred. */
|
|
||||||
};
|
|
||||||
|
|
||||||
//! The constructor.
|
|
||||||
RtAudioError( const std::string& message,
|
|
||||||
Type type = RtAudioError::UNSPECIFIED )
|
|
||||||
: std::runtime_error(message), type_(type) {}
|
|
||||||
|
|
||||||
//! Prints thrown error message to stderr.
|
|
||||||
virtual void printMessage( void ) const
|
|
||||||
{ std::cerr << '\n' << what() << "\n\n"; }
|
|
||||||
|
|
||||||
//! Returns the thrown error message type.
|
|
||||||
virtual const Type& getType(void) const { return type_; }
|
|
||||||
|
|
||||||
//! Returns the thrown error message string.
|
|
||||||
virtual const std::string getMessage(void) const
|
|
||||||
{ return std::string(what()); }
|
|
||||||
|
|
||||||
protected:
|
|
||||||
Type type_;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
//! RtAudio error callback function prototype.
|
//! RtAudio error callback function prototype.
|
||||||
@@ -259,7 +245,9 @@ class RTAUDIO_DLL_PUBLIC RtAudioError : public std::runtime_error
|
|||||||
\param type Type of error.
|
\param type Type of error.
|
||||||
\param errorText Error description.
|
\param errorText Error description.
|
||||||
*/
|
*/
|
||||||
typedef void (*RtAudioErrorCallback)( RtAudioError::Type type, const std::string &errorText );
|
typedef std::function<void(RtAudioErrorType type,
|
||||||
|
const std::string &errorText )>
|
||||||
|
RtAudioErrorCallback;
|
||||||
|
|
||||||
// **************************************************************** //
|
// **************************************************************** //
|
||||||
//
|
//
|
||||||
@@ -283,13 +271,13 @@ class RTAUDIO_DLL_PUBLIC RtAudio
|
|||||||
//! Audio API specifier arguments.
|
//! Audio API specifier arguments.
|
||||||
enum Api {
|
enum Api {
|
||||||
UNSPECIFIED, /*!< Search for a working compiled API. */
|
UNSPECIFIED, /*!< Search for a working compiled API. */
|
||||||
|
MACOSX_CORE, /*!< Macintosh OS-X Core Audio API. */
|
||||||
LINUX_ALSA, /*!< The Advanced Linux Sound Architecture API. */
|
LINUX_ALSA, /*!< The Advanced Linux Sound Architecture API. */
|
||||||
|
UNIX_JACK, /*!< The Jack Low-Latency Audio Server API. */
|
||||||
LINUX_PULSE, /*!< The Linux PulseAudio API. */
|
LINUX_PULSE, /*!< The Linux PulseAudio API. */
|
||||||
LINUX_OSS, /*!< The Linux Open Sound System API. */
|
LINUX_OSS, /*!< The Linux Open Sound System API. */
|
||||||
UNIX_JACK, /*!< The Jack Low-Latency Audio Server API. */
|
|
||||||
MACOSX_CORE, /*!< Macintosh OS-X Core Audio API. */
|
|
||||||
WINDOWS_WASAPI, /*!< The Microsoft WASAPI API. */
|
|
||||||
WINDOWS_ASIO, /*!< The Steinberg Audio Stream I/O API. */
|
WINDOWS_ASIO, /*!< The Steinberg Audio Stream I/O API. */
|
||||||
|
WINDOWS_WASAPI, /*!< The Microsoft WASAPI API. */
|
||||||
WINDOWS_DS, /*!< The Microsoft DirectSound API. */
|
WINDOWS_DS, /*!< The Microsoft DirectSound API. */
|
||||||
RTAUDIO_DUMMY, /*!< A compilable but non-functional API. */
|
RTAUDIO_DUMMY, /*!< A compilable but non-functional API. */
|
||||||
NUM_APIS /*!< Number of values in this enum. */
|
NUM_APIS /*!< Number of values in this enum. */
|
||||||
@@ -297,21 +285,23 @@ class RTAUDIO_DLL_PUBLIC RtAudio
|
|||||||
|
|
||||||
//! The public device information structure for returning queried values.
|
//! The public device information structure for returning queried values.
|
||||||
struct DeviceInfo {
|
struct DeviceInfo {
|
||||||
bool probed; /*!< true if the device capabilities were successfully probed. */
|
unsigned int ID{}; /*!< Device ID used to specify a device to RtAudio. */
|
||||||
std::string name; /*!< Character string device identifier. */
|
std::string name; /*!< Character string device name. */
|
||||||
unsigned int outputChannels{}; /*!< Maximum output channels supported by device. */
|
unsigned int outputChannels{}; /*!< Maximum output channels supported by device. */
|
||||||
unsigned int inputChannels{}; /*!< Maximum input channels supported by device. */
|
unsigned int inputChannels{}; /*!< Maximum input channels supported by device. */
|
||||||
unsigned int duplexChannels{}; /*!< Maximum simultaneous input/output channels supported by device. */
|
unsigned int duplexChannels{}; /*!< Maximum simultaneous input/output channels supported by device. */
|
||||||
bool isDefaultOutput{false}; /*!< true if this is the default output device. */
|
bool isDefaultOutput{false}; /*!< true if this is the default output device. */
|
||||||
bool isDefaultInput{false}; /*!< true if this is the default input device. */
|
bool isDefaultInput{false}; /*!< true if this is the default input device. */
|
||||||
std::vector<unsigned int> sampleRates; /*!< Supported sample rates (queried from list of standard rates). */
|
std::vector<unsigned int> sampleRates; /*!< Supported sample rates (queried from list of standard rates). */
|
||||||
|
unsigned int currentSampleRate{}; /*!< Current sample rate, system sample rate as currently configured. */
|
||||||
unsigned int preferredSampleRate{}; /*!< Preferred sample rate, e.g. for WASAPI the system sample rate. */
|
unsigned int preferredSampleRate{}; /*!< Preferred sample rate, e.g. for WASAPI the system sample rate. */
|
||||||
RtAudioFormat nativeFormats{}; /*!< Bit mask of supported data formats. */
|
RtAudioFormat nativeFormats{}; /*!< Bit mask of supported data formats. */
|
||||||
};
|
};
|
||||||
|
|
||||||
//! The structure for specifying input or output stream parameters.
|
//! The structure for specifying input or output stream parameters.
|
||||||
struct StreamParameters {
|
struct StreamParameters {
|
||||||
unsigned int deviceId{}; /*!< Device index (0 to getDeviceCount() - 1). */
|
//std::string deviceName{}; /*!< Device name from device list. */
|
||||||
|
unsigned int deviceId{}; /*!< Device id as provided by getDeviceIds(). */
|
||||||
unsigned int nChannels{}; /*!< Number of channels. */
|
unsigned int nChannels{}; /*!< Number of channels. */
|
||||||
unsigned int firstChannel{}; /*!< First channel index on device (default = 0). */
|
unsigned int firstChannel{}; /*!< First channel index on device (default = 0). */
|
||||||
};
|
};
|
||||||
@@ -369,9 +359,11 @@ class RTAUDIO_DLL_PUBLIC RtAudio
|
|||||||
function by the value actually used by the system.
|
function by the value actually used by the system.
|
||||||
|
|
||||||
The \c streamName parameter can be used to set the client name
|
The \c streamName parameter can be used to set the client name
|
||||||
when using the Jack API. By default, the client name is set to
|
when using the Jack API or the application name when using the
|
||||||
RtApiJack. However, if you wish to create multiple instances of
|
Pulse API. By default, the Jack client name is set to RtApiJack.
|
||||||
RtAudio with Jack, each instance must have a unique client name.
|
However, if you wish to create multiple instances of RtAudio with
|
||||||
|
Jack, each instance must have a unique client name. The default
|
||||||
|
Pulse application name is set to "RtAudio."
|
||||||
*/
|
*/
|
||||||
struct StreamOptions {
|
struct StreamOptions {
|
||||||
RtAudioStreamFlags flags{}; /*!< A bit-mask of stream flags (RTAUDIO_NONINTERLEAVED, RTAUDIO_MINIMIZE_LATENCY, RTAUDIO_HOG_DEVICE, RTAUDIO_ALSA_USE_DEFAULT). */
|
RtAudioStreamFlags flags{}; /*!< A bit-mask of stream flags (RTAUDIO_NONINTERLEAVED, RTAUDIO_MINIMIZE_LATENCY, RTAUDIO_HOG_DEVICE, RTAUDIO_ALSA_USE_DEFAULT). */
|
||||||
@@ -409,21 +401,36 @@ class RTAUDIO_DLL_PUBLIC RtAudio
|
|||||||
//! Return the compiled audio API having the given name.
|
//! Return the compiled audio API having the given name.
|
||||||
/*!
|
/*!
|
||||||
A case insensitive comparison will check the specified name
|
A case insensitive comparison will check the specified name
|
||||||
against the list of compiled APIs, and return the one which
|
against the list of compiled APIs, and return the one that
|
||||||
matches. On failure, the function returns UNSPECIFIED.
|
matches. On failure, the function returns UNSPECIFIED.
|
||||||
*/
|
*/
|
||||||
static RtAudio::Api getCompiledApiByName( const std::string &name );
|
static RtAudio::Api getCompiledApiByName( const std::string &name );
|
||||||
|
|
||||||
|
//! Return the compiled audio API having the given display name.
|
||||||
|
/*!
|
||||||
|
A case sensitive comparison will check the specified display name
|
||||||
|
against the list of compiled APIs, and return the one that
|
||||||
|
matches. On failure, the function returns UNSPECIFIED.
|
||||||
|
*/
|
||||||
|
static RtAudio::Api getCompiledApiByDisplayName( const std::string &name );
|
||||||
|
|
||||||
//! The class constructor.
|
//! The class constructor.
|
||||||
/*!
|
/*!
|
||||||
The constructor performs minor initialization tasks. An exception
|
The constructor attempts to create an RtApi instance.
|
||||||
can be thrown if no API support is compiled.
|
|
||||||
|
|
||||||
If no API argument is specified and multiple API support has been
|
If an API argument is specified but that API has not been
|
||||||
compiled, the default order of use is JACK, ALSA, OSS (Linux
|
compiled, a warning is issued and an instance of an available API
|
||||||
systems) and ASIO, DS (Windows systems).
|
is created. If no compiled API is found, the routine will abort
|
||||||
|
(though this should be impossible because RtDummy is the default
|
||||||
|
if no API-specific preprocessor definition is provided to the
|
||||||
|
compiler). If no API argument is specified and multiple API
|
||||||
|
support has been compiled, the default order of use is JACK, ALSA,
|
||||||
|
OSS (Linux systems) and ASIO, DS (Windows systems).
|
||||||
|
|
||||||
|
An optional errorCallback function can be specified to
|
||||||
|
subsequently receive warning and error messages.
|
||||||
*/
|
*/
|
||||||
RtAudio( RtAudio::Api api=UNSPECIFIED );
|
RtAudio( RtAudio::Api api=UNSPECIFIED, RtAudioErrorCallback&& errorCallback=0 );
|
||||||
|
|
||||||
//! The destructor.
|
//! The destructor.
|
||||||
/*!
|
/*!
|
||||||
@@ -437,65 +444,89 @@ class RTAUDIO_DLL_PUBLIC RtAudio
|
|||||||
|
|
||||||
//! A public function that queries for the number of audio devices available.
|
//! A public function that queries for the number of audio devices available.
|
||||||
/*!
|
/*!
|
||||||
This function performs a system query of available devices each time it
|
This function performs a system query of available devices each
|
||||||
is called, thus supporting devices connected \e after instantiation. If
|
time it is called, thus supporting devices (dis)connected \e after
|
||||||
a system error occurs during processing, a warning will be issued.
|
instantiation. If a system error occurs during processing, a
|
||||||
|
warning will be issued.
|
||||||
*/
|
*/
|
||||||
unsigned int getDeviceCount( void );
|
unsigned int getDeviceCount( void );
|
||||||
|
|
||||||
//! Return an RtAudio::DeviceInfo structure for a specified device number.
|
//! A public function that returns a vector of audio device IDs.
|
||||||
/*!
|
/*!
|
||||||
|
The ID values returned by this function are used internally by
|
||||||
Any device integer between 0 and getDeviceCount() - 1 is valid.
|
RtAudio to identify a given device. The values themselves are
|
||||||
If an invalid argument is provided, an RtAudioError (type = INVALID_USE)
|
arbitrary and do not correspond to device IDs used by the
|
||||||
will be thrown. If a device is busy or otherwise unavailable, the
|
underlying API (nor are they index values). This function performs
|
||||||
structure member "probed" will have a value of "false" and all
|
a system query of available devices each time it is called, thus
|
||||||
other members are undefined. If the specified device is the
|
supporting devices (dis)connected \e after instantiation. If no
|
||||||
current default input or output device, the corresponding
|
devices are available, the vector size will be zero. If a system
|
||||||
"isDefault" member will have a value of "true".
|
error occurs during processing, a warning will be issued.
|
||||||
*/
|
*/
|
||||||
RtAudio::DeviceInfo getDeviceInfo( unsigned int device );
|
std::vector<unsigned int> getDeviceIds( void );
|
||||||
|
|
||||||
//! A function that returns the index of the default output device.
|
//! A public function that returns a vector of audio device names.
|
||||||
/*!
|
/*!
|
||||||
If the underlying audio API does not provide a "default
|
This function performs a system query of available devices each
|
||||||
device", or if no devices are available, the return value will be
|
time it is called, thus supporting devices (dis)connected \e after
|
||||||
0. Note that this is a valid device identifier and it is the
|
instantiation. If no devices are available, the vector size will
|
||||||
client's responsibility to verify that a device is available
|
be zero. If a system error occurs during processing, a warning
|
||||||
before attempting to open a stream.
|
will be issued.
|
||||||
|
*/
|
||||||
|
std::vector<std::string> getDeviceNames( void );
|
||||||
|
|
||||||
|
//! Return an RtAudio::DeviceInfo structure for a specified device ID.
|
||||||
|
/*!
|
||||||
|
Any device ID returned by getDeviceIds() is valid, unless it has
|
||||||
|
been removed between the call to getDevceIds() and this
|
||||||
|
function. If an invalid argument is provided, an
|
||||||
|
RTAUDIO_INVALID_USE will be passed to the user-provided
|
||||||
|
errorCallback function (or otherwise printed to stderr) and all
|
||||||
|
members of the returned RtAudio::DeviceInfo structure will be
|
||||||
|
initialized to default, invalid values (ID = 0, empty name, ...).
|
||||||
|
If the specified device is the current default input or output
|
||||||
|
device, the corresponding "isDefault" member will have a value of
|
||||||
|
"true".
|
||||||
|
*/
|
||||||
|
RtAudio::DeviceInfo getDeviceInfo( unsigned int deviceId );
|
||||||
|
|
||||||
|
//! A function that returns the ID of the default output device.
|
||||||
|
/*!
|
||||||
|
If the underlying audio API does not provide a "default device",
|
||||||
|
the first probed output device ID will be returned. If no devices
|
||||||
|
are available, the return value will be 0 (which is an invalid
|
||||||
|
device identifier).
|
||||||
*/
|
*/
|
||||||
unsigned int getDefaultOutputDevice( void );
|
unsigned int getDefaultOutputDevice( void );
|
||||||
|
|
||||||
//! A function that returns the index of the default input device.
|
//! A function that returns the ID of the default input device.
|
||||||
/*!
|
/*!
|
||||||
If the underlying audio API does not provide a "default
|
If the underlying audio API does not provide a "default device",
|
||||||
device", or if no devices are available, the return value will be
|
the first probed input device ID will be returned. If no devices
|
||||||
0. Note that this is a valid device identifier and it is the
|
are available, the return value will be 0 (which is an invalid
|
||||||
client's responsibility to verify that a device is available
|
device identifier).
|
||||||
before attempting to open a stream.
|
|
||||||
*/
|
*/
|
||||||
unsigned int getDefaultInputDevice( void );
|
unsigned int getDefaultInputDevice( void );
|
||||||
|
|
||||||
//! A public function for opening a stream with the specified parameters.
|
//! A public function for opening a stream with the specified parameters.
|
||||||
/*!
|
/*!
|
||||||
An RtAudioError (type = SYSTEM_ERROR) is thrown if a stream cannot be
|
An RTAUDIO_SYSTEM_ERROR is returned if a stream cannot be
|
||||||
opened with the specified parameters or an error occurs during
|
opened with the specified parameters or an error occurs during
|
||||||
processing. An RtAudioError (type = INVALID_USE) is thrown if any
|
processing. An RTAUDIO_INVALID_USE is returned if a stream
|
||||||
invalid device ID or channel number parameters are specified.
|
is already open or any invalid stream parameters are specified.
|
||||||
|
|
||||||
\param outputParameters Specifies output stream parameters to use
|
\param outputParameters Specifies output stream parameters to use
|
||||||
when opening a stream, including a device ID, number of channels,
|
when opening a stream, including a device ID, number of channels,
|
||||||
and starting channel number. For input-only streams, this
|
and starting channel number. For input-only streams, this
|
||||||
argument should be NULL. The device ID is an index value between
|
argument should be NULL. The device ID is a value returned by
|
||||||
0 and getDeviceCount() - 1.
|
getDeviceIds().
|
||||||
\param inputParameters Specifies input stream parameters to use
|
\param inputParameters Specifies input stream parameters to use
|
||||||
when opening a stream, including a device ID, number of channels,
|
when opening a stream, including a device ID, number of channels,
|
||||||
and starting channel number. For output-only streams, this
|
and starting channel number. For output-only streams, this
|
||||||
argument should be NULL. The device ID is an index value between
|
argument should be NULL. The device ID is a value returned by
|
||||||
0 and getDeviceCount() - 1.
|
getDeviceIds().
|
||||||
\param format An RtAudioFormat specifying the desired sample data format.
|
\param format An RtAudioFormat specifying the desired sample data format.
|
||||||
\param sampleRate The desired sample rate (sample frames per second).
|
\param sampleRate The desired sample rate (sample frames per second).
|
||||||
\param *bufferFrames A pointer to a value indicating the desired
|
\param bufferFrames A pointer to a value indicating the desired
|
||||||
internal buffer size in sample frames. The actual value
|
internal buffer size in sample frames. The actual value
|
||||||
used by the device is returned via the same pointer. A
|
used by the device is returned via the same pointer. A
|
||||||
value of zero can be specified, in which case the lowest
|
value of zero can be specified, in which case the lowest
|
||||||
@@ -513,48 +544,52 @@ class RTAUDIO_DLL_PUBLIC RtAudio
|
|||||||
chosen. If the RTAUDIO_MINIMIZE_LATENCY flag bit is set, the
|
chosen. If the RTAUDIO_MINIMIZE_LATENCY flag bit is set, the
|
||||||
lowest allowable value is used. The actual value used is
|
lowest allowable value is used. The actual value used is
|
||||||
returned via the structure argument. The parameter is API dependent.
|
returned via the structure argument. The parameter is API dependent.
|
||||||
\param errorCallback A client-defined function that will be invoked
|
|
||||||
when an error has occurred.
|
|
||||||
*/
|
*/
|
||||||
void openStream( RtAudio::StreamParameters *outputParameters,
|
RtAudioErrorType openStream( RtAudio::StreamParameters *outputParameters,
|
||||||
RtAudio::StreamParameters *inputParameters,
|
RtAudio::StreamParameters *inputParameters,
|
||||||
RtAudioFormat format, unsigned int sampleRate,
|
RtAudioFormat format, unsigned int sampleRate,
|
||||||
unsigned int *bufferFrames, RtAudioCallback callback,
|
unsigned int *bufferFrames, RtAudioCallback callback,
|
||||||
void *userData = NULL, RtAudio::StreamOptions *options = NULL, RtAudioErrorCallback errorCallback = NULL );
|
void *userData = NULL, RtAudio::StreamOptions *options = NULL );
|
||||||
|
|
||||||
//! A function that closes a stream and frees any associated stream memory.
|
//! A function that closes a stream and frees any associated stream memory.
|
||||||
/*!
|
/*!
|
||||||
If a stream is not open, this function issues a warning and
|
If a stream is not open, an RTAUDIO_WARNING will be passed to the
|
||||||
returns (no exception is thrown).
|
user-provided errorCallback function (or otherwise printed to
|
||||||
|
stderr).
|
||||||
*/
|
*/
|
||||||
void closeStream( void );
|
void closeStream( void );
|
||||||
|
|
||||||
//! A function that starts a stream.
|
//! A function that starts a stream.
|
||||||
/*!
|
/*!
|
||||||
An RtAudioError (type = SYSTEM_ERROR) is thrown if an error occurs
|
An RTAUDIO_SYSTEM_ERROR is returned if an error occurs during
|
||||||
during processing. An RtAudioError (type = INVALID_USE) is thrown if a
|
processing. An RTAUDIO_WARNING is returned if a stream is not open
|
||||||
stream is not open. A warning is issued if the stream is already
|
or is already running.
|
||||||
running.
|
|
||||||
*/
|
*/
|
||||||
void startStream( void );
|
RtAudioErrorType startStream( void );
|
||||||
|
|
||||||
//! Stop a stream, allowing any samples remaining in the output queue to be played.
|
//! Stop a stream, allowing any samples remaining in the output queue to be played.
|
||||||
/*!
|
/*!
|
||||||
An RtAudioError (type = SYSTEM_ERROR) is thrown if an error occurs
|
An RTAUDIO_SYSTEM_ERROR is returned if an error occurs during
|
||||||
during processing. An RtAudioError (type = INVALID_USE) is thrown if a
|
processing. An RTAUDIO_WARNING is returned if a stream is not
|
||||||
stream is not open. A warning is issued if the stream is already
|
open or is already stopped.
|
||||||
stopped.
|
|
||||||
*/
|
*/
|
||||||
void stopStream( void );
|
RtAudioErrorType stopStream( void );
|
||||||
|
|
||||||
//! Stop a stream, discarding any samples remaining in the input/output queue.
|
//! Stop a stream, discarding any samples remaining in the input/output queue.
|
||||||
/*!
|
/*!
|
||||||
An RtAudioError (type = SYSTEM_ERROR) is thrown if an error occurs
|
An RTAUDIO_SYSTEM_ERROR is returned if an error occurs during
|
||||||
during processing. An RtAudioError (type = INVALID_USE) is thrown if a
|
processing. An RTAUDIO_WARNING is returned if a stream is not
|
||||||
stream is not open. A warning is issued if the stream is already
|
open or is already stopped.
|
||||||
stopped.
|
|
||||||
*/
|
*/
|
||||||
void abortStream( void );
|
RtAudioErrorType abortStream( void );
|
||||||
|
|
||||||
|
//! Retrieve the error message corresponding to the last error or warning condition.
|
||||||
|
/*!
|
||||||
|
This function can be used to get a detailed error message when a
|
||||||
|
non-zero RtAudioErrorType is returned by a function. This is the
|
||||||
|
same message sent to the user-provided errorCallback function.
|
||||||
|
*/
|
||||||
|
const std::string getErrorText( void );
|
||||||
|
|
||||||
//! Returns true if a stream is open and false if not.
|
//! Returns true if a stream is open and false if not.
|
||||||
bool isStreamOpen( void ) const;
|
bool isStreamOpen( void ) const;
|
||||||
@@ -562,16 +597,17 @@ class RTAUDIO_DLL_PUBLIC RtAudio
|
|||||||
//! Returns true if the stream is running and false if it is stopped or not open.
|
//! Returns true if the stream is running and false if it is stopped or not open.
|
||||||
bool isStreamRunning( void ) const;
|
bool isStreamRunning( void ) const;
|
||||||
|
|
||||||
//! Returns the number of elapsed seconds since the stream was started.
|
//! Returns the number of seconds of processed data since the stream was started.
|
||||||
/*!
|
/*!
|
||||||
If a stream is not open, an RtAudioError (type = INVALID_USE) will be thrown.
|
The stream time is calculated from the number of sample frames
|
||||||
|
processed by the underlying audio system, which will increment by
|
||||||
|
units of the audio buffer size. It is not an absolute running
|
||||||
|
time. If a stream is not open, the returned value may not be
|
||||||
|
valid.
|
||||||
*/
|
*/
|
||||||
double getStreamTime( void );
|
double getStreamTime( void );
|
||||||
|
|
||||||
//! Set the stream time to a time in seconds greater than or equal to 0.0.
|
//! Set the stream time to a time in seconds greater than or equal to 0.0.
|
||||||
/*!
|
|
||||||
If a stream is not open, an RtAudioError (type = INVALID_USE) will be thrown.
|
|
||||||
*/
|
|
||||||
void setStreamTime( double time );
|
void setStreamTime( double time );
|
||||||
|
|
||||||
//! Returns the internal stream latency in sample frames.
|
//! Returns the internal stream latency in sample frames.
|
||||||
@@ -579,21 +615,29 @@ class RTAUDIO_DLL_PUBLIC RtAudio
|
|||||||
The stream latency refers to delay in audio input and/or output
|
The stream latency refers to delay in audio input and/or output
|
||||||
caused by internal buffering by the audio system and/or hardware.
|
caused by internal buffering by the audio system and/or hardware.
|
||||||
For duplex streams, the returned value will represent the sum of
|
For duplex streams, the returned value will represent the sum of
|
||||||
the input and output latencies. If a stream is not open, an
|
the input and output latencies. If a stream is not open, the
|
||||||
RtAudioError (type = INVALID_USE) will be thrown. If the API does not
|
returned value will be invalid. If the API does not report
|
||||||
report latency, the return value will be zero.
|
latency, the return value will be zero.
|
||||||
*/
|
*/
|
||||||
long getStreamLatency( void );
|
long getStreamLatency( void );
|
||||||
|
|
||||||
//! Returns actual sample rate in use by the stream.
|
//! Returns actual sample rate in use by the (open) stream.
|
||||||
/*!
|
/*!
|
||||||
On some systems, the sample rate used may be slightly different
|
On some systems, the sample rate used may be slightly different
|
||||||
than that specified in the stream parameters. If a stream is not
|
than that specified in the stream parameters. If a stream is not
|
||||||
open, an RtAudioError (type = INVALID_USE) will be thrown.
|
open, a value of zero is returned.
|
||||||
*/
|
*/
|
||||||
unsigned int getStreamSampleRate( void );
|
unsigned int getStreamSampleRate( void );
|
||||||
|
|
||||||
//! Specify whether warning messages should be printed to stderr.
|
//! Set a client-defined function that will be invoked when an error or warning occurs.
|
||||||
|
void setErrorCallback( RtAudioErrorCallback errorCallback );
|
||||||
|
|
||||||
|
//! Specify whether warning messages should be output or not.
|
||||||
|
/*!
|
||||||
|
The default behaviour is for warning messages to be output,
|
||||||
|
either to a client-defined error callback function (if specified)
|
||||||
|
or to stderr.
|
||||||
|
*/
|
||||||
void showWarnings( bool value = true );
|
void showWarnings( bool value = true );
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
@@ -603,7 +647,7 @@ class RTAUDIO_DLL_PUBLIC RtAudio
|
|||||||
};
|
};
|
||||||
|
|
||||||
// Operating system dependent thread functionality.
|
// Operating system dependent thread functionality.
|
||||||
#if defined(_WIN32) || defined(__CYGWIN__)
|
#if defined(_MSC_VER)
|
||||||
|
|
||||||
#ifndef NOMINMAX
|
#ifndef NOMINMAX
|
||||||
#define NOMINMAX
|
#define NOMINMAX
|
||||||
@@ -642,11 +686,11 @@ struct CallbackInfo {
|
|||||||
ThreadHandle thread{};
|
ThreadHandle thread{};
|
||||||
void *callback{};
|
void *callback{};
|
||||||
void *userData{};
|
void *userData{};
|
||||||
void *errorCallback{};
|
|
||||||
void *apiInfo{}; // void pointer for API specific callback information
|
void *apiInfo{}; // void pointer for API specific callback information
|
||||||
bool isRunning{false};
|
bool isRunning{false};
|
||||||
bool doRealtime{false};
|
bool doRealtime{false};
|
||||||
int priority{};
|
int priority{};
|
||||||
|
bool deviceDisconnected{false};
|
||||||
};
|
};
|
||||||
|
|
||||||
// **************************************************************** //
|
// **************************************************************** //
|
||||||
@@ -705,26 +749,29 @@ public:
|
|||||||
RtApi();
|
RtApi();
|
||||||
virtual ~RtApi();
|
virtual ~RtApi();
|
||||||
virtual RtAudio::Api getCurrentApi( void ) = 0;
|
virtual RtAudio::Api getCurrentApi( void ) = 0;
|
||||||
virtual unsigned int getDeviceCount( void ) = 0;
|
unsigned int getDeviceCount( void );
|
||||||
virtual RtAudio::DeviceInfo getDeviceInfo( unsigned int device ) = 0;
|
std::vector<unsigned int> getDeviceIds( void );
|
||||||
|
std::vector<std::string> getDeviceNames( void );
|
||||||
|
RtAudio::DeviceInfo getDeviceInfo( unsigned int deviceId );
|
||||||
virtual unsigned int getDefaultInputDevice( void );
|
virtual unsigned int getDefaultInputDevice( void );
|
||||||
virtual unsigned int getDefaultOutputDevice( void );
|
virtual unsigned int getDefaultOutputDevice( void );
|
||||||
void openStream( RtAudio::StreamParameters *outputParameters,
|
RtAudioErrorType openStream( RtAudio::StreamParameters *outputParameters,
|
||||||
RtAudio::StreamParameters *inputParameters,
|
RtAudio::StreamParameters *inputParameters,
|
||||||
RtAudioFormat format, unsigned int sampleRate,
|
RtAudioFormat format, unsigned int sampleRate,
|
||||||
unsigned int *bufferFrames, RtAudioCallback callback,
|
unsigned int *bufferFrames, RtAudioCallback callback,
|
||||||
void *userData, RtAudio::StreamOptions *options,
|
void *userData, RtAudio::StreamOptions *options );
|
||||||
RtAudioErrorCallback errorCallback );
|
|
||||||
virtual void closeStream( void );
|
virtual void closeStream( void );
|
||||||
virtual void startStream( void ) = 0;
|
virtual RtAudioErrorType startStream( void ) = 0;
|
||||||
virtual void stopStream( void ) = 0;
|
virtual RtAudioErrorType stopStream( void ) = 0;
|
||||||
virtual void abortStream( void ) = 0;
|
virtual RtAudioErrorType abortStream( void ) = 0;
|
||||||
|
const std::string getErrorText( void ) const { return errorText_; }
|
||||||
long getStreamLatency( void );
|
long getStreamLatency( void );
|
||||||
unsigned int getStreamSampleRate( void );
|
unsigned int getStreamSampleRate( void );
|
||||||
virtual double getStreamTime( void );
|
virtual double getStreamTime( void ) const { return stream_.streamTime; }
|
||||||
virtual void setStreamTime( double time );
|
virtual void setStreamTime( double time );
|
||||||
bool isStreamOpen( void ) const { return stream_.state != STREAM_CLOSED; }
|
bool isStreamOpen( void ) const { return stream_.state != STREAM_CLOSED; }
|
||||||
bool isStreamRunning( void ) const { return stream_.state == STREAM_RUNNING; }
|
bool isStreamRunning( void ) const { return stream_.state == STREAM_RUNNING; }
|
||||||
|
void setErrorCallback( RtAudioErrorCallback errorCallback ) { errorCallback_ = errorCallback; }
|
||||||
void showWarnings( bool value ) { showWarnings_ = value; }
|
void showWarnings( bool value ) { showWarnings_ = value; }
|
||||||
|
|
||||||
|
|
||||||
@@ -760,7 +807,7 @@ protected:
|
|||||||
|
|
||||||
// A protected structure for audio streams.
|
// A protected structure for audio streams.
|
||||||
struct RtApiStream {
|
struct RtApiStream {
|
||||||
unsigned int device[2]; // Playback and record, respectively.
|
unsigned int deviceId[2]; // Playback and record, respectively.
|
||||||
void *apiHandle; // void pointer for API specific stream handle information
|
void *apiHandle; // void pointer for API specific stream handle information
|
||||||
StreamMode mode; // OUTPUT, INPUT, or DUPLEX.
|
StreamMode mode; // OUTPUT, INPUT, or DUPLEX.
|
||||||
StreamState state; // STOPPED, RUNNING, or CLOSED
|
StreamState state; // STOPPED, RUNNING, or CLOSED
|
||||||
@@ -789,7 +836,7 @@ protected:
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
RtApiStream()
|
RtApiStream()
|
||||||
:apiHandle(0), deviceBuffer(0) { device[0] = 11111; device[1] = 11111; }
|
:apiHandle(0), deviceBuffer(0) {} // { device[0] = std::string(); device[1] = std::string(); }
|
||||||
};
|
};
|
||||||
|
|
||||||
typedef S24 Int24;
|
typedef S24 Int24;
|
||||||
@@ -800,10 +847,22 @@ protected:
|
|||||||
|
|
||||||
std::ostringstream errorStream_;
|
std::ostringstream errorStream_;
|
||||||
std::string errorText_;
|
std::string errorText_;
|
||||||
|
RtAudioErrorCallback errorCallback_;
|
||||||
bool showWarnings_;
|
bool showWarnings_;
|
||||||
|
std::vector<RtAudio::DeviceInfo> deviceList_;
|
||||||
|
unsigned int currentDeviceId_;
|
||||||
RtApiStream stream_;
|
RtApiStream stream_;
|
||||||
bool firstErrorOccurred_;
|
|
||||||
|
|
||||||
|
/*!
|
||||||
|
Protected, api-specific method that attempts to probe all device
|
||||||
|
capabilities in a system. The function will not re-probe devices
|
||||||
|
that were previously found and probed. This function MUST be
|
||||||
|
implemented by all subclasses. If an error is encountered during
|
||||||
|
the probe, a "warning" message may be reported and the internal
|
||||||
|
list of devices may be incomplete.
|
||||||
|
*/
|
||||||
|
virtual void probeDevices( void );
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
Protected, api-specific method that attempts to open a device
|
Protected, api-specific method that attempts to open a device
|
||||||
with the given parameters. This function MUST be implemented by
|
with the given parameters. This function MUST be implemented by
|
||||||
@@ -811,7 +870,7 @@ protected:
|
|||||||
"warning" message is reported and FAILURE is returned. A
|
"warning" message is reported and FAILURE is returned. A
|
||||||
successful probe is indicated by a return value of SUCCESS.
|
successful probe is indicated by a return value of SUCCESS.
|
||||||
*/
|
*/
|
||||||
virtual bool probeDeviceOpen( unsigned int device, StreamMode mode, unsigned int channels,
|
virtual bool probeDeviceOpen( unsigned int deviceId, StreamMode mode, unsigned int channels,
|
||||||
unsigned int firstChannel, unsigned int sampleRate,
|
unsigned int firstChannel, unsigned int sampleRate,
|
||||||
RtAudioFormat format, unsigned int *bufferSize,
|
RtAudioFormat format, unsigned int *bufferSize,
|
||||||
RtAudio::StreamOptions *options );
|
RtAudio::StreamOptions *options );
|
||||||
@@ -822,14 +881,8 @@ protected:
|
|||||||
//! Protected common method to clear an RtApiStream structure.
|
//! Protected common method to clear an RtApiStream structure.
|
||||||
void clearStreamInfo();
|
void clearStreamInfo();
|
||||||
|
|
||||||
/*!
|
|
||||||
Protected common method that throws an RtAudioError (type =
|
|
||||||
INVALID_USE) if a stream is not open.
|
|
||||||
*/
|
|
||||||
void verifyStream( void );
|
|
||||||
|
|
||||||
//! Protected common error method to allow global control over error handling.
|
//! Protected common error method to allow global control over error handling.
|
||||||
void error( RtAudioError::Type type );
|
RtAudioErrorType error( RtAudioErrorType type );
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
Protected method used to perform format, channel number, and/or interleaving
|
Protected method used to perform format, channel number, and/or interleaving
|
||||||
@@ -855,328 +908,25 @@ protected:
|
|||||||
|
|
||||||
inline RtAudio::Api RtAudio :: getCurrentApi( void ) { return rtapi_->getCurrentApi(); }
|
inline RtAudio::Api RtAudio :: getCurrentApi( void ) { return rtapi_->getCurrentApi(); }
|
||||||
inline unsigned int RtAudio :: getDeviceCount( void ) { return rtapi_->getDeviceCount(); }
|
inline unsigned int RtAudio :: getDeviceCount( void ) { return rtapi_->getDeviceCount(); }
|
||||||
inline RtAudio::DeviceInfo RtAudio :: getDeviceInfo( unsigned int device ) { return rtapi_->getDeviceInfo( device ); }
|
inline RtAudio::DeviceInfo RtAudio :: getDeviceInfo( unsigned int deviceId ) { return rtapi_->getDeviceInfo( deviceId ); }
|
||||||
|
inline std::vector<unsigned int> RtAudio :: getDeviceIds( void ) { return rtapi_->getDeviceIds(); }
|
||||||
|
inline std::vector<std::string> RtAudio :: getDeviceNames( void ) { return rtapi_->getDeviceNames(); }
|
||||||
inline unsigned int RtAudio :: getDefaultInputDevice( void ) { return rtapi_->getDefaultInputDevice(); }
|
inline unsigned int RtAudio :: getDefaultInputDevice( void ) { return rtapi_->getDefaultInputDevice(); }
|
||||||
inline unsigned int RtAudio :: getDefaultOutputDevice( void ) { return rtapi_->getDefaultOutputDevice(); }
|
inline unsigned int RtAudio :: getDefaultOutputDevice( void ) { return rtapi_->getDefaultOutputDevice(); }
|
||||||
inline void RtAudio :: closeStream( void ) { return rtapi_->closeStream(); }
|
inline void RtAudio :: closeStream( void ) { return rtapi_->closeStream(); }
|
||||||
inline void RtAudio :: startStream( void ) { return rtapi_->startStream(); }
|
inline RtAudioErrorType RtAudio :: startStream( void ) { return rtapi_->startStream(); }
|
||||||
inline void RtAudio :: stopStream( void ) { return rtapi_->stopStream(); }
|
inline RtAudioErrorType RtAudio :: stopStream( void ) { return rtapi_->stopStream(); }
|
||||||
inline void RtAudio :: abortStream( void ) { return rtapi_->abortStream(); }
|
inline RtAudioErrorType RtAudio :: abortStream( void ) { return rtapi_->abortStream(); }
|
||||||
|
inline const std::string RtAudio :: getErrorText( void ) { return rtapi_->getErrorText(); }
|
||||||
inline bool RtAudio :: isStreamOpen( void ) const { return rtapi_->isStreamOpen(); }
|
inline bool RtAudio :: isStreamOpen( void ) const { return rtapi_->isStreamOpen(); }
|
||||||
inline bool RtAudio :: isStreamRunning( void ) const { return rtapi_->isStreamRunning(); }
|
inline bool RtAudio :: isStreamRunning( void ) const { return rtapi_->isStreamRunning(); }
|
||||||
inline long RtAudio :: getStreamLatency( void ) { return rtapi_->getStreamLatency(); }
|
inline long RtAudio :: getStreamLatency( void ) { return rtapi_->getStreamLatency(); }
|
||||||
inline unsigned int RtAudio :: getStreamSampleRate( void ) { return rtapi_->getStreamSampleRate(); }
|
inline unsigned int RtAudio :: getStreamSampleRate( void ) { return rtapi_->getStreamSampleRate(); }
|
||||||
inline double RtAudio :: getStreamTime( void ) { return rtapi_->getStreamTime(); }
|
inline double RtAudio :: getStreamTime( void ) { return rtapi_->getStreamTime(); }
|
||||||
inline void RtAudio :: setStreamTime( double time ) { return rtapi_->setStreamTime( time ); }
|
inline void RtAudio :: setStreamTime( double time ) { return rtapi_->setStreamTime( time ); }
|
||||||
|
inline void RtAudio :: setErrorCallback( RtAudioErrorCallback errorCallback ) { rtapi_->setErrorCallback( errorCallback ); }
|
||||||
inline void RtAudio :: showWarnings( bool value ) { rtapi_->showWarnings( value ); }
|
inline void RtAudio :: showWarnings( bool value ) { rtapi_->showWarnings( value ); }
|
||||||
|
|
||||||
// RtApi Subclass prototypes.
|
|
||||||
|
|
||||||
#if defined(__MACOSX_CORE__)
|
|
||||||
|
|
||||||
#include <CoreAudio/AudioHardware.h>
|
|
||||||
|
|
||||||
class RtApiCore: public RtApi
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
|
|
||||||
RtApiCore();
|
|
||||||
~RtApiCore();
|
|
||||||
RtAudio::Api getCurrentApi( void ) override { return RtAudio::MACOSX_CORE; }
|
|
||||||
unsigned int getDeviceCount( void ) override;
|
|
||||||
RtAudio::DeviceInfo getDeviceInfo( unsigned int device ) override;
|
|
||||||
unsigned int getDefaultOutputDevice( void ) override;
|
|
||||||
unsigned int getDefaultInputDevice( void ) override;
|
|
||||||
void closeStream( void ) override;
|
|
||||||
void startStream( void ) override;
|
|
||||||
void stopStream( void ) override;
|
|
||||||
void abortStream( void ) override;
|
|
||||||
|
|
||||||
// This function is intended for internal use only. It must be
|
|
||||||
// public because it is called by the internal callback handler,
|
|
||||||
// which is not a member of RtAudio. External use of this function
|
|
||||||
// will most likely produce highly undesirable results!
|
|
||||||
bool callbackEvent( AudioDeviceID deviceId,
|
|
||||||
const AudioBufferList *inBufferList,
|
|
||||||
const AudioBufferList *outBufferList );
|
|
||||||
|
|
||||||
private:
|
|
||||||
|
|
||||||
bool probeDeviceOpen( unsigned int device, StreamMode mode, unsigned int channels,
|
|
||||||
unsigned int firstChannel, unsigned int sampleRate,
|
|
||||||
RtAudioFormat format, unsigned int *bufferSize,
|
|
||||||
RtAudio::StreamOptions *options ) override;
|
|
||||||
static const char* getErrorCode( OSStatus code );
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if defined(__UNIX_JACK__)
|
|
||||||
|
|
||||||
class RtApiJack: public RtApi
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
|
|
||||||
RtApiJack();
|
|
||||||
~RtApiJack();
|
|
||||||
RtAudio::Api getCurrentApi( void ) override { return RtAudio::UNIX_JACK; }
|
|
||||||
unsigned int getDeviceCount( void ) override;
|
|
||||||
RtAudio::DeviceInfo getDeviceInfo( unsigned int device ) override;
|
|
||||||
void closeStream( void ) override;
|
|
||||||
void startStream( void ) override;
|
|
||||||
void stopStream( void ) override;
|
|
||||||
void abortStream( void ) override;
|
|
||||||
|
|
||||||
// This function is intended for internal use only. It must be
|
|
||||||
// public because it is called by the internal callback handler,
|
|
||||||
// which is not a member of RtAudio. External use of this function
|
|
||||||
// will most likely produce highly undesirable results!
|
|
||||||
bool callbackEvent( unsigned long nframes );
|
|
||||||
|
|
||||||
private:
|
|
||||||
|
|
||||||
bool probeDeviceOpen( unsigned int device, StreamMode mode, unsigned int channels,
|
|
||||||
unsigned int firstChannel, unsigned int sampleRate,
|
|
||||||
RtAudioFormat format, unsigned int *bufferSize,
|
|
||||||
RtAudio::StreamOptions *options ) override;
|
|
||||||
|
|
||||||
bool shouldAutoconnect_;
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if defined(__WINDOWS_ASIO__)
|
|
||||||
|
|
||||||
class RtApiAsio: public RtApi
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
|
|
||||||
RtApiAsio();
|
|
||||||
~RtApiAsio();
|
|
||||||
RtAudio::Api getCurrentApi( void ) override { return RtAudio::WINDOWS_ASIO; }
|
|
||||||
unsigned int getDeviceCount( void ) override;
|
|
||||||
unsigned int getDefaultOutputDevice( void ) override;
|
|
||||||
unsigned int getDefaultInputDevice( void ) override;
|
|
||||||
RtAudio::DeviceInfo getDeviceInfo( unsigned int device ) override;
|
|
||||||
void closeStream( void ) override;
|
|
||||||
void startStream( void ) override;
|
|
||||||
void stopStream( void ) override;
|
|
||||||
void abortStream( void ) override;
|
|
||||||
|
|
||||||
// This function is intended for internal use only. It must be
|
|
||||||
// public because it is called by the internal callback handler,
|
|
||||||
// which is not a member of RtAudio. External use of this function
|
|
||||||
// will most likely produce highly undesirable results!
|
|
||||||
bool callbackEvent( long bufferIndex );
|
|
||||||
|
|
||||||
private:
|
|
||||||
|
|
||||||
std::vector<RtAudio::DeviceInfo> devices_;
|
|
||||||
void saveDeviceInfo( void );
|
|
||||||
bool coInitialized_;
|
|
||||||
bool probeDeviceOpen( unsigned int device, StreamMode mode, unsigned int channels,
|
|
||||||
unsigned int firstChannel, unsigned int sampleRate,
|
|
||||||
RtAudioFormat format, unsigned int *bufferSize,
|
|
||||||
RtAudio::StreamOptions *options ) override;
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if defined(__WINDOWS_DS__)
|
|
||||||
|
|
||||||
class RtApiDs: public RtApi
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
|
|
||||||
RtApiDs();
|
|
||||||
~RtApiDs();
|
|
||||||
RtAudio::Api getCurrentApi( void ) override { return RtAudio::WINDOWS_DS; }
|
|
||||||
unsigned int getDeviceCount( void ) override;
|
|
||||||
unsigned int getDefaultOutputDevice( void ) override;
|
|
||||||
unsigned int getDefaultInputDevice( void ) override;
|
|
||||||
RtAudio::DeviceInfo getDeviceInfo( unsigned int device ) override;
|
|
||||||
void closeStream( void ) override;
|
|
||||||
void startStream( void ) override;
|
|
||||||
void stopStream( void ) override;
|
|
||||||
void abortStream( void ) override;
|
|
||||||
|
|
||||||
// This function is intended for internal use only. It must be
|
|
||||||
// public because it is called by the internal callback handler,
|
|
||||||
// which is not a member of RtAudio. External use of this function
|
|
||||||
// will most likely produce highly undesirable results!
|
|
||||||
void callbackEvent( void );
|
|
||||||
|
|
||||||
private:
|
|
||||||
|
|
||||||
bool coInitialized_;
|
|
||||||
bool buffersRolling;
|
|
||||||
long duplexPrerollBytes;
|
|
||||||
std::vector<struct DsDevice> dsDevices;
|
|
||||||
bool probeDeviceOpen( unsigned int device, StreamMode mode, unsigned int channels,
|
|
||||||
unsigned int firstChannel, unsigned int sampleRate,
|
|
||||||
RtAudioFormat format, unsigned int *bufferSize,
|
|
||||||
RtAudio::StreamOptions *options ) override;
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if defined(__WINDOWS_WASAPI__)
|
|
||||||
|
|
||||||
struct IMMDeviceEnumerator;
|
|
||||||
|
|
||||||
class RtApiWasapi : public RtApi
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
RtApiWasapi();
|
|
||||||
virtual ~RtApiWasapi();
|
|
||||||
|
|
||||||
RtAudio::Api getCurrentApi( void ) override { return RtAudio::WINDOWS_WASAPI; }
|
|
||||||
unsigned int getDeviceCount( void ) override;
|
|
||||||
RtAudio::DeviceInfo getDeviceInfo( unsigned int device ) override;
|
|
||||||
void closeStream( void ) override;
|
|
||||||
void startStream( void ) override;
|
|
||||||
void stopStream( void ) override;
|
|
||||||
void abortStream( void ) override;
|
|
||||||
|
|
||||||
private:
|
|
||||||
bool coInitialized_;
|
|
||||||
IMMDeviceEnumerator* deviceEnumerator_;
|
|
||||||
|
|
||||||
bool probeDeviceOpen( unsigned int device, StreamMode mode, unsigned int channels,
|
|
||||||
unsigned int firstChannel, unsigned int sampleRate,
|
|
||||||
RtAudioFormat format, unsigned int* bufferSize,
|
|
||||||
RtAudio::StreamOptions* options ) override;
|
|
||||||
|
|
||||||
static DWORD WINAPI runWasapiThread( void* wasapiPtr );
|
|
||||||
static DWORD WINAPI stopWasapiThread( void* wasapiPtr );
|
|
||||||
static DWORD WINAPI abortWasapiThread( void* wasapiPtr );
|
|
||||||
void wasapiThread();
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if defined(__LINUX_ALSA__)
|
|
||||||
|
|
||||||
class RtApiAlsa: public RtApi
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
|
|
||||||
RtApiAlsa();
|
|
||||||
~RtApiAlsa();
|
|
||||||
RtAudio::Api getCurrentApi() override { return RtAudio::LINUX_ALSA; }
|
|
||||||
unsigned int getDeviceCount( void ) override;
|
|
||||||
RtAudio::DeviceInfo getDeviceInfo( unsigned int device ) override;
|
|
||||||
void closeStream( void ) override;
|
|
||||||
void startStream( void ) override;
|
|
||||||
void stopStream( void ) override;
|
|
||||||
void abortStream( void ) override;
|
|
||||||
|
|
||||||
// This function is intended for internal use only. It must be
|
|
||||||
// public because it is called by the internal callback handler,
|
|
||||||
// which is not a member of RtAudio. External use of this function
|
|
||||||
// will most likely produce highly undesirable results!
|
|
||||||
void callbackEvent( void );
|
|
||||||
|
|
||||||
private:
|
|
||||||
|
|
||||||
std::vector<RtAudio::DeviceInfo> devices_;
|
|
||||||
void saveDeviceInfo( void );
|
|
||||||
bool probeDeviceOpen( unsigned int device, StreamMode mode, unsigned int channels,
|
|
||||||
unsigned int firstChannel, unsigned int sampleRate,
|
|
||||||
RtAudioFormat format, unsigned int *bufferSize,
|
|
||||||
RtAudio::StreamOptions *options ) override;
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if defined(__LINUX_PULSE__)
|
|
||||||
|
|
||||||
class RtApiPulse: public RtApi
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
~RtApiPulse();
|
|
||||||
RtAudio::Api getCurrentApi() override { return RtAudio::LINUX_PULSE; }
|
|
||||||
unsigned int getDeviceCount( void ) override;
|
|
||||||
RtAudio::DeviceInfo getDeviceInfo( unsigned int device ) override;
|
|
||||||
void closeStream( void ) override;
|
|
||||||
void startStream( void ) override;
|
|
||||||
void stopStream( void ) override;
|
|
||||||
void abortStream( void ) override;
|
|
||||||
|
|
||||||
// This function is intended for internal use only. It must be
|
|
||||||
// public because it is called by the internal callback handler,
|
|
||||||
// which is not a member of RtAudio. External use of this function
|
|
||||||
// will most likely produce highly undesirable results!
|
|
||||||
void callbackEvent( void );
|
|
||||||
|
|
||||||
private:
|
|
||||||
|
|
||||||
void collectDeviceInfo( void );
|
|
||||||
bool probeDeviceOpen( unsigned int device, StreamMode mode, unsigned int channels,
|
|
||||||
unsigned int firstChannel, unsigned int sampleRate,
|
|
||||||
RtAudioFormat format, unsigned int *bufferSize,
|
|
||||||
RtAudio::StreamOptions *options ) override;
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if defined(__LINUX_OSS__)
|
|
||||||
|
|
||||||
class RtApiOss: public RtApi
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
|
|
||||||
RtApiOss();
|
|
||||||
~RtApiOss();
|
|
||||||
RtAudio::Api getCurrentApi() override { return RtAudio::LINUX_OSS; }
|
|
||||||
unsigned int getDeviceCount( void ) override;
|
|
||||||
RtAudio::DeviceInfo getDeviceInfo( unsigned int device ) override;
|
|
||||||
void closeStream( void ) override;
|
|
||||||
void startStream( void ) override;
|
|
||||||
void stopStream( void ) override;
|
|
||||||
void abortStream( void ) override;
|
|
||||||
|
|
||||||
// This function is intended for internal use only. It must be
|
|
||||||
// public because it is called by the internal callback handler,
|
|
||||||
// which is not a member of RtAudio. External use of this function
|
|
||||||
// will most likely produce highly undesirable results!
|
|
||||||
void callbackEvent( void );
|
|
||||||
|
|
||||||
private:
|
|
||||||
|
|
||||||
bool probeDeviceOpen( unsigned int device, StreamMode mode, unsigned int channels,
|
|
||||||
unsigned int firstChannel, unsigned int sampleRate,
|
|
||||||
RtAudioFormat format, unsigned int *bufferSize,
|
|
||||||
RtAudio::StreamOptions *options ) override;
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if defined(__RTAUDIO_DUMMY__)
|
|
||||||
|
|
||||||
class RtApiDummy: public RtApi
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
|
|
||||||
RtApiDummy() { errorText_ = "RtApiDummy: This class provides no functionality."; error( RtAudioError::WARNING ); }
|
|
||||||
RtAudio::Api getCurrentApi( void ) override { return RtAudio::RTAUDIO_DUMMY; }
|
|
||||||
unsigned int getDeviceCount( void ) override { return 0; }
|
|
||||||
RtAudio::DeviceInfo getDeviceInfo( unsigned int /*device*/ ) override { RtAudio::DeviceInfo info; return info; }
|
|
||||||
void closeStream( void ) override {}
|
|
||||||
void startStream( void ) override {}
|
|
||||||
void stopStream( void ) override {}
|
|
||||||
void abortStream( void ) override {}
|
|
||||||
|
|
||||||
private:
|
|
||||||
|
|
||||||
bool probeDeviceOpen( unsigned int /*device*/, StreamMode /*mode*/, unsigned int /*channels*/,
|
|
||||||
unsigned int /*firstChannel*/, unsigned int /*sampleRate*/,
|
|
||||||
RtAudioFormat /*format*/, unsigned int * /*bufferSize*/,
|
|
||||||
RtAudio::StreamOptions * /*options*/ ) override { return false; }
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// Indentation settings for Vim and Emacs
|
// Indentation settings for Vim and Emacs
|
||||||
|
|||||||
@@ -9,7 +9,7 @@
|
|||||||
RtMidi WWW site: http://www.music.mcgill.ca/~gary/rtmidi/
|
RtMidi WWW site: http://www.music.mcgill.ca/~gary/rtmidi/
|
||||||
|
|
||||||
RtMidi: realtime MIDI i/o C++ classes
|
RtMidi: realtime MIDI i/o C++ classes
|
||||||
Copyright (c) 2003-2021 Gary P. Scavone
|
Copyright (c) 2003-2023 Gary P. Scavone
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person
|
Permission is hereby granted, free of charge, to any person
|
||||||
obtaining a copy of this software and associated documentation files
|
obtaining a copy of this software and associated documentation files
|
||||||
@@ -58,7 +58,24 @@
|
|||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define RTMIDI_VERSION "5.0.0"
|
#define RTMIDI_VERSION_MAJOR 6
|
||||||
|
#define RTMIDI_VERSION_MINOR 0
|
||||||
|
#define RTMIDI_VERSION_PATCH 0
|
||||||
|
#define RTMIDI_VERSION_BETA 0
|
||||||
|
|
||||||
|
#define RTMIDI_TOSTRING2(n) #n
|
||||||
|
#define RTMIDI_TOSTRING(n) RTMIDI_TOSTRING2(n)
|
||||||
|
|
||||||
|
#if RTMIDI_VERSION_BETA > 0
|
||||||
|
#define RTMIDI_VERSION RTMIDI_TOSTRING(RTMIDI_VERSION_MAJOR) \
|
||||||
|
"." RTMIDI_TOSTRING(RTMIDI_VERSION_MINOR) \
|
||||||
|
"." RTMIDI_TOSTRING(RTMIDI_VERSION_PATCH) \
|
||||||
|
"beta" RTMIDI_TOSTRING(RTMIDI_VERSION_BETA)
|
||||||
|
#else
|
||||||
|
#define RTMIDI_VERSION RTMIDI_TOSTRING(RTMIDI_VERSION_MAJOR) \
|
||||||
|
"." RTMIDI_TOSTRING(RTMIDI_VERSION_MINOR) \
|
||||||
|
"." RTMIDI_TOSTRING(RTMIDI_VERSION_PATCH)
|
||||||
|
#endif
|
||||||
|
|
||||||
#include <exception>
|
#include <exception>
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
@@ -86,12 +103,12 @@ class RTMIDI_DLL_PUBLIC RtMidiError : public std::exception
|
|||||||
UNSPECIFIED, /*!< The default, unspecified error type. */
|
UNSPECIFIED, /*!< The default, unspecified error type. */
|
||||||
NO_DEVICES_FOUND, /*!< No devices found on system. */
|
NO_DEVICES_FOUND, /*!< No devices found on system. */
|
||||||
INVALID_DEVICE, /*!< An invalid device ID was specified. */
|
INVALID_DEVICE, /*!< An invalid device ID was specified. */
|
||||||
MEMORY_ERROR, /*!< An error occured during memory allocation. */
|
MEMORY_ERROR, /*!< An error occurred during memory allocation. */
|
||||||
INVALID_PARAMETER, /*!< An invalid parameter was specified to a function. */
|
INVALID_PARAMETER, /*!< An invalid parameter was specified to a function. */
|
||||||
INVALID_USE, /*!< The function was called incorrectly. */
|
INVALID_USE, /*!< The function was called incorrectly. */
|
||||||
DRIVER_ERROR, /*!< A system driver error occured. */
|
DRIVER_ERROR, /*!< A system driver error occurred. */
|
||||||
SYSTEM_ERROR, /*!< A system error occured. */
|
SYSTEM_ERROR, /*!< A system error occurred. */
|
||||||
THREAD_ERROR /*!< A thread error occured. */
|
THREAD_ERROR /*!< A thread error occurred. */
|
||||||
};
|
};
|
||||||
|
|
||||||
//! The constructor.
|
//! The constructor.
|
||||||
@@ -144,6 +161,8 @@ class RTMIDI_DLL_PUBLIC RtMidi
|
|||||||
WINDOWS_MM, /*!< The Microsoft Multimedia MIDI API. */
|
WINDOWS_MM, /*!< The Microsoft Multimedia MIDI API. */
|
||||||
RTMIDI_DUMMY, /*!< A compilable but non-functional API. */
|
RTMIDI_DUMMY, /*!< A compilable but non-functional API. */
|
||||||
WEB_MIDI_API, /*!< W3C Web MIDI API. */
|
WEB_MIDI_API, /*!< W3C Web MIDI API. */
|
||||||
|
WINDOWS_UWP, /*!< The Microsoft Universal Windows Platform MIDI API. */
|
||||||
|
ANDROID_AMIDI, /*!< Native Android MIDI API. */
|
||||||
NUM_APIS /*!< Number of values in this enum. */
|
NUM_APIS /*!< Number of values in this enum. */
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -206,9 +225,9 @@ class RTMIDI_DLL_PUBLIC RtMidi
|
|||||||
*/
|
*/
|
||||||
virtual bool isPortOpen( void ) const = 0;
|
virtual bool isPortOpen( void ) const = 0;
|
||||||
|
|
||||||
//! Set an error callback function to be invoked when an error has occured.
|
//! Set an error callback function to be invoked when an error has occurred.
|
||||||
/*!
|
/*!
|
||||||
The callback function will be called whenever an error has occured. It is best
|
The callback function will be called whenever an error has occurred. It is best
|
||||||
to set the error callback function before opening a port.
|
to set the error callback function before opening a port.
|
||||||
*/
|
*/
|
||||||
virtual void setErrorCallback( RtMidiErrorCallback errorCallback = NULL, void *userData = 0 ) = 0;
|
virtual void setErrorCallback( RtMidiErrorCallback errorCallback = NULL, void *userData = 0 ) = 0;
|
||||||
@@ -373,9 +392,9 @@ class RTMIDI_DLL_PUBLIC RtMidiIn : public RtMidi
|
|||||||
*/
|
*/
|
||||||
double getMessage( std::vector<unsigned char> *message );
|
double getMessage( std::vector<unsigned char> *message );
|
||||||
|
|
||||||
//! Set an error callback function to be invoked when an error has occured.
|
//! Set an error callback function to be invoked when an error has occurred.
|
||||||
/*!
|
/*!
|
||||||
The callback function will be called whenever an error has occured. It is best
|
The callback function will be called whenever an error has occurred. It is best
|
||||||
to set the error callback function before opening a port.
|
to set the error callback function before opening a port.
|
||||||
*/
|
*/
|
||||||
virtual void setErrorCallback( RtMidiErrorCallback errorCallback = NULL, void *userData = 0 );
|
virtual void setErrorCallback( RtMidiErrorCallback errorCallback = NULL, void *userData = 0 );
|
||||||
@@ -491,9 +510,9 @@ class RTMIDI_DLL_PUBLIC RtMidiOut : public RtMidi
|
|||||||
*/
|
*/
|
||||||
void sendMessage( const unsigned char *message, size_t size );
|
void sendMessage( const unsigned char *message, size_t size );
|
||||||
|
|
||||||
//! Set an error callback function to be invoked when an error has occured.
|
//! Set an error callback function to be invoked when an error has occurred.
|
||||||
/*!
|
/*!
|
||||||
The callback function will be called whenever an error has occured. It is best
|
The callback function will be called whenever an error has occurred. It is best
|
||||||
to set the error callback function before opening a port.
|
to set the error callback function before opening a port.
|
||||||
*/
|
*/
|
||||||
virtual void setErrorCallback( RtMidiErrorCallback errorCallback = NULL, void *userData = 0 );
|
virtual void setErrorCallback( RtMidiErrorCallback errorCallback = NULL, void *userData = 0 );
|
||||||
@@ -559,7 +578,7 @@ class RTMIDI_DLL_PUBLIC MidiInApi : public MidiApi
|
|||||||
void setCallback( RtMidiIn::RtMidiCallback callback, void *userData );
|
void setCallback( RtMidiIn::RtMidiCallback callback, void *userData );
|
||||||
void cancelCallback( void );
|
void cancelCallback( void );
|
||||||
virtual void ignoreTypes( bool midiSysex, bool midiTime, bool midiSense );
|
virtual void ignoreTypes( bool midiSysex, bool midiTime, bool midiSense );
|
||||||
double getMessage( std::vector<unsigned char> *message );
|
virtual double getMessage( std::vector<unsigned char> *message );
|
||||||
virtual void setBufferSize( unsigned int size, unsigned int count );
|
virtual void setBufferSize( unsigned int size, unsigned int count );
|
||||||
|
|
||||||
// A MIDI structure used internally by the class to store incoming
|
// A MIDI structure used internally by the class to store incoming
|
||||||
|
|||||||
@@ -24,7 +24,7 @@ namespace stk {
|
|||||||
that takes an StkFrames object for multi-channel and/or
|
that takes an StkFrames object for multi-channel and/or
|
||||||
multi-frame data.
|
multi-frame data.
|
||||||
|
|
||||||
by Perry R. Cook and Gary P. Scavone, 1995--2021.
|
by Perry R. Cook and Gary P. Scavone, 1995--2023.
|
||||||
*/
|
*/
|
||||||
/***************************************************/
|
/***************************************************/
|
||||||
|
|
||||||
@@ -33,14 +33,14 @@ class RtWvIn : public WvIn
|
|||||||
public:
|
public:
|
||||||
//! Default constructor.
|
//! Default constructor.
|
||||||
/*!
|
/*!
|
||||||
The default \e device argument value (zero) will select the
|
The default \e deviceIndex argument value (zero) will select the
|
||||||
default input device on your system. The first device enumerated
|
default input device on your system. The first device enumerated
|
||||||
by the underlying audio API is specified with a value of one. The
|
by the underlying audio API is specified with a value of one. The
|
||||||
default buffer size of RT_BUFFER_SIZE is defined in Stk.h. An
|
default buffer size of RT_BUFFER_SIZE is defined in Stk.h. An
|
||||||
StkError will be thrown if an error occurs duing instantiation.
|
StkError will be thrown if an error occurs duing instantiation.
|
||||||
*/
|
*/
|
||||||
RtWvIn( unsigned int nChannels = 1, StkFloat sampleRate = Stk::sampleRate(),
|
RtWvIn( unsigned int nChannels = 1, StkFloat sampleRate = Stk::sampleRate(),
|
||||||
int device = 0, int bufferFrames = RT_BUFFER_SIZE, int nBuffers = 20 );
|
int deviceIndex = 0, int bufferFrames = RT_BUFFER_SIZE, int nBuffers = 20 );
|
||||||
|
|
||||||
//! Class destructor.
|
//! Class destructor.
|
||||||
~RtWvIn();
|
~RtWvIn();
|
||||||
|
|||||||
@@ -23,7 +23,7 @@ namespace stk {
|
|||||||
that takes a reference to an StkFrames object for multi-channel
|
that takes a reference to an StkFrames object for multi-channel
|
||||||
and/or multi-frame data.
|
and/or multi-frame data.
|
||||||
|
|
||||||
by Perry R. Cook and Gary P. Scavone, 1995--2021.
|
by Perry R. Cook and Gary P. Scavone, 1995--2023.
|
||||||
*/
|
*/
|
||||||
/***************************************************/
|
/***************************************************/
|
||||||
|
|
||||||
@@ -33,14 +33,14 @@ class RtWvOut : public WvOut
|
|||||||
|
|
||||||
//! Default constructor.
|
//! Default constructor.
|
||||||
/*!
|
/*!
|
||||||
The default \e device argument value (zero) will select the
|
The default \e deviceIndex argument value (zero) will select the
|
||||||
default output device on your system. The first device enumerated
|
default output device on your system. The first device enumerated
|
||||||
by the underlying audio API is specified with a value of one. The
|
by the underlying audio API is specified with a value of one. The
|
||||||
default buffer size of RT_BUFFER_SIZE is defined in Stk.h. An
|
default buffer size of RT_BUFFER_SIZE is defined in Stk.h. An
|
||||||
StkError will be thrown if an error occurs duing instantiation.
|
StkError will be thrown if an error occurs duing instantiation.
|
||||||
*/
|
*/
|
||||||
RtWvOut( unsigned int nChannels = 1, StkFloat sampleRate = Stk::sampleRate(),
|
RtWvOut( unsigned int nChannels = 1, StkFloat sampleRate = Stk::sampleRate(),
|
||||||
int device = 0, int bufferFrames = RT_BUFFER_SIZE, int nBuffers = 20 );
|
int deviceIndex = 0, int bufferFrames = RT_BUFFER_SIZE, int nBuffers = 20 );
|
||||||
|
|
||||||
//! Class destructor.
|
//! Class destructor.
|
||||||
~RtWvOut();
|
~RtWvOut();
|
||||||
|
|||||||
@@ -9,7 +9,7 @@
|
|||||||
|
|
||||||
where <name> is the string used in the SKINI stream.
|
where <name> is the string used in the SKINI stream.
|
||||||
|
|
||||||
by Perry R. Cook, 1995--2021.
|
by Perry R. Cook, 1995--2023.
|
||||||
*/
|
*/
|
||||||
/*********************************************************/
|
/*********************************************************/
|
||||||
|
|
||||||
|
|||||||
@@ -15,7 +15,7 @@ namespace stk {
|
|||||||
This instrument provides an ADSR envelope, a one-pole filter, and
|
This instrument provides an ADSR envelope, a one-pole filter, and
|
||||||
structures for an arbitrary number of attack and looped files.
|
structures for an arbitrary number of attack and looped files.
|
||||||
|
|
||||||
by Perry R. Cook and Gary P. Scavone, 1995--2021.
|
by Perry R. Cook and Gary P. Scavone, 1995--2023.
|
||||||
*/
|
*/
|
||||||
/***************************************************/
|
/***************************************************/
|
||||||
|
|
||||||
|
|||||||
@@ -44,7 +44,7 @@ namespace stk {
|
|||||||
- Vibrato Gain = 1
|
- Vibrato Gain = 1
|
||||||
- Breath Pressure = 128
|
- Breath Pressure = 128
|
||||||
|
|
||||||
by Perry R. Cook and Gary P. Scavone, 1995--2021.
|
by Perry R. Cook and Gary P. Scavone, 1995--2023.
|
||||||
*/
|
*/
|
||||||
/***************************************************/
|
/***************************************************/
|
||||||
|
|
||||||
|
|||||||
@@ -53,7 +53,7 @@ namespace stk {
|
|||||||
- Water Drops = 21
|
- Water Drops = 21
|
||||||
- Tuned Bamboo Chimes = 22
|
- Tuned Bamboo Chimes = 22
|
||||||
|
|
||||||
by Perry R. Cook with updates by Gary Scavone, 1995--2021.
|
by Perry R. Cook with updates by Gary Scavone, 1995--2023.
|
||||||
*/
|
*/
|
||||||
/***************************************************/
|
/***************************************************/
|
||||||
|
|
||||||
|
|||||||
@@ -25,7 +25,7 @@ namespace stk {
|
|||||||
- Envelope Rate = 11
|
- Envelope Rate = 11
|
||||||
- Gain = 128
|
- Gain = 128
|
||||||
|
|
||||||
by Perry R. Cook and Gary P. Scavone, 1995--2021.
|
by Perry R. Cook and Gary P. Scavone, 1995--2023.
|
||||||
*/
|
*/
|
||||||
/***************************************************/
|
/***************************************************/
|
||||||
|
|
||||||
|
|||||||
@@ -18,7 +18,7 @@ namespace stk {
|
|||||||
|
|
||||||
The "table" length, set in SineWave.h, is 2048 samples by default.
|
The "table" length, set in SineWave.h, is 2048 samples by default.
|
||||||
|
|
||||||
by Perry R. Cook and Gary P. Scavone, 1995--2021.
|
by Perry R. Cook and Gary P. Scavone, 1995--2023.
|
||||||
*/
|
*/
|
||||||
/***************************************************/
|
/***************************************************/
|
||||||
|
|
||||||
|
|||||||
@@ -18,7 +18,7 @@ namespace stk {
|
|||||||
Within STK, it is used as an excitation source for other
|
Within STK, it is used as an excitation source for other
|
||||||
instruments.
|
instruments.
|
||||||
|
|
||||||
by Perry R. Cook and Gary P. Scavone, 1995--2021.
|
by Perry R. Cook and Gary P. Scavone, 1995--2023.
|
||||||
*/
|
*/
|
||||||
/***************************************************/
|
/***************************************************/
|
||||||
|
|
||||||
|
|||||||
@@ -25,7 +25,7 @@ namespace stk {
|
|||||||
Stanford, bearing the names of Karplus and/or
|
Stanford, bearing the names of Karplus and/or
|
||||||
Strong.
|
Strong.
|
||||||
|
|
||||||
by Perry R. Cook and Gary P. Scavone, 1995--2021.
|
by Perry R. Cook and Gary P. Scavone, 1995--2023.
|
||||||
*/
|
*/
|
||||||
/***************************************************/
|
/***************************************************/
|
||||||
|
|
||||||
|
|||||||
@@ -31,7 +31,7 @@ namespace stk {
|
|||||||
|
|
||||||
\sa \ref skini
|
\sa \ref skini
|
||||||
|
|
||||||
by Perry R. Cook and Gary P. Scavone, 1995--2021.
|
by Perry R. Cook and Gary P. Scavone, 1995--2023.
|
||||||
*/
|
*/
|
||||||
/***************************************************/
|
/***************************************************/
|
||||||
|
|
||||||
|
|||||||
@@ -31,7 +31,7 @@ namespace stk {
|
|||||||
number of static functions for use with external socket
|
number of static functions for use with external socket
|
||||||
descriptors.
|
descriptors.
|
||||||
|
|
||||||
by Perry R. Cook and Gary P. Scavone, 1995--2021.
|
by Perry R. Cook and Gary P. Scavone, 1995--2023.
|
||||||
*/
|
*/
|
||||||
/***************************************************/
|
/***************************************************/
|
||||||
|
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ namespace stk {
|
|||||||
This class implements a spherical ball with
|
This class implements a spherical ball with
|
||||||
radius, mass, position, and velocity parameters.
|
radius, mass, position, and velocity parameters.
|
||||||
|
|
||||||
by Perry R. Cook, 1995--2021.
|
by Perry R. Cook, 1995--2023.
|
||||||
*/
|
*/
|
||||||
/***************************************************/
|
/***************************************************/
|
||||||
|
|
||||||
|
|||||||
@@ -29,7 +29,7 @@ namespace stk {
|
|||||||
- String Sustain = 11
|
- String Sustain = 11
|
||||||
- String Stretch = 1
|
- String Stretch = 1
|
||||||
|
|
||||||
by Perry R. Cook and Gary P. Scavone, 1995--2021.
|
by Perry R. Cook and Gary P. Scavone, 1995--2023.
|
||||||
*/
|
*/
|
||||||
/***************************************************/
|
/***************************************************/
|
||||||
|
|
||||||
|
|||||||
@@ -41,7 +41,7 @@ namespace stk {
|
|||||||
STK WWW site: http://ccrma.stanford.edu/software/stk/
|
STK WWW site: http://ccrma.stanford.edu/software/stk/
|
||||||
|
|
||||||
The Synthesis ToolKit in C++ (STK)
|
The Synthesis ToolKit in C++ (STK)
|
||||||
Copyright (c) 1995--2021 Perry R. Cook and Gary P. Scavone
|
Copyright (c) 1995--2023 Perry R. Cook and Gary P. Scavone
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person
|
Permission is hereby granted, free of charge, to any person
|
||||||
obtaining a copy of this software and associated documentation files
|
obtaining a copy of this software and associated documentation files
|
||||||
@@ -271,7 +271,7 @@ protected:
|
|||||||
Possible future improvements in this class could include functions
|
Possible future improvements in this class could include functions
|
||||||
to convert to and return other data types.
|
to convert to and return other data types.
|
||||||
|
|
||||||
by Perry R. Cook and Gary P. Scavone, 1995--2021.
|
by Perry R. Cook and Gary P. Scavone, 1995--2023.
|
||||||
*/
|
*/
|
||||||
/***************************************************/
|
/***************************************************/
|
||||||
|
|
||||||
@@ -622,7 +622,7 @@ const StkFloat ONE_OVER_128 = 0.0078125;
|
|||||||
#if defined(__WINDOWS_DS__) || defined(__WINDOWS_ASIO__) || defined(__WINDOWS_MM__)
|
#if defined(__WINDOWS_DS__) || defined(__WINDOWS_ASIO__) || defined(__WINDOWS_MM__)
|
||||||
#define __OS_WINDOWS__
|
#define __OS_WINDOWS__
|
||||||
#define __STK_REALTIME__
|
#define __STK_REALTIME__
|
||||||
#elif defined(__LINUX_OSS__) || defined(__LINUX_ALSA__) || defined(__UNIX_JACK__)
|
#elif defined(__LINUX_OSS__) || defined(__LINUX_ALSA__) || defined(__UNIX_JACK__) || defined(__LINUX_PULSE__)
|
||||||
#define __OS_LINUX__
|
#define __OS_LINUX__
|
||||||
#define __STK_REALTIME__
|
#define __STK_REALTIME__
|
||||||
#elif defined(__IRIX_AL__)
|
#elif defined(__IRIX_AL__)
|
||||||
|
|||||||
@@ -17,7 +17,7 @@ namespace stk {
|
|||||||
A non-interpolating delay line is typically used in fixed
|
A non-interpolating delay line is typically used in fixed
|
||||||
delay-length applications, such as for reverberation.
|
delay-length applications, such as for reverberation.
|
||||||
|
|
||||||
by Perry R. Cook and Gary P. Scavone, 1995--2021.
|
by Perry R. Cook and Gary P. Scavone, 1995--2023.
|
||||||
*/
|
*/
|
||||||
/***************************************************/
|
/***************************************************/
|
||||||
|
|
||||||
|
|||||||
@@ -26,7 +26,7 @@ namespace stk {
|
|||||||
less than or equal to zero indicate a closed
|
less than or equal to zero indicate a closed
|
||||||
or lost connection or the occurence of an error.
|
or lost connection or the occurence of an error.
|
||||||
|
|
||||||
by Perry R. Cook and Gary P. Scavone, 1995--2021.
|
by Perry R. Cook and Gary P. Scavone, 1995--2023.
|
||||||
*/
|
*/
|
||||||
/***************************************************/
|
/***************************************************/
|
||||||
|
|
||||||
|
|||||||
@@ -26,7 +26,7 @@ namespace stk {
|
|||||||
less than or equal to zero indicate a closed
|
less than or equal to zero indicate a closed
|
||||||
or lost connection or the occurence of an error.
|
or lost connection or the occurence of an error.
|
||||||
|
|
||||||
by Perry R. Cook and Gary P. Scavone, 1995--2021.
|
by Perry R. Cook and Gary P. Scavone, 1995--2023.
|
||||||
*/
|
*/
|
||||||
/***************************************************/
|
/***************************************************/
|
||||||
|
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user