git: 945407e8ec88 - main - audio/piper-phonemize: Converts text to phonemes for Piper

From: Gleb Popov <arrowd_at_FreeBSD.org>
Date: Tue, 17 Jun 2025 07:28:04 UTC
The branch main has been updated by arrowd:

URL: https://cgit.FreeBSD.org/ports/commit/?id=945407e8ec887aa1241eb2d060b5bdfe0ffc2e48

commit 945407e8ec887aa1241eb2d060b5bdfe0ffc2e48
Author:     Kenneth Raplee <kenrap@kennethraplee.com>
AuthorDate: 2025-06-06 10:31:23 +0000
Commit:     Gleb Popov <arrowd@FreeBSD.org>
CommitDate: 2025-06-17 07:27:55 +0000

    audio/piper-phonemize: Converts text to phonemes for Piper
    
    Pull Request:   https://github.com/freebsd/freebsd-ports/pull/406
    Co-authored-by: Gleb Popov <arrowd@FreeBSD.org>
---
 audio/Makefile                                    |   1 +
 audio/piper-phonemize/Makefile                    |  28 +++++
 audio/piper-phonemize/distinfo                    |   3 +
 audio/piper-phonemize/files/patch-CMakeLists.txt  | 132 ++++++++++++++++++++++
 audio/piper-phonemize/files/piper_phonemize.pc.in |  11 ++
 audio/piper-phonemize/pkg-descr                   |   5 +
 audio/piper-phonemize/pkg-plist                   |  12 ++
 7 files changed, 192 insertions(+)

diff --git a/audio/Makefile b/audio/Makefile
index bd42f99545e6..bcfe68ef060c 100644
--- a/audio/Makefile
+++ b/audio/Makefile
@@ -594,6 +594,7 @@
     SUBDIR += pianod2
     SUBDIR += picard
     SUBDIR += picard-plugins
+    SUBDIR += piper-phonemize
     SUBDIR += pipewire-module-xrdp
     SUBDIR += pipewire-spa-oss
     SUBDIR += pithos
diff --git a/audio/piper-phonemize/Makefile b/audio/piper-phonemize/Makefile
new file mode 100644
index 000000000000..47bf717c984c
--- /dev/null
+++ b/audio/piper-phonemize/Makefile
@@ -0,0 +1,28 @@
+PORTNAME=	piper-phonemize
+DISTVERSION=	2023.11.14
+DISTVERSIONSUFFIX=	-4
+CATEGORIES=	audio
+
+MAINTAINER=	kenrap@kennethraplee.com
+COMMENT=	Fast, local neural text to speech system
+WWW=		https://rhasspy.github.io/piper-samples/
+
+LICENSE=	MIT
+LICENSE_FILE=	${WRKSRC}/LICENSE.md
+
+LIB_DEPENDS=	libespeak-ng.so:audio/espeak-ng \
+		libonnxruntime.so:misc/onnxruntime
+
+USES=		compiler:c++17-lang cmake pkgconfig tar:xz
+
+USE_GITHUB=	yes
+GH_ACCOUNT=	rhasspy
+
+CMAKE_ARGS=	-DESPEAK_NG_DIR=${LOCALBASE} \
+		-DONNXRUNTIME_DIR=${LOCALBASE}
+
+post-stage:
+	${SED} -e 's|%%PREFIX%%|${PREFIX}|' ${FILESDIR}/piper_phonemize.pc.in \
+		> ${STAGEDIR}${PREFIX}/libdata/pkgconfig/piper_phonemize.pc
+
+.include <bsd.port.mk>
diff --git a/audio/piper-phonemize/distinfo b/audio/piper-phonemize/distinfo
new file mode 100644
index 000000000000..dbd7efc6acde
--- /dev/null
+++ b/audio/piper-phonemize/distinfo
@@ -0,0 +1,3 @@
+TIMESTAMP = 1748849594
+SHA256 (rhasspy-piper-phonemize-2023.11.14-4_GH0.tar.gz) = 4713d62b9d639d9e27c9abb6dcc5f98ee36c9b873ae0590644d325837ebf135a
+SIZE (rhasspy-piper-phonemize-2023.11.14-4_GH0.tar.gz) = 9788151
diff --git a/audio/piper-phonemize/files/patch-CMakeLists.txt b/audio/piper-phonemize/files/patch-CMakeLists.txt
new file mode 100644
index 000000000000..f4ae844b908b
--- /dev/null
+++ b/audio/piper-phonemize/files/patch-CMakeLists.txt
@@ -0,0 +1,132 @@
+https://github.com/rhasspy/piper-phonemize/pull/31
+
+--- CMakeLists.txt.orig	2023-11-14 17:54:34 UTC
++++ CMakeLists.txt
+@@ -17,7 +17,7 @@ elseif(NOT APPLE)
+ 
+ elseif(NOT APPLE)
+     # Linux flags
+-    string(APPEND CMAKE_CXX_FLAGS " -Wall -Wextra -Wl,-rpath,'$ORIGIN'")
++    string(APPEND CMAKE_CXX_FLAGS " -Wall -Wextra")
+     string(APPEND CMAKE_C_FLAGS " -Wall -Wextra")
+ endif()
+ 
+@@ -34,100 +34,13 @@ set_target_properties(piper_phonemize PROPERTIES
+     SOVERSION ${PROJECT_VERSION_MAJOR}
+ )
+ 
+-# ---- onnxruntime ---
+-
+-# Look for onnxruntime files in <root>/lib
+-if(NOT DEFINED ONNXRUNTIME_DIR)
+-    if(NOT DEFINED ONNXRUNTIME_VERSION)
+-        set(ONNXRUNTIME_VERSION "1.14.1")
+-    endif()
+-
+-    if(WIN32)
+-        # Windows x86-64
+-        set(ONNXRUNTIME_PREFIX "onnxruntime-win-x64-${ONNXRUNTIME_VERSION}")
+-        set(ONNXRUNTIME_EXT "zip")
+-    elseif (APPLE)
+-        if(CMAKE_SYSTEM_PROCESSOR STREQUAL x86_64)
+-            # MacOS x86-64
+-            set(ONNXRUNTIME_PREFIX "onnxruntime-osx-x86_64-${ONNXRUNTIME_VERSION}")
+-        elseif(CMAKE_SYSTEM_PROCESSOR STREQUAL arm64)
+-            # MacOS Apple Silicon
+-            set(ONNXRUNTIME_PREFIX "onnxruntime-osx-arm64-${ONNXRUNTIME_VERSION}")
+-        else()
+-            message(FATAL_ERROR "Unsupported architecture for onnxruntime")
+-        endif()
+-
+-        set(ONNXRUNTIME_EXT "tgz")
+-    else()
+-        if(CMAKE_SYSTEM_PROCESSOR STREQUAL x86_64)
+-            # Linux x86-64
+-            set(ONNXRUNTIME_PREFIX "onnxruntime-linux-x64-${ONNXRUNTIME_VERSION}")
+-        elseif(CMAKE_SYSTEM_PROCESSOR STREQUAL aarch64)
+-            # Linux ARM 64-bit
+-            set(ONNXRUNTIME_PREFIX "onnxruntime-linux-aarch64-${ONNXRUNTIME_VERSION}")
+-        elseif(CMAKE_SYSTEM_PROCESSOR STREQUAL armv7l)
+-            # Linux ARM 32-bit
+-            set(ONNXRUNTIME_PREFIX "onnxruntime-linux-arm32-${ONNXRUNTIME_VERSION}")
+-            set(ONNXRUNTIME_URL "https://github.com/synesthesiam/prebuilt-apps/releases/download/v1.0/onnxruntime-linux-arm32-${ONNXRUNTIME_VERSION}.tgz")
+-        else()
+-            message(FATAL_ERROR "Unsupported architecture for onnxruntime")
+-        endif()
+-
+-        set(ONNXRUNTIME_EXT "tgz")
+-    endif()
+-
+-    if(NOT DEFINED ONNXRUNTIME_URL)
+-        set(ONNXRUNTIME_URL "https://github.com/microsoft/onnxruntime/releases/download/v${ONNXRUNTIME_VERSION}/${ONNXRUNTIME_PREFIX}.${ONNXRUNTIME_EXT}")
+-    endif()
+-
+-    set(ONNXRUNTIME_FILENAME "${ONNXRUNTIME_PREFIX}.${ONNXRUNTIME_EXT}")
+-    set(ONNXRUNTIME_DIR "${CMAKE_CURRENT_LIST_DIR}/lib/${ONNXRUNTIME_PREFIX}")
+-
+-    if(NOT EXISTS "${ONNXRUNTIME_DIR}")
+-        if(NOT EXISTS "download/${ONNXRUNTIME_FILENAME}")
+-            # Download onnxruntime release
+-            message("Downloading ${ONNXRUNTIME_URL}")
+-            file(DOWNLOAD "${ONNXRUNTIME_URL}" "download/${ONNXRUNTIME_FILENAME}")
+-        endif()
+-
+-        # Extract .zip or .tgz to a directory like lib/onnxruntime-linux-x64-1.14.1/
+-        file(ARCHIVE_EXTRACT INPUT "download/${ONNXRUNTIME_FILENAME}" DESTINATION "${CMAKE_CURRENT_LIST_DIR}/lib")
+-    endif()
+-endif()
+-
+-# ---- espeak-ng ---
+-
+-if(NOT DEFINED ESPEAK_NG_DIR)
+-    set(ESPEAK_NG_DIR "${CMAKE_CURRENT_BINARY_DIR}/ei")
+-
+-    include(ExternalProject)
+-    ExternalProject_Add(
+-        espeak_ng_external
+-        PREFIX "${CMAKE_CURRENT_BINARY_DIR}/e"
+-        URL "https://github.com/rhasspy/espeak-ng/archive/refs/heads/master.zip"
+-        CMAKE_ARGS -DCMAKE_INSTALL_PREFIX:PATH=${ESPEAK_NG_DIR}
+-        CMAKE_ARGS -DUSE_ASYNC:BOOL=OFF
+-        CMAKE_ARGS -DBUILD_SHARED_LIBS:BOOL=ON
+-        CMAKE_ARGS -DUSE_MBROLA:BOOL=OFF
+-        CMAKE_ARGS -DUSE_LIBSONIC:BOOL=OFF
+-        CMAKE_ARGS -DUSE_LIBPCAUDIO:BOOL=OFF
+-        CMAKE_ARGS -DUSE_KLATT:BOOL=OFF
+-        CMAKE_ARGS -DUSE_SPEECHPLAYER:BOOL=OFF
+-        CMAKE_ARGS -DEXTRA_cmn:BOOL=ON
+-        CMAKE_ARGS -DEXTRA_ru:BOOL=ON
+-        CMAKE_ARGS -DCMAKE_C_FLAGS="-D_FILE_OFFSET_BITS=64"
+-    )
+-    add_dependencies(piper_phonemize espeak_ng_external)
+-endif()
+-
+-
+ # ---- Declare library ----
+ 
+ target_include_directories(
+     piper_phonemize PUBLIC
+     "$<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/src>"
+     ${ESPEAK_NG_DIR}/include
+-    ${ONNXRUNTIME_DIR}/include
++    ${ONNXRUNTIME_DIR}/include/onnxruntime
+ )
+ 
+ target_link_directories(
+@@ -220,16 +133,3 @@ install(
+ install(
+     FILES ${CMAKE_SOURCE_DIR}/etc/libtashkeel_model.ort
+     TYPE DATA)
+-
+-# Dependencies
+-install(
+-    DIRECTORY ${ESPEAK_NG_DIR}/
+-    DESTINATION ${CMAKE_INSTALL_PREFIX})
+-
+-install(
+-    DIRECTORY ${ONNXRUNTIME_DIR}/include/
+-    DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})
+-
+-install(
+-    DIRECTORY ${ONNXRUNTIME_DIR}/lib/
+-    DESTINATION ${CMAKE_INSTALL_LIBDIR})
diff --git a/audio/piper-phonemize/files/piper_phonemize.pc.in b/audio/piper-phonemize/files/piper_phonemize.pc.in
new file mode 100644
index 000000000000..6927d4db2462
--- /dev/null
+++ b/audio/piper-phonemize/files/piper_phonemize.pc.in
@@ -0,0 +1,11 @@
+prefix=%%PREFIX%%
+bindir=${prefix}/bin
+libdir=${prefix}/lib
+includedir=${prefix}/include/piper-phonemize
+
+Name: piper-phonemize
+Description: Piper Phonemization Library
+URL: https://github.com/rhasspy/piper-phonemize
+Version: 2023.11.14-4
+Libs: -L${libdir} -lpiper_phonemize
+Cflags: -I${includedir}
diff --git a/audio/piper-phonemize/pkg-descr b/audio/piper-phonemize/pkg-descr
new file mode 100644
index 000000000000..c78947a4a16f
--- /dev/null
+++ b/audio/piper-phonemize/pkg-descr
@@ -0,0 +1,5 @@
+Converts text to phonemes for Piper.
+
+Uses eSpeak phonemes with the espeak_TextToPhonemesWithTerminator function.
+This function allows for Piper to preserve punctuation and detect sentence
+boundaries.
diff --git a/audio/piper-phonemize/pkg-plist b/audio/piper-phonemize/pkg-plist
new file mode 100644
index 000000000000..f4e55dbd4bd3
--- /dev/null
+++ b/audio/piper-phonemize/pkg-plist
@@ -0,0 +1,12 @@
+bin/piper_phonemize
+include/piper-phonemize/json.hpp
+include/piper-phonemize/phoneme_ids.hpp
+include/piper-phonemize/phonemize.hpp
+include/piper-phonemize/shared.hpp
+include/piper-phonemize/tashkeel.hpp
+include/piper-phonemize/uni_algo.h
+lib/libpiper_phonemize.so
+lib/libpiper_phonemize.so.1
+lib/libpiper_phonemize.so.1.2.0
+libdata/pkgconfig/piper_phonemize.pc
+share/libtashkeel_model.ort