parent
aa2aad7f09
commit
d63895fc88
@ -1,3 +0,0 @@
|
|||||||
build
|
|
||||||
third_party/archives/
|
|
||||||
third_party/install/
|
|
@ -1,14 +0,0 @@
|
|||||||
cmake_minimum_required(VERSION 3.16 FATAL_ERROR)
|
|
||||||
|
|
||||||
project(paddleaudio VERSION 0.1)
|
|
||||||
|
|
||||||
string(FIND "${CMAKE_CXX_FLAGS}" "-std=c++" env_cxx_standard)
|
|
||||||
|
|
||||||
set(CMAKE_CXX_STANDARD 14)
|
|
||||||
set(CMAKE_C_STANDARD 11)
|
|
||||||
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
|
|
||||||
set(CMAKE_POSITION_INDEPENDENT_CODE ON)
|
|
||||||
option(BUILD_SOX "Build libsox statically" ON)
|
|
||||||
|
|
||||||
add_subdirectory(third_party)
|
|
||||||
add_subdirectory(audio/csrc)
|
|
@ -1,34 +0,0 @@
|
|||||||
find_package(Python3 COMPONENTS Interpreter Development)
|
|
||||||
find_package(pybind11 CONFIG)
|
|
||||||
|
|
||||||
function(define_extension name sources libraries)
|
|
||||||
add_library(${name} SHARED ${sources})
|
|
||||||
target_include_directories(
|
|
||||||
${name} PRIVATE ${PROJECT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR} ${Python3_INCLUDE_DIRS} ${pybind11_INCLUDE_DIR})
|
|
||||||
target_link_libraries(${name} ${libraries})
|
|
||||||
set_target_properties(${name} PROPERTIES PREFIX "")
|
|
||||||
install(
|
|
||||||
TARGETS ${name}
|
|
||||||
LIBRARY DESTINATION .
|
|
||||||
)
|
|
||||||
endfunction()
|
|
||||||
|
|
||||||
if(BUILD_SOX)
|
|
||||||
set(
|
|
||||||
EXTENSION_SOURCES
|
|
||||||
pybind/pybind.cpp
|
|
||||||
pybind/sox/io.cpp
|
|
||||||
pybind/sox/utils.cpp
|
|
||||||
)
|
|
||||||
|
|
||||||
set(
|
|
||||||
LINK_LIBRARIES
|
|
||||||
libsox
|
|
||||||
)
|
|
||||||
|
|
||||||
define_extension(
|
|
||||||
_paddleaudio
|
|
||||||
"${EXTENSION_SOURCES}"
|
|
||||||
"${LINK_LIBRARIES}"
|
|
||||||
)
|
|
||||||
endif()
|
|
@ -1,10 +0,0 @@
|
|||||||
#include "pybind/sox/io.h"
|
|
||||||
|
|
||||||
PYBIND11_MODULE(_paddleaudio, m) {
|
|
||||||
m.def("get_info_file",
|
|
||||||
&paddleaudio::sox_io::get_info_file,
|
|
||||||
"Get metadata of audio file.");
|
|
||||||
m.def("get_info_fileobj",
|
|
||||||
&paddleaudio::sox_io::get_info_fileobj,
|
|
||||||
"Get metadata of audio in file object.");
|
|
||||||
}
|
|
@ -1,61 +0,0 @@
|
|||||||
#include "pybind/sox/io.h"
|
|
||||||
#include "pybind/sox/utils.h"
|
|
||||||
|
|
||||||
using namespace paddleaudio::sox_utils;
|
|
||||||
|
|
||||||
namespace paddleaudio {
|
|
||||||
namespace sox_io {
|
|
||||||
|
|
||||||
auto get_info_file(const std::string &path, const std::string &format)
|
|
||||||
-> std::tuple<int64_t, int64_t, int64_t, int64_t, std::string> {
|
|
||||||
SoxFormat sf(
|
|
||||||
sox_open_read(path.data(),
|
|
||||||
/*signal=*/nullptr,
|
|
||||||
/*encoding=*/nullptr,
|
|
||||||
/*filetype=*/format.empty() ? nullptr : format.data()));
|
|
||||||
|
|
||||||
|
|
||||||
validate_input_file(sf, path);
|
|
||||||
|
|
||||||
return std::make_tuple(
|
|
||||||
static_cast<int64_t>(sf->signal.rate),
|
|
||||||
static_cast<int64_t>(sf->signal.length / sf->signal.channels),
|
|
||||||
static_cast<int64_t>(sf->signal.channels),
|
|
||||||
static_cast<int64_t>(sf->encoding.bits_per_sample),
|
|
||||||
get_encoding(sf->encoding.encoding));
|
|
||||||
}
|
|
||||||
|
|
||||||
auto get_info_fileobj(py::object fileobj, const std::string &format)
|
|
||||||
-> std::tuple<int64_t, int64_t, int64_t, int64_t, std::string> {
|
|
||||||
const auto capacity = [&]() {
|
|
||||||
const auto bufsiz = get_buffer_size();
|
|
||||||
const int64_t kDefaultCapacityInBytes = 4096;
|
|
||||||
return (bufsiz > kDefaultCapacityInBytes) ? bufsiz
|
|
||||||
: kDefaultCapacityInBytes;
|
|
||||||
}();
|
|
||||||
std::string buffer(capacity, '\0');
|
|
||||||
auto *buf = const_cast<char *>(buffer.data());
|
|
||||||
auto num_read = read_fileobj(&fileobj, capacity, buf);
|
|
||||||
// If the file is shorter than 256, then libsox cannot read the header.
|
|
||||||
auto buf_size = (num_read > 256) ? num_read : 256;
|
|
||||||
|
|
||||||
SoxFormat sf(sox_open_mem_read(
|
|
||||||
buf,
|
|
||||||
buf_size,
|
|
||||||
/*signal=*/nullptr,
|
|
||||||
/*encoding=*/nullptr,
|
|
||||||
/*filetype=*/format.empty() ? nullptr : format.data()));
|
|
||||||
|
|
||||||
// In case of streamed data, length can be 0
|
|
||||||
validate_input_memfile(sf);
|
|
||||||
|
|
||||||
return std::make_tuple(
|
|
||||||
static_cast<int64_t>(sf->signal.rate),
|
|
||||||
static_cast<int64_t>(sf->signal.length / sf->signal.channels),
|
|
||||||
static_cast<int64_t>(sf->signal.channels),
|
|
||||||
static_cast<int64_t>(sf->encoding.bits_per_sample),
|
|
||||||
get_encoding(sf->encoding.encoding));
|
|
||||||
}
|
|
||||||
|
|
||||||
} // namespace paddleaudio
|
|
||||||
} // namespace sox_io
|
|
@ -1,18 +0,0 @@
|
|||||||
#ifndef PADDLEAUDIO_PYBIND_SOX_IO_H
|
|
||||||
#define PADDLEAUDIO_PYBIND_SOX_IO_H
|
|
||||||
|
|
||||||
#include "pybind/sox/utils.h"
|
|
||||||
|
|
||||||
namespace paddleaudio {
|
|
||||||
namespace sox_io {
|
|
||||||
|
|
||||||
auto get_info_file(const std::string &path, const std::string &format)
|
|
||||||
-> std::tuple<int64_t, int64_t, int64_t, int64_t, std::string>;
|
|
||||||
|
|
||||||
auto get_info_fileobj(py::object fileobj, const std::string &format)
|
|
||||||
-> std::tuple<int64_t, int64_t, int64_t, int64_t, std::string>;
|
|
||||||
|
|
||||||
} // namespace paddleaudio
|
|
||||||
} // namespace sox_io
|
|
||||||
|
|
||||||
#endif
|
|
@ -1,98 +0,0 @@
|
|||||||
#include "pybind/sox/utils.h"
|
|
||||||
|
|
||||||
#include <sstream>
|
|
||||||
|
|
||||||
namespace paddleaudio {
|
|
||||||
namespace sox_utils {
|
|
||||||
|
|
||||||
SoxFormat::SoxFormat(sox_format_t *fd) noexcept : fd_(fd) {}
|
|
||||||
SoxFormat::~SoxFormat() { close(); }
|
|
||||||
|
|
||||||
sox_format_t *SoxFormat::operator->() const noexcept { return fd_; }
|
|
||||||
SoxFormat::operator sox_format_t *() const noexcept { return fd_; }
|
|
||||||
|
|
||||||
void SoxFormat::close() {
|
|
||||||
if (fd_ != nullptr) {
|
|
||||||
sox_close(fd_);
|
|
||||||
fd_ = nullptr;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
auto read_fileobj(py::object *fileobj, const uint64_t size, char *buffer)
|
|
||||||
-> uint64_t {
|
|
||||||
uint64_t num_read = 0;
|
|
||||||
while (num_read < size) {
|
|
||||||
auto request = size - num_read;
|
|
||||||
auto chunk = static_cast<std::string>(
|
|
||||||
static_cast<py::bytes>(fileobj->attr("read")(request)));
|
|
||||||
auto chunk_len = chunk.length();
|
|
||||||
if (chunk_len == 0) {
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
if (chunk_len > request) {
|
|
||||||
std::ostringstream message;
|
|
||||||
message
|
|
||||||
<< "Requested up to " << request << " bytes but, "
|
|
||||||
<< "received " << chunk_len << " bytes. "
|
|
||||||
<< "The given object does not confirm to read protocol of file "
|
|
||||||
"object.";
|
|
||||||
throw std::runtime_error(message.str());
|
|
||||||
}
|
|
||||||
memcpy(buffer, chunk.data(), chunk_len);
|
|
||||||
buffer += chunk_len;
|
|
||||||
num_read += chunk_len;
|
|
||||||
}
|
|
||||||
return num_read;
|
|
||||||
}
|
|
||||||
|
|
||||||
int64_t get_buffer_size() { return sox_get_globals()->bufsiz; }
|
|
||||||
|
|
||||||
void validate_input_file(const SoxFormat &sf, const std::string &path) {
|
|
||||||
if (static_cast<sox_format_t *>(sf) == nullptr) {
|
|
||||||
throw std::runtime_error(
|
|
||||||
"Error loading audio file: failed to open file " + path);
|
|
||||||
}
|
|
||||||
if (sf->encoding.encoding == SOX_ENCODING_UNKNOWN) {
|
|
||||||
throw std::runtime_error("Error loading audio file: unknown encoding.");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void validate_input_memfile(const SoxFormat &sf) {
|
|
||||||
return validate_input_file(sf, "<in memory buffer>");
|
|
||||||
}
|
|
||||||
|
|
||||||
std::string get_encoding(sox_encoding_t encoding) {
|
|
||||||
switch (encoding) {
|
|
||||||
case SOX_ENCODING_UNKNOWN:
|
|
||||||
return "UNKNOWN";
|
|
||||||
case SOX_ENCODING_SIGN2:
|
|
||||||
return "PCM_S";
|
|
||||||
case SOX_ENCODING_UNSIGNED:
|
|
||||||
return "PCM_U";
|
|
||||||
case SOX_ENCODING_FLOAT:
|
|
||||||
return "PCM_F";
|
|
||||||
case SOX_ENCODING_FLAC:
|
|
||||||
return "FLAC";
|
|
||||||
case SOX_ENCODING_ULAW:
|
|
||||||
return "ULAW";
|
|
||||||
case SOX_ENCODING_ALAW:
|
|
||||||
return "ALAW";
|
|
||||||
case SOX_ENCODING_MP3:
|
|
||||||
return "MP3";
|
|
||||||
case SOX_ENCODING_VORBIS:
|
|
||||||
return "VORBIS";
|
|
||||||
case SOX_ENCODING_AMR_WB:
|
|
||||||
return "AMR_WB";
|
|
||||||
case SOX_ENCODING_AMR_NB:
|
|
||||||
return "AMR_NB";
|
|
||||||
case SOX_ENCODING_OPUS:
|
|
||||||
return "OPUS";
|
|
||||||
case SOX_ENCODING_GSM:
|
|
||||||
return "GSM";
|
|
||||||
default:
|
|
||||||
return "UNKNOWN";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
} // namespace paddleaudio
|
|
||||||
} // namespace sox_utils
|
|
@ -1,42 +0,0 @@
|
|||||||
#ifndef PADDLEAUDIO_PYBIND_SOX_UTILS_H
|
|
||||||
#define PADDLEAUDIO_PYBIND_SOX_UTILS_H
|
|
||||||
|
|
||||||
#include <pybind11/pybind11.h>
|
|
||||||
#include <sox.h>
|
|
||||||
|
|
||||||
namespace py = pybind11;
|
|
||||||
|
|
||||||
namespace paddleaudio {
|
|
||||||
namespace sox_utils {
|
|
||||||
|
|
||||||
/// helper class to automatically close sox_format_t*
|
|
||||||
struct SoxFormat {
|
|
||||||
explicit SoxFormat(sox_format_t *fd) noexcept;
|
|
||||||
SoxFormat(const SoxFormat &other) = delete;
|
|
||||||
SoxFormat(SoxFormat &&other) = delete;
|
|
||||||
SoxFormat &operator=(const SoxFormat &other) = delete;
|
|
||||||
SoxFormat &operator=(SoxFormat &&other) = delete;
|
|
||||||
~SoxFormat();
|
|
||||||
sox_format_t *operator->() const noexcept;
|
|
||||||
operator sox_format_t *() const noexcept;
|
|
||||||
|
|
||||||
void close();
|
|
||||||
|
|
||||||
private:
|
|
||||||
sox_format_t *fd_;
|
|
||||||
};
|
|
||||||
|
|
||||||
auto read_fileobj(py::object *fileobj, uint64_t size, char *buffer) -> uint64_t;
|
|
||||||
|
|
||||||
int64_t get_buffer_size();
|
|
||||||
|
|
||||||
void validate_input_file(const SoxFormat &sf, const std::string &path);
|
|
||||||
|
|
||||||
void validate_input_memfile(const SoxFormat &sf);
|
|
||||||
|
|
||||||
std::string get_encoding(sox_encoding_t encoding);
|
|
||||||
|
|
||||||
} // namespace paddleaudio
|
|
||||||
} // namespace sox_utils
|
|
||||||
|
|
||||||
#endif
|
|
@ -1,9 +0,0 @@
|
|||||||
|
|
||||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fvisibility=hidden")
|
|
||||||
|
|
||||||
add_library(libsox INTERFACE)
|
|
||||||
if (BUILD_SOX)
|
|
||||||
add_subdirectory(sox)
|
|
||||||
target_include_directories(libsox INTERFACE ${SOX_INCLUDE_DIR})
|
|
||||||
target_link_libraries(libsox INTERFACE ${SOX_LIBRARIES})
|
|
||||||
endif()
|
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@ -1,86 +0,0 @@
|
|||||||
See the followings for the origin of this patch
|
|
||||||
http://www.linuxfromscratch.org/blfs/view/svn/multimedia/libmad.html
|
|
||||||
http://www.linuxfromscratch.org/patches/blfs/svn/libmad-0.15.1b-fixes-1.patch
|
|
||||||
--- src/libmad/configure 2004-02-05 09:34:07.000000000 +0000
|
|
||||||
+++ src/libmad/configure.new 2020-06-30 21:10:28.528018931 +0000
|
|
||||||
@@ -19083,71 +19083,7 @@
|
|
||||||
|
|
||||||
if test "$GCC" = yes
|
|
||||||
then
|
|
||||||
- if test -z "$arch"
|
|
||||||
- then
|
|
||||||
- case "$host" in
|
|
||||||
- i386-*) ;;
|
|
||||||
- i?86-*) arch="-march=i486" ;;
|
|
||||||
- arm*-empeg-*) arch="-march=armv4 -mtune=strongarm1100" ;;
|
|
||||||
- armv4*-*) arch="-march=armv4 -mtune=strongarm" ;;
|
|
||||||
- powerpc-*) ;;
|
|
||||||
- mips*-agenda-*) arch="-mcpu=vr4100" ;;
|
|
||||||
- mips*-luxsonor-*) arch="-mips1 -mcpu=r3000 -Wa,-m4010" ;;
|
|
||||||
- esac
|
|
||||||
- fi
|
|
||||||
-
|
|
||||||
- case "$optimize" in
|
|
||||||
- -O|"-O "*)
|
|
||||||
- optimize="-O"
|
|
||||||
- optimize="$optimize -fforce-mem"
|
|
||||||
- optimize="$optimize -fforce-addr"
|
|
||||||
- : #x optimize="$optimize -finline-functions"
|
|
||||||
- : #- optimize="$optimize -fstrength-reduce"
|
|
||||||
- optimize="$optimize -fthread-jumps"
|
|
||||||
- optimize="$optimize -fcse-follow-jumps"
|
|
||||||
- optimize="$optimize -fcse-skip-blocks"
|
|
||||||
- : #x optimize="$optimize -frerun-cse-after-loop"
|
|
||||||
- : #x optimize="$optimize -frerun-loop-opt"
|
|
||||||
- : #x optimize="$optimize -fgcse"
|
|
||||||
- optimize="$optimize -fexpensive-optimizations"
|
|
||||||
- optimize="$optimize -fregmove"
|
|
||||||
- : #* optimize="$optimize -fdelayed-branch"
|
|
||||||
- : #x optimize="$optimize -fschedule-insns"
|
|
||||||
- optimize="$optimize -fschedule-insns2"
|
|
||||||
- : #? optimize="$optimize -ffunction-sections"
|
|
||||||
- : #? optimize="$optimize -fcaller-saves"
|
|
||||||
- : #> optimize="$optimize -funroll-loops"
|
|
||||||
- : #> optimize="$optimize -funroll-all-loops"
|
|
||||||
- : #x optimize="$optimize -fmove-all-movables"
|
|
||||||
- : #x optimize="$optimize -freduce-all-givs"
|
|
||||||
- : #? optimize="$optimize -fstrict-aliasing"
|
|
||||||
- : #* optimize="$optimize -fstructure-noalias"
|
|
||||||
-
|
|
||||||
- case "$host" in
|
|
||||||
- arm*-*)
|
|
||||||
- optimize="$optimize -fstrength-reduce"
|
|
||||||
- ;;
|
|
||||||
- mips*-*)
|
|
||||||
- optimize="$optimize -fstrength-reduce"
|
|
||||||
- optimize="$optimize -finline-functions"
|
|
||||||
- ;;
|
|
||||||
- i?86-*)
|
|
||||||
- optimize="$optimize -fstrength-reduce"
|
|
||||||
- ;;
|
|
||||||
- powerpc-apple-*)
|
|
||||||
- # this triggers an internal compiler error with gcc2
|
|
||||||
- : #optimize="$optimize -fstrength-reduce"
|
|
||||||
-
|
|
||||||
- # this is really only beneficial with gcc3
|
|
||||||
- : #optimize="$optimize -finline-functions"
|
|
||||||
- ;;
|
|
||||||
- *)
|
|
||||||
- # this sometimes provokes bugs in gcc 2.95.2
|
|
||||||
- : #optimize="$optimize -fstrength-reduce"
|
|
||||||
- ;;
|
|
||||||
- esac
|
|
||||||
- ;;
|
|
||||||
- esac
|
|
||||||
+ optimize="-O2"
|
|
||||||
fi
|
|
||||||
|
|
||||||
case "$host" in
|
|
||||||
@@ -21497,6 +21433,7 @@
|
|
||||||
then
|
|
||||||
case "$host" in
|
|
||||||
i?86-*) FPM="INTEL" ;;
|
|
||||||
+ x86_64*) FPM="64BIT" ;;
|
|
||||||
arm*-*) FPM="ARM" ;;
|
|
||||||
mips*-*) FPM="MIPS" ;;
|
|
||||||
sparc*-*) FPM="SPARC" ;;
|
|
@ -1,16 +0,0 @@
|
|||||||
See https://github.com/pytorch/audio/pull/1297
|
|
||||||
diff -ru sox/src/formats.c sox/src/formats.c
|
|
||||||
--- sox/src/formats.c 2014-10-26 19:55:50.000000000 -0700
|
|
||||||
+++ sox/src/formats.c 2021-02-22 16:01:02.833144070 -0800
|
|
||||||
@@ -333,6 +333,10 @@
|
|
||||||
assert(ft);
|
|
||||||
if (!ft->fp)
|
|
||||||
return sox_false;
|
|
||||||
- fstat(fileno((FILE*)ft->fp), &st);
|
|
||||||
+ int fd = fileno((FILE*)ft->fp);
|
|
||||||
+ if (fd < 0)
|
|
||||||
+ return sox_false;
|
|
||||||
+ if (fstat(fd, &st) < 0)
|
|
||||||
+ return sox_false;
|
|
||||||
return ((st.st_mode & S_IFMT) == S_IFREG);
|
|
||||||
}
|
|
@ -1,222 +0,0 @@
|
|||||||
find_package(PkgConfig REQUIRED)
|
|
||||||
|
|
||||||
include(ExternalProject)
|
|
||||||
|
|
||||||
set(INSTALL_DIR ${CMAKE_CURRENT_SOURCE_DIR}/../install)
|
|
||||||
set(ARCHIVE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/../archives)
|
|
||||||
set(patch_dir ${PROJECT_SOURCE_DIR}/third_party/patches)
|
|
||||||
set(COMMON_ARGS --quiet --disable-shared --enable-static --prefix=${INSTALL_DIR} --with-pic --disable-dependency-tracking --disable-debug --disable-examples --disable-doc)
|
|
||||||
|
|
||||||
# To pass custom environment variables to ExternalProject_Add command,
|
|
||||||
# we need to do `${CMAKE_COMMAND} -E env ${envs} <COMMANAD>`.
|
|
||||||
# https://stackoverflow.com/a/62437353
|
|
||||||
# We constrcut the custom environment variables here
|
|
||||||
set(envs
|
|
||||||
"PKG_CONFIG_PATH=${INSTALL_DIR}/lib/pkgconfig"
|
|
||||||
"LDFLAGS=-L${INSTALL_DIR}/lib $ENV{LDFLAGS}"
|
|
||||||
"CFLAGS=-I${INSTALL_DIR}/include -fvisibility=hidden $ENV{CFLAGS}"
|
|
||||||
)
|
|
||||||
|
|
||||||
ExternalProject_Add(mad
|
|
||||||
PREFIX ${CMAKE_CURRENT_BINARY_DIR}
|
|
||||||
DOWNLOAD_DIR ${ARCHIVE_DIR}
|
|
||||||
URL https://downloads.sourceforge.net/project/mad/libmad/0.15.1b/libmad-0.15.1b.tar.gz
|
|
||||||
URL_HASH SHA256=bbfac3ed6bfbc2823d3775ebb931087371e142bb0e9bb1bee51a76a6e0078690
|
|
||||||
PATCH_COMMAND patch < ${patch_dir}/libmad.patch && cp ${patch_dir}/config.guess ${patch_dir}/config.sub ${CMAKE_CURRENT_BINARY_DIR}/src/mad/
|
|
||||||
CONFIGURE_COMMAND ${CMAKE_COMMAND} -E env ${envs} ${CMAKE_CURRENT_BINARY_DIR}/src/mad/configure ${COMMON_ARGS}
|
|
||||||
DOWNLOAD_NO_PROGRESS ON
|
|
||||||
LOG_DOWNLOAD ON
|
|
||||||
LOG_UPDATE ON
|
|
||||||
LOG_CONFIGURE ON
|
|
||||||
LOG_BUILD ON
|
|
||||||
LOG_INSTALL ON
|
|
||||||
LOG_MERGED_STDOUTERR ON
|
|
||||||
LOG_OUTPUT_ON_FAILURE ON
|
|
||||||
)
|
|
||||||
|
|
||||||
ExternalProject_Add(amr
|
|
||||||
PREFIX ${CMAKE_CURRENT_BINARY_DIR}
|
|
||||||
DOWNLOAD_DIR ${ARCHIVE_DIR}
|
|
||||||
URL https://sourceforge.net/projects/opencore-amr/files/opencore-amr/opencore-amr-0.1.5.tar.gz
|
|
||||||
URL_HASH SHA256=2c006cb9d5f651bfb5e60156dbff6af3c9d35c7bbcc9015308c0aff1e14cd341
|
|
||||||
PATCH_COMMAND cp ${patch_dir}/config.guess ${patch_dir}/config.sub ${CMAKE_CURRENT_BINARY_DIR}/src/amr/
|
|
||||||
CONFIGURE_COMMAND ${CMAKE_COMMAND} -E env ${envs} ${CMAKE_CURRENT_BINARY_DIR}/src/amr/configure ${COMMON_ARGS}
|
|
||||||
DOWNLOAD_NO_PROGRESS ON
|
|
||||||
LOG_DOWNLOAD ON
|
|
||||||
LOG_UPDATE ON
|
|
||||||
LOG_CONFIGURE ON
|
|
||||||
LOG_BUILD ON
|
|
||||||
LOG_INSTALL ON
|
|
||||||
LOG_MERGED_STDOUTERR ON
|
|
||||||
LOG_OUTPUT_ON_FAILURE ON
|
|
||||||
)
|
|
||||||
|
|
||||||
ExternalProject_Add(lame
|
|
||||||
PREFIX ${CMAKE_CURRENT_BINARY_DIR}
|
|
||||||
DOWNLOAD_DIR ${ARCHIVE_DIR}
|
|
||||||
URL https://downloads.sourceforge.net/project/lame/lame/3.99/lame-3.99.5.tar.gz
|
|
||||||
URL_HASH SHA256=24346b4158e4af3bd9f2e194bb23eb473c75fb7377011523353196b19b9a23ff
|
|
||||||
PATCH_COMMAND cp ${patch_dir}/config.guess ${patch_dir}/config.sub ${CMAKE_CURRENT_BINARY_DIR}/src/lame/
|
|
||||||
CONFIGURE_COMMAND ${CMAKE_COMMAND} -E env ${envs} ${CMAKE_CURRENT_BINARY_DIR}/src/lame/configure ${COMMON_ARGS} --enable-nasm
|
|
||||||
DOWNLOAD_NO_PROGRESS ON
|
|
||||||
LOG_DOWNLOAD ON
|
|
||||||
LOG_UPDATE ON
|
|
||||||
LOG_CONFIGURE ON
|
|
||||||
LOG_BUILD ON
|
|
||||||
LOG_INSTALL ON
|
|
||||||
LOG_MERGED_STDOUTERR ON
|
|
||||||
LOG_OUTPUT_ON_FAILURE ON
|
|
||||||
)
|
|
||||||
|
|
||||||
ExternalProject_Add(ogg
|
|
||||||
PREFIX ${CMAKE_CURRENT_BINARY_DIR}
|
|
||||||
DOWNLOAD_DIR ${ARCHIVE_DIR}
|
|
||||||
URL https://ftp.osuosl.org/pub/xiph/releases/ogg/libogg-1.3.3.tar.gz
|
|
||||||
URL_HASH SHA256=c2e8a485110b97550f453226ec644ebac6cb29d1caef2902c007edab4308d985
|
|
||||||
PATCH_COMMAND cp ${patch_dir}/config.guess ${patch_dir}/config.sub ${CMAKE_CURRENT_BINARY_DIR}/src/ogg/
|
|
||||||
CONFIGURE_COMMAND ${CMAKE_COMMAND} -E env ${envs} ${CMAKE_CURRENT_BINARY_DIR}/src/ogg/configure ${COMMON_ARGS}
|
|
||||||
DOWNLOAD_NO_PROGRESS ON
|
|
||||||
LOG_DOWNLOAD ON
|
|
||||||
LOG_UPDATE ON
|
|
||||||
LOG_CONFIGURE ON
|
|
||||||
LOG_BUILD ON
|
|
||||||
LOG_INSTALL ON
|
|
||||||
LOG_MERGED_STDOUTERR ON
|
|
||||||
LOG_OUTPUT_ON_FAILURE ON
|
|
||||||
)
|
|
||||||
|
|
||||||
ExternalProject_Add(flac
|
|
||||||
PREFIX ${CMAKE_CURRENT_BINARY_DIR}
|
|
||||||
DEPENDS ogg
|
|
||||||
DOWNLOAD_DIR ${ARCHIVE_DIR}
|
|
||||||
URL https://ftp.osuosl.org/pub/xiph/releases/flac/flac-1.3.2.tar.xz
|
|
||||||
URL_HASH SHA256=91cfc3ed61dc40f47f050a109b08610667d73477af6ef36dcad31c31a4a8d53f
|
|
||||||
PATCH_COMMAND cp ${patch_dir}/config.guess ${patch_dir}/config.sub ${CMAKE_CURRENT_BINARY_DIR}/src/flac/
|
|
||||||
CONFIGURE_COMMAND ${CMAKE_COMMAND} -E env ${envs} ${CMAKE_CURRENT_BINARY_DIR}/src/flac/configure ${COMMON_ARGS} --with-ogg --disable-cpplibs
|
|
||||||
DOWNLOAD_NO_PROGRESS ON
|
|
||||||
LOG_DOWNLOAD ON
|
|
||||||
LOG_UPDATE ON
|
|
||||||
LOG_CONFIGURE ON
|
|
||||||
LOG_BUILD ON
|
|
||||||
LOG_INSTALL ON
|
|
||||||
LOG_MERGED_STDOUTERR ON
|
|
||||||
LOG_OUTPUT_ON_FAILURE ON
|
|
||||||
)
|
|
||||||
|
|
||||||
ExternalProject_Add(vorbis
|
|
||||||
PREFIX ${CMAKE_CURRENT_BINARY_DIR}
|
|
||||||
DEPENDS ogg
|
|
||||||
DOWNLOAD_DIR ${ARCHIVE_DIR}
|
|
||||||
URL https://ftp.osuosl.org/pub/xiph/releases/vorbis/libvorbis-1.3.6.tar.gz
|
|
||||||
URL_HASH SHA256=6ed40e0241089a42c48604dc00e362beee00036af2d8b3f46338031c9e0351cb
|
|
||||||
PATCH_COMMAND cp ${patch_dir}/config.guess ${patch_dir}/config.sub ${CMAKE_CURRENT_BINARY_DIR}/src/vorbis/
|
|
||||||
CONFIGURE_COMMAND ${CMAKE_COMMAND} -E env ${envs} ${CMAKE_CURRENT_BINARY_DIR}/src/vorbis/configure ${COMMON_ARGS} --with-ogg
|
|
||||||
DOWNLOAD_NO_PROGRESS ON
|
|
||||||
LOG_DOWNLOAD ON
|
|
||||||
LOG_UPDATE ON
|
|
||||||
LOG_CONFIGURE ON
|
|
||||||
LOG_BUILD ON
|
|
||||||
LOG_INSTALL ON
|
|
||||||
LOG_MERGED_STDOUTERR ON
|
|
||||||
LOG_OUTPUT_ON_FAILURE ON
|
|
||||||
)
|
|
||||||
|
|
||||||
ExternalProject_Add(opus
|
|
||||||
PREFIX ${CMAKE_CURRENT_BINARY_DIR}
|
|
||||||
DEPENDS ogg
|
|
||||||
DOWNLOAD_DIR ${ARCHIVE_DIR}
|
|
||||||
URL https://ftp.osuosl.org/pub/xiph/releases/opus/opus-1.3.1.tar.gz
|
|
||||||
URL_HASH SHA256=65b58e1e25b2a114157014736a3d9dfeaad8d41be1c8179866f144a2fb44ff9d
|
|
||||||
PATCH_COMMAND cp ${patch_dir}/config.guess ${patch_dir}/config.sub ${CMAKE_CURRENT_BINARY_DIR}/src/opus/
|
|
||||||
CONFIGURE_COMMAND ${CMAKE_COMMAND} -E env ${envs} ${CMAKE_CURRENT_BINARY_DIR}/src/opus/configure ${COMMON_ARGS} --with-ogg
|
|
||||||
DOWNLOAD_NO_PROGRESS ON
|
|
||||||
LOG_DOWNLOAD ON
|
|
||||||
LOG_UPDATE ON
|
|
||||||
LOG_CONFIGURE ON
|
|
||||||
LOG_BUILD ON
|
|
||||||
LOG_INSTALL ON
|
|
||||||
LOG_MERGED_STDOUTERR ON
|
|
||||||
LOG_OUTPUT_ON_FAILURE ON
|
|
||||||
)
|
|
||||||
|
|
||||||
ExternalProject_Add(opusfile
|
|
||||||
PREFIX ${CMAKE_CURRENT_BINARY_DIR}
|
|
||||||
DEPENDS opus
|
|
||||||
DOWNLOAD_DIR ${ARCHIVE_DIR}
|
|
||||||
URL https://ftp.osuosl.org/pub/xiph/releases/opus/opusfile-0.12.tar.gz
|
|
||||||
URL_HASH SHA256=118d8601c12dd6a44f52423e68ca9083cc9f2bfe72da7a8c1acb22a80ae3550b
|
|
||||||
PATCH_COMMAND cp ${patch_dir}/config.guess ${patch_dir}/config.sub ${CMAKE_CURRENT_BINARY_DIR}/src/opusfile/
|
|
||||||
CONFIGURE_COMMAND ${CMAKE_COMMAND} -E env ${envs} ${CMAKE_CURRENT_BINARY_DIR}/src/opusfile/configure ${COMMON_ARGS} --disable-http
|
|
||||||
DOWNLOAD_NO_PROGRESS ON
|
|
||||||
LOG_DOWNLOAD ON
|
|
||||||
LOG_UPDATE ON
|
|
||||||
LOG_CONFIGURE ON
|
|
||||||
LOG_BUILD ON
|
|
||||||
LOG_INSTALL ON
|
|
||||||
LOG_MERGED_STDOUTERR ON
|
|
||||||
LOG_OUTPUT_ON_FAILURE ON
|
|
||||||
)
|
|
||||||
|
|
||||||
set(SOX_OPTIONS
|
|
||||||
--disable-openmp
|
|
||||||
--with-amrnb
|
|
||||||
--with-amrwb
|
|
||||||
--with-flac
|
|
||||||
--with-lame
|
|
||||||
--with-mad
|
|
||||||
--with-oggvorbis
|
|
||||||
--with-opus
|
|
||||||
--without-alsa
|
|
||||||
--without-ao
|
|
||||||
--without-coreaudio
|
|
||||||
--without-oss
|
|
||||||
--without-id3tag
|
|
||||||
--without-ladspa
|
|
||||||
--without-magic
|
|
||||||
--without-png
|
|
||||||
--without-pulseaudio
|
|
||||||
--without-sndfile
|
|
||||||
--without-sndio
|
|
||||||
--without-sunaudio
|
|
||||||
--without-waveaudio
|
|
||||||
--without-wavpack
|
|
||||||
--without-twolame
|
|
||||||
)
|
|
||||||
|
|
||||||
set(SOX_LIBRARIES
|
|
||||||
${INSTALL_DIR}/lib/libsox.a
|
|
||||||
${INSTALL_DIR}/lib/libopencore-amrnb.a
|
|
||||||
${INSTALL_DIR}/lib/libopencore-amrwb.a
|
|
||||||
${INSTALL_DIR}/lib/libmad.a
|
|
||||||
${INSTALL_DIR}/lib/libmp3lame.a
|
|
||||||
${INSTALL_DIR}/lib/libFLAC.a
|
|
||||||
${INSTALL_DIR}/lib/libopusfile.a
|
|
||||||
${INSTALL_DIR}/lib/libopus.a
|
|
||||||
${INSTALL_DIR}/lib/libvorbisenc.a
|
|
||||||
${INSTALL_DIR}/lib/libvorbisfile.a
|
|
||||||
${INSTALL_DIR}/lib/libvorbis.a
|
|
||||||
${INSTALL_DIR}/lib/libogg.a
|
|
||||||
)
|
|
||||||
|
|
||||||
ExternalProject_Add(sox
|
|
||||||
PREFIX ${CMAKE_CURRENT_BINARY_DIR}
|
|
||||||
DEPENDS ogg flac vorbis opusfile lame mad amr
|
|
||||||
DOWNLOAD_DIR ${ARCHIVE_DIR}
|
|
||||||
URL https://downloads.sourceforge.net/project/sox/sox/14.4.2/sox-14.4.2.tar.bz2
|
|
||||||
URL_HASH SHA256=81a6956d4330e75b5827316e44ae381e6f1e8928003c6aa45896da9041ea149c
|
|
||||||
PATCH_COMMAND patch -p1 < ${patch_dir}/sox.patch && cp ${patch_dir}/config.guess ${patch_dir}/config.sub ${CMAKE_CURRENT_BINARY_DIR}/src/sox/
|
|
||||||
CONFIGURE_COMMAND ${CMAKE_COMMAND} -E env ${envs} ${CMAKE_CURRENT_BINARY_DIR}/src/sox/configure ${COMMON_ARGS} ${SOX_OPTIONS}
|
|
||||||
BUILD_BYPRODUCTS ${SOX_LIBRARIES}
|
|
||||||
DOWNLOAD_NO_PROGRESS ON
|
|
||||||
LOG_DOWNLOAD ON
|
|
||||||
LOG_UPDATE ON
|
|
||||||
LOG_CONFIGURE ON
|
|
||||||
LOG_BUILD ON
|
|
||||||
LOG_INSTALL ON
|
|
||||||
LOG_MERGED_STDOUTERR ON
|
|
||||||
LOG_OUTPUT_ON_FAILURE ON
|
|
||||||
)
|
|
||||||
|
|
||||||
add_dependencies(libsox sox)
|
|
||||||
set(SOX_INCLUDE_DIR ${INSTALL_DIR}/include PARENT_SCOPE)
|
|
||||||
set(SOX_LIBRARIES ${SOX_LIBRARIES} PARENT_SCOPE)
|
|
Loading…
Reference in new issue