Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Ported rtAudio to portaudio for evaluation. #40

Closed
wants to merge 5 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -84,7 +84,7 @@ find_package(FreeType REQUIRED)
find_package(OCIO REQUIRED)
find_package(OTIO REQUIRED)
find_package(libsamplerate REQUIRED)
find_package(RtAudio REQUIRED)
find_package(PortAudio REQUIRED)
find_package(JPEG)
find_package(TIFF)
find_package(PNG)
Expand Down
85 changes: 85 additions & 0 deletions cmake/Modules/FindPortAudio.cmake
Original file line number Diff line number Diff line change
@@ -0,0 +1,85 @@
# Find the Port library.
#
# This module defines the following variables:
#
# * portaudio_FOUND
# * portaudio_INCLUDE_DIRS
# * portaudio_LIBRARIES
#
# This module defines the following imported targets:
#
# * portaudio::portaudio
#
# This module defines the following interfaces:
#
# * portaudio

find_path(portaudio_INCLUDE_DIR NAMES portaudio.h)
set(portaudio_INCLUDE_DIRS ${portaudio_INCLUDE_DIR})

find_library(portaudio_LIBRARY NAMES portaudio)
set(portaudio_LIBRARIES ${portaudio_LIBRARY} ${portaudio_LINK_LIBRARIES})
if(WIN32)
elseif(APPLE)
find_library(CORE_FOUNDATION CoreFoundation REQUIRED)
find_library(CORE_AUDIO CoreAudio)
find_library(AUDIO_TOOLBOX AudioToolbox)
list(APPEND portaudio_LIBRARIES ${AUDIO_TOOLBOX} ${CORE_AUDIO} ${CORE_FOUNDATION})
else()
find_package(Threads REQUIRED)
find_package(X11 REQUIRED)
find_package(ALSA REQUIRED)
set(portaudio_RPM_PACKAGE_REQUIRES "alsa-lib")
set(portaudio_DEBIAN_PACKAGE_DEPENDS "libasound2")
find_library(PULSE_LIB pulse)
find_library(PULSESIMPLE_LIB pulse-simple)
if(PULSE_LIB AND PULSESIMPLE_LIB)
string(APPEND portaudio_RPM_PACKAGE_REQUIRES ", pulseaudio-libs")
string(APPEND portaudio_DEBIAN_PACKAGE_DEPENDS ", libpulse0")
list(APPEND portaudio_INCLUDE_DIRS ${PULSE_INCLUDE_DIR} ${PULSESIMPLE_INCLUDE_DIR})
list(APPEND portaudio_LIBRARIES ${PULSE_LIB} ${PULSESIMPLE_LIB})
endif()
find_library(JACK_LIB jack)
if(JACK_LIB)
list(APPEND portaudio_INCLUDE_DIRS ${JACK_INCLUDE_DIR})
list(APPEND portaudio_LIBRARIES ${JACK_LIB})
endif()
list(APPEND portaudio_LIBRARIES ${CMAKE_THREAD_LIBS_INIT})
endif()

include(FindPackageHandleStandardArgs)
find_package_handle_standard_args(
PortAudio
REQUIRED_VARS portaudio_INCLUDE_DIR portaudio_LIBRARY)
mark_as_advanced(portaudio_INCLUDE_DIR portaudio_LIBRARY)

if(portaudio_FOUND AND NOT TARGET portaudio::portaudio)
add_library(portaudio::portaudio UNKNOWN IMPORTED)
set(portaudio_INTERFACE_INCLUDE_DIRECTORIES ${portaudio_INCLUDE_DIR})
set(portaudio_INTERFACE_LINK_LIBRARIES)
if(WIN32)
elseif(APPLE)
list(APPEND portaudio_INTERFACE_LINK_LIBRARIES ${AUDIO_TOOLBOX} ${CORE_AUDIO} ${CORE_FOUNDATION})
else()
list(APPEND portaudio_INTERFACE_INCLUDE_DIRECTORIES ${ALSA_INCLUDE_DIR})
list(APPEND portaudio_INTERFACE_LINK_LIBRARIES ${ALSA_LIBRARY})
if(PULSE_LIB AND PULSESIMPLE_LIB)
list(APPEND portaudio_INTERFACE_INCLUDE_DIRECTORIES ${PULSE_INCLUDE_DIR} ${PULSESIMPLE_INCLUDE_DIR})
list(APPEND portaudio_INTERFACE_LINK_LIBRARIES ${PULSE_LIB} ${PULSESIMPLE_LIB})
endif()
if(JACK_LIB)
list(APPEND portaudio_INTERFACE_INCLUDE_DIRECTORIES ${JACK_INCLUDE_DIR})
list(APPEND portaudio_INTERFACE_LINK_LIBRARIES ${JACK_LIB})
endif()
list(APPEND portaudio_INTERFACE_LINK_LIBRARIES ${CMAKE_THREAD_LIBS_INIT})
endif()
set_target_properties(portaudio::portaudio PROPERTIES
IMPORTED_LOCATION "${portaudio_LIBRARY}"
INTERFACE_COMPILE_DEFINITIONS portaudio_FOUND
INTERFACE_INCLUDE_DIRECTORIES "${portaudio_INTERFACE_INCLUDE_DIRECTORIES}"
INTERFACE_LINK_LIBRARIES "${portaudio_INTERFACE_LINK_LIBRARIES}")
endif()
if(portaudio_FOUND AND NOT TARGET portaudio)
add_library(portaudio INTERFACE)
target_link_libraries(portaudio INTERFACE portaudio::portaudio)
endif()
2 changes: 1 addition & 1 deletion etc/SuperBuild/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -63,7 +63,7 @@ list(APPEND TLRENDER_EXTERNAL_DEPS FreeType)
list(APPEND TLRENDER_EXTERNAL_DEPS OCIO)
list(APPEND TLRENDER_EXTERNAL_DEPS OTIO)
list(APPEND TLRENDER_EXTERNAL_DEPS libsamplerate)
list(APPEND TLRENDER_EXTERNAL_DEPS RtAudio)
list(APPEND TLRENDER_EXTERNAL_DEPS PortAudio)
if((TLRENDER_BUILD_FFmpeg OR TLRENDER_BUILD_JPEG) AND NOT WIN32)
list(APPEND TLRENDER_EXTERNAL_DEPS NASM)
endif()
Expand Down
27 changes: 27 additions & 0 deletions etc/SuperBuild/cmake/Modules/BuildPortAudio.cmake
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
include(ExternalProject)

set(portaudio_GIT_REPOSITORY "https://github.com/PortAudio/portaudio.git")
set(portaudio_GIT_TAG "v19.7.0") # 2020/06/07

set(portaudio_ARGS
${TLRENDER_EXTERNAL_ARGS}
-DCMAKE_INSTALL_LIBDIR=lib
-DCMAKE_DEBUG_POSTFIX=
-DPORTAUDIO_BUILD_TESTING=FALSE
-DPORTAUDIO_STATIC_MSVCRT=FALSE)
if(BUILD_SHARED_LIBS)
list(APPEND portaudio_ARGS -DPORTAUDIO_BUILD_SHARED_LIBS=TRUE)
else()
list(APPEND portaudio_ARGS -DPORTAUDIO_BUILD_STATIC_LIBS=TRUE)
endif()
if(APPLE)
list(APPEND portaudio_ARGS PORTAUDIO_API_JACK=OFF)
endif()

ExternalProject_Add(
PortAudio
PREFIX ${CMAKE_CURRENT_BINARY_DIR}/PortAudio
GIT_REPOSITORY ${portaudio_GIT_REPOSITORY}
GIT_TAG ${portaudio_GIT_TAG}
LIST_SEPARATOR |
CMAKE_ARGS ${portaudio_ARGS})
13 changes: 7 additions & 6 deletions lib/tlCore/Audio.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
#include <tlCore/String.h>

#include <array>
#include <iostream>

namespace tl
{
Expand Down Expand Up @@ -71,15 +72,15 @@ namespace tl
return value < data.size() ? data[value] : DataType::None;
}

RtAudioFormat toRtAudio(DataType value) noexcept
PaSampleFormat toPortAudio(DataType value) noexcept
{
RtAudioFormat out = 0;
PaSampleFormat out = paInt8;
switch (value)
{
case DataType::S16: out = RTAUDIO_SINT16; break;
case DataType::S32: out = RTAUDIO_SINT32; break;
case DataType::F32: out = RTAUDIO_FLOAT32; break;
case DataType::F64: out = RTAUDIO_FLOAT64; break;
case DataType::S16: out = paInt16; break;
case DataType::S32: out = paInt32; break;
case DataType::F32: out = paFloat32; break;
case DataType::F64: out = paFloat32; break;
default: break;
}
return out;
Expand Down
6 changes: 3 additions & 3 deletions lib/tlCore/Audio.h
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
#include <tlCore/Range.h>
#include <tlCore/Util.h>

#include <rtaudio/RtAudio.h>
#include <portaudio.h>

#include <limits>
#include <list>
Expand Down Expand Up @@ -66,8 +66,8 @@ namespace tl
//! Determine the floating point data type for a given byte count.
DataType getFloatType(uint8_t) noexcept;

//! Convert a data type to a RtAudio type.
RtAudioFormat toRtAudio(DataType) noexcept;
//! Convert a data type to a PortAudio type.
PaSampleFormat toPortAudio(DataType) noexcept;

///@}

Expand Down
Loading