feat: add lyricResolve for resole .lrc file
feat: add backgroundDisplay for play ascii video in terminal feat: add musicPlayer for play music in terminal
This commit is contained in:
+70
-1
@@ -7,8 +7,77 @@ project(hatsune-miku-shoshitsu
|
||||
set(CMAKE_CXX_STANDARD 17)
|
||||
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
||||
|
||||
add_executable(hatsune-miku-shoshitsu main.cpp)
|
||||
# --- dependencies -----------------------------------------------------------
|
||||
find_package(PkgConfig REQUIRED)
|
||||
find_package(Threads REQUIRED)
|
||||
|
||||
# Video decoding uses the FFmpeg C API (libavformat / libavcodec / libavutil /
|
||||
# libswscale). On Debian: sudo apt install libavformat-dev libavcodec-dev \
|
||||
# libavutil-dev libswscale-dev pkg-config
|
||||
pkg_check_modules(FFMPEG REQUIRED IMPORTED_TARGET libavformat libavcodec libavutil libswscale)
|
||||
|
||||
# --- core library: video / lyrics / music modules ---------------------------
|
||||
# MINIAUDIO_IMPLEMENTATION lives in musicPlayer.cpp, so it is compiled once.
|
||||
add_library(hms-core STATIC
|
||||
modules/backgroundDisplay.cpp
|
||||
modules/lyricResolve.cpp
|
||||
modules/musicPlayer.cpp)
|
||||
|
||||
target_include_directories(hms-core PUBLIC modules third_party)
|
||||
|
||||
target_link_libraries(hms-core PUBLIC
|
||||
PkgConfig::FFMPEG
|
||||
Threads::Threads
|
||||
${CMAKE_DL_LIBS})
|
||||
|
||||
# miniaudio audio backends. Disable backends whose dev headers are missing so
|
||||
# the build still succeeds; at runtime the device will just be unavailable.
|
||||
if(WIN32)
|
||||
# WASAPI / WinMM on Windows (MSYS2 / MSVC)
|
||||
target_link_libraries(hms-core PUBLIC ole32 winmm)
|
||||
elseif(UNIX AND NOT APPLE)
|
||||
pkg_check_modules(ALSA QUIET IMPORTED_TARGET alsa)
|
||||
pkg_check_modules(PULSE QUIET IMPORTED_TARGET libpulse-simple)
|
||||
|
||||
if(ALSA_FOUND)
|
||||
target_link_libraries(hms-core PUBLIC PkgConfig::ALSA)
|
||||
# Lets musicPlayer suppress ALSA's own error chatter (which would
|
||||
# otherwise corrupt the TUI when no sound card exists).
|
||||
target_compile_definitions(hms-core PUBLIC HMS_HAS_ALSA=1)
|
||||
else()
|
||||
target_compile_definitions(hms-core PUBLIC MA_NO_ALSA)
|
||||
endif()
|
||||
|
||||
if(PULSE_FOUND)
|
||||
target_link_libraries(hms-core PUBLIC PkgConfig::PULSE)
|
||||
else()
|
||||
target_compile_definitions(hms-core PUBLIC
|
||||
MA_NO_PULSEAUDIO MA_NO_JACK MA_NO_OSS MA_NO_SNDIO)
|
||||
endif()
|
||||
|
||||
target_link_libraries(hms-core PUBLIC m)
|
||||
endif()
|
||||
|
||||
# --- the uninstall-entry binary ---------------------------------------------
|
||||
# Placeholder main() for now (uninstall.cpp); will become the real uninstall
|
||||
# hook that runs the show.
|
||||
add_executable(hatsune-miku-shoshitsu uninstall.cpp)
|
||||
target_link_libraries(hatsune-miku-shoshitsu PRIVATE hms-core)
|
||||
|
||||
# Installed to /usr/bin — the Debian packaging relies on this rule.
|
||||
install(TARGETS hatsune-miku-shoshitsu
|
||||
RUNTIME DESTINATION bin)
|
||||
|
||||
# --- demo driver: previews the show (video + music + lyrics) ----------------
|
||||
# Default resource paths are baked in as string-literal macros. TO_CMAKE_PATH
|
||||
# normalises to forward slashes so the literals stay valid on Windows builds.
|
||||
file(TO_CMAKE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/asciivision/demo-videos/demo.mp4" HMS_DEMO_VIDEO)
|
||||
file(TO_CMAKE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/res/music.flac" HMS_DEMO_MUSIC)
|
||||
file(TO_CMAKE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/res/lyric.lrc" HMS_DEMO_LYRICS)
|
||||
|
||||
add_executable(hatsune-miku-demo tools/demo.cpp)
|
||||
target_compile_definitions(hatsune-miku-demo PRIVATE
|
||||
HMS_DEMO_VIDEO="${HMS_DEMO_VIDEO}"
|
||||
HMS_DEMO_MUSIC="${HMS_DEMO_MUSIC}"
|
||||
HMS_DEMO_LYRICS="${HMS_DEMO_LYRICS}")
|
||||
target_link_libraries(hatsune-miku-demo PRIVATE hms-core)
|
||||
|
||||
Reference in New Issue
Block a user