Files
live-caption/CMakeLists.txt
T
blumia 4ed4e23282 feat(ui): add floating caption window with live transcription
Add a frameless always-on-top caption window wired to the live capture
pipeline. Silence-based segmentation gates the audio so the model never
sees silence, and the panel background is painted in paintEvent with a
configurable opacity instead of a style sheet.

新增悬浮字幕窗(无边框、置顶、可折叠/展开),接入实时采集与流式转写。
分段由静音检测驱动,静音期间不送音频,避免模型对静音产生幻觉。底板
改为在 paintEvent 中绘制,不透明度可调。
2026-10-12 13:32:16 +08:00

91 lines
3.0 KiB
CMake
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
cmake_minimum_required(VERSION 3.24)
project(live-caption LANGUAGES CXX)
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
if(NOT CMAKE_BUILD_TYPE)
set(CMAKE_BUILD_TYPE Release CACHE STRING "" FORCE)
endif()
# ---------------------------------------------------------------------------
# llama.cpp / libmtmd 的搜索路径
#
# Debian/Deepin 把 llama 的 CMake config 放在非标准目录 cmake-private/,
# 而 pkg-config 的 llama.pc 又漏了 -lmtmd。所以这里把两个路径都塞进搜索前缀,
# 并单独用 find_library 找 mtmd。
# ---------------------------------------------------------------------------
foreach(_p
/usr/lib/x86_64-linux-gnu/llama
/usr/lib/x86_64-linux-gnu/llama/cmake-private
/usr/lib/x86_64-linux-gnu/llama/pkgconfig)
if(EXISTS "${_p}")
list(APPEND CMAKE_PREFIX_PATH "${_p}")
set(ENV{PKG_CONFIG_PATH} "${_p}:$ENV{PKG_CONFIG_PATH}")
endif()
endforeach()
find_package(Qt6 REQUIRED COMPONENTS Core Widgets)
find_package(PkgConfig REQUIRED)
find_package(Threads REQUIRED)
set(CMAKE_AUTOMOC ON)
pkg_check_modules(SAMPLERATE REQUIRED IMPORTED_TARGET samplerate)
pkg_check_modules(PULSE REQUIRED IMPORTED_TARGET libpulse)
# --- llama:优先系统 pkg-config,其次 CMake config,最后 FetchContent 兜底 ---
pkg_check_modules(LLAMA QUIET IMPORTED_TARGET llama)
if(LLAMA_FOUND)
set(LC_LLAMA_TARGET PkgConfig::LLAMA)
message(STATUS "llama: 使用系统 pkg-config (${LLAMA_VERSION})")
else()
message(STATUS "llama: 系统未找到,改用 FetchContent 拉取固定版本")
include(FetchContent)
set(FETCHCONTENT_TRY_FIND_PACKAGE_MODE ALWAYS) # 先 find_package,失败再拉源码
FetchContent_Declare(llama
GIT_REPOSITORY https://github.com/ggml-org/llama.cpp.git
GIT_TAG b9951
FIND_PACKAGE_ARGS NAMES llama CONFIG)
set(LLAMA_BUILD_TESTS OFF CACHE BOOL "" FORCE)
set(LLAMA_BUILD_SERVER OFF CACHE BOOL "" FORCE)
set(LLAMA_BUILD_EXAMPLES OFF CACHE BOOL "" FORCE)
FetchContent_MakeAvailable(llama)
set(LC_LLAMA_TARGET llama)
endif()
# --- mtmd:llama.pc 里没有,单独找 ---
find_library(LC_MTMD_LIB NAMES mtmd
HINTS /usr/lib/x86_64-linux-gnu/llama)
if(NOT LC_MTMD_LIB)
message(FATAL_ERROR "找不到 libmtmd(应随 libllama0 一起安装)")
endif()
message(STATUS "mtmd: ${LC_MTMD_LIB}")
# ---------------------------------------------------------------------------
add_executable(live-caption-cli
src/main.cpp
src/transcript.cpp
src/qwen3asr.cpp
src/streamingasr.cpp
src/audio.cpp
src/livetranscriber.cpp
src/captionwindow.cpp
)
target_include_directories(live-caption-cli PRIVATE src)
target_link_libraries(live-caption-cli PRIVATE
Qt6::Core
Qt6::Widgets
Threads::Threads
PkgConfig::SAMPLERATE
PkgConfig::PULSE
${LC_LLAMA_TARGET}
${LC_MTMD_LIB}
)
if(CMAKE_CXX_COMPILER_ID MATCHES "GNU|Clang")
target_compile_options(live-caption-cli PRIVATE -Wall -Wextra -Wno-unused-parameter)
endif()