Here is an update to musikcube 0.98.1.
0.98.1 * fixed album art extraction for xiph comments. * fixed PulseAudio compile issue. * fixed `musikdroid` app notification on Android 13 devices. * fixed ancient metadata indexer crash when trimming whitespace from strings. * fixed `pipewireout` to have more sensible default buffer sizes, and add the ability for the user to configure them. * updated `musikdroid` dependencies and tooling, fixed a few warnings. * merged latest upstream `PDCurses` code for Windows builds. * sending `musikcubed` a SIGUSR1 will trigger a library rescan. * fixed a bug when querying tracks by category with a filter. * fixed a `musikdroid` bug that could cause the BrowseFragment to get into a bad state where search would no longer work. -------------------------------------------------------------------------------- 0.98.0 * added the ability to click the browse and tracklist headers to change filter options * added the ability to click transport metadata to display a context menu with a list of actions for the current track/artist/album * added the ability to search/filter in browse view; press `^F` to toggle the feature on and off. * fixed a bug that could cause tracks to sort incorrectly if some tracks in the album have a disc number specified and others don't. * added the ability to use `libelogind` or `basu` instead of `libsystemd` for the `mpris` plugin (@robertgzr) * fixed ape decoding. * some warning cleanups when using `wsprintw` (@trofi) * further improvements to build system to remove OS-specific conditionals in favor of library detection * added color output to various important cmake messages, making it much easier to spot check configuration issues. * added support for the `piggy` debug tool to help with log collection and remote app monitoring. disabled by default. * updated Windows build to use Visual Studio 2022 * updated Linux/macOS dependencies for standalone *nix builds: boost 1.79.0, openssl 3.0.2 (1.1.1n for rpi), curl 7.83.0, ffmpeg 5.0.1, libopenmtp 0.6.2 * updated sqlite to 3.39.0 -------------------------------------------------------------------------------- 0.97.0 * no functional changes to the app * finished re-architecture of build and app packing infrastructure to support "standalone"/"portable" builds for non-Windows platforms. these changes allow us to build a much smaller set of binaries for distribution that are more universally compatible across different versions of macOS and Linux distributions. -------------------------------------------------------------------------------- 0.96.13 * macOS and Linux only release that fixes standalone binaries. -------------------------------------------------------------------------------- 0.96.11 * added support for ffmpeg5 libraries. * upgraded to ffmpeg5 for Windows builds. * fixed WasapiOut to use high-quality, built-in resampler. * added `allow_decoder_resampling` to WasapiOut to disable the high-quality, built-in resampler and rely on plugin resampling instead. * fixed dialog background rendering in certain versions of ncurses. * fixed duration calculation for float-encoded wav files. * added additional PipeWire output debugging. * rewrote build system and packaging scripts. Index: Makefile =================================================================== RCS file: /home/cvs/ports/audio/musikcube/Makefile,v retrieving revision 1.5 diff -u -p -u -p -r1.5 Makefile --- Makefile 22 Apr 2023 18:03:28 -0000 1.5 +++ Makefile 28 Apr 2023 23:40:18 -0000 @@ -2,8 +2,7 @@ COMMENT = terminal-based music player GH_ACCOUNT = clangen GH_PROJECT = musikcube -GH_TAGNAME = 0.96.10 -REVISION = 1 +GH_TAGNAME = 0.98.1 CATEGORIES = audio @@ -15,7 +14,7 @@ PERMIT_PACKAGE= Yes WANTLIB += ${COMPILER_LIBCXX} avcodec avformat avutil boost_atomic-mt WANTLIB += boost_chrono-mt boost_filesystem-mt boost_system-mt WANTLIB += boost_thread-mt c crypto curl curses ev m microhttpd -WANTLIB += mp3lame openmpt panel sndio ssl swresample tag z +WANTLIB += mp3lame mpg123 openmpt panel sndio ssl swresample tag z COMPILER = base-clang ports-gcc Index: distinfo =================================================================== RCS file: /home/cvs/ports/audio/musikcube/distinfo,v retrieving revision 1.2 diff -u -p -u -p -r1.2 distinfo --- distinfo 30 Dec 2021 22:33:28 -0000 1.2 +++ distinfo 28 Apr 2023 22:00:10 -0000 @@ -1,2 +1,2 @@ -SHA256 (musikcube-0.96.10.tar.gz) = kf2YTmi272bxvh7N8MhGB0U+xuyAYy7OaIrHRcdxnqU= -SIZE (musikcube-0.96.10.tar.gz) = 9509759 +SHA256 (musikcube-0.98.1.tar.gz) = 8xEoOEbkls42+z6Fo14w2JWjwQPJOpGzZA6WNwG4noA= +SIZE (musikcube-0.98.1.tar.gz) = 6506484 Index: patches/patch-CMakeLists_txt =================================================================== RCS file: patches/patch-CMakeLists_txt diff -N patches/patch-CMakeLists_txt --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ patches/patch-CMakeLists_txt 28 Apr 2023 23:19:04 -0000 @@ -0,0 +1,18 @@ +Index: CMakeLists.txt +--- CMakeLists.txt.orig ++++ CMakeLists.txt +@@ -97,9 +97,11 @@ add_dependencies(musikcubed musikcore) + add_plugin("src/plugins/taglib_plugin" "taglibreader") + # outputs + add_plugin("src/plugins/nullout" "nullout") +-add_plugin("src/plugins/alsaout" "alsaout") +-add_plugin("src/plugins/pulseout" "pulseout") +-add_plugin("src/plugins/pipewireout" "pipewireout") ++if (NOT CMAKE_SYSTEM_NAME MATCHES "OpenBSD") ++ add_plugin("src/plugins/alsaout" "alsaout") ++ add_plugin("src/plugins/pulseout" "pulseout") ++ add_plugin("src/plugins/pipewireout" "pipewireout") ++endif() + add_plugin("src/plugins/sndioout" "sndioout") + add_plugin("src/plugins/coreaudioout" "coreaudioout") + # remotes Index: patches/patch-_cmake_ConfigureBsdPaths_cmake =================================================================== RCS file: patches/patch-_cmake_ConfigureBsdPaths_cmake diff -N patches/patch-_cmake_ConfigureBsdPaths_cmake --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ patches/patch-_cmake_ConfigureBsdPaths_cmake 28 Apr 2023 22:07:57 -0000 @@ -0,0 +1,15 @@ +Fix OpenBSD build + +Index: .cmake/ConfigureBsdPaths.cmake +--- .cmake/ConfigureBsdPaths.cmake.orig ++++ .cmake/ConfigureBsdPaths.cmake +@@ -24,4 +24,7 @@ if (CMAKE_SYSTEM_NAME MATCHES "Darwin" OR CMAKE_SYSTEM + "${BSD_PATH_PREFIX}/lib" + "${BSD_PATH_PREFIX}/opt/openssl/lib" + "${BSD_PATH_PREFIX}/opt/ncurses/lib") +-endif () +\ No newline at end of file ++ ++ include_directories("${BSD_PATH_PREFIX}/include") ++ link_directories("${BSD_PATH_PREFIX}/lib") ++endif () Index: patches/patch-src_musikcube_CMakeLists_txt =================================================================== RCS file: patches/patch-src_musikcube_CMakeLists_txt diff -N patches/patch-src_musikcube_CMakeLists_txt --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ patches/patch-src_musikcube_CMakeLists_txt 28 Apr 2023 22:08:04 -0000 @@ -0,0 +1,23 @@ +Fix OpenBSD build + +Index: src/musikcube/CMakeLists.txt +--- src/musikcube/CMakeLists.txt.orig ++++ src/musikcube/CMakeLists.txt +@@ -104,9 +104,14 @@ if (APPLE) + set(PANEL_LIBRARY_NAME "lib${PANEL_LIBRARY_NAME}.a") + endif() + else() +- message(STATUS "[ncurses] not Darwin! will attempt to link against libtinfo") +- find_library(LIBTINFO NAMES tinfo) +- message(STATUS "[musikcube] using libtinfo at: " ${LIBTINFO}) ++ if (CMAKE_SYSTEM_NAME MATCHES "OpenBSD") ++ message(STATUS "[ncurses] detected OpenBSD, unsetting LIBTINFO") ++ set(LIBTINFO "") ++ else() ++ message(STATUS "[ncurses] not Darwin! will attempt to link against libtinfo") ++ find_library(LIBTINFO NAMES tinfo) ++ message(STATUS "[musikcube] using libtinfo at: " ${LIBTINFO}) ++ endif() + endif() + + find_library(LIBNCURSES NAMES ${CURSES_LIBRARY_NAME} PATHS ${VENDOR_LINK_DIRECTORIES}) Index: patches/patch-src_plugins_server_main_cpp =================================================================== RCS file: /home/cvs/ports/audio/musikcube/patches/patch-src_plugins_server_main_cpp,v retrieving revision 1.2 diff -u -p -u -p -r1.2 patch-src_plugins_server_main_cpp --- patches/patch-src_plugins_server_main_cpp 11 Mar 2022 18:20:20 -0000 1.2 +++ patches/patch-src_plugins_server_main_cpp 28 Apr 2023 21:52:44 -0000 @@ -3,7 +3,7 @@ disable http/websocket server by default Index: src/plugins/server/main.cpp --- src/plugins/server/main.cpp.orig +++ src/plugins/server/main.cpp -@@ -189,10 +189,10 @@ extern "C" DLL_EXPORT void SetPreferences(musik::core: +@@ -191,10 +191,10 @@ extern "C" DLL_EXPORT void SetPreferences(musik::core: context.prefs = prefs; if (prefs) { Index: patches/patch-src_plugins_stockencoders_FfmpegEncoder_cpp =================================================================== RCS file: patches/patch-src_plugins_stockencoders_FfmpegEncoder_cpp diff -N patches/patch-src_plugins_stockencoders_FfmpegEncoder_cpp --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ patches/patch-src_plugins_stockencoders_FfmpegEncoder_cpp 28 Apr 2023 22:25:32 -0000 @@ -0,0 +1,73 @@ +Use non-deprecated ffmpeg channel layout APIs if we detect libavutil >= 58 + +Index: src/plugins/stockencoders/FfmpegEncoder.cpp +--- src/plugins/stockencoders/FfmpegEncoder.cpp.orig ++++ src/plugins/stockencoders/FfmpegEncoder.cpp +@@ -39,6 +39,10 @@ + #include <random> + #include <map> + ++#if LIBAVUTIL_VERSION_MAJOR >= 58 ++#define USE_FFMPEG6_CHANNEL_LAYOUT ++#endif ++ + using namespace musik::core::sdk; + + static const int IO_CONTEXT_BUFFER_SIZE = 4096; +@@ -272,8 +276,13 @@ bool FfmpegEncoder::OpenOutputCodec(size_t rate, size_ + return false; + } + +- this->outputContext->channels = (int) channels; ++#ifdef USE_FFMPEG6_CHANNEL_LAYOUT ++ this->outputContext->ch_layout.nb_channels = (int)channels; ++ this->outputContext->ch_layout.order = AV_CHANNEL_ORDER_NATIVE; ++#else ++ this->outputContext->channels = (int)channels; + this->outputContext->channel_layout = resolveChannelLayout(channels); ++#endif + this->outputContext->sample_rate = resolveSampleRate(this->outputCodec, (int) rate); + this->outputContext->sample_fmt = resolveSampleFormat(this->outputCodec); + this->outputContext->bit_rate = (int64_t) bitrate * 1000; +@@ -314,6 +323,18 @@ bool FfmpegEncoder::OpenOutputCodec(size_t rate, size_ + + /* resampler context that will be used to convert the input audio + sample format to the one recommended by the encoder */ ++#ifdef USE_FFMPEG6_CHANNEL_LAYOUT ++ swr_alloc_set_opts2( ++ &this->resampler, ++ &this->outputContext->ch_layout, ++ this->outputContext->sample_fmt, ++ this->outputContext->sample_rate, ++ &this->outputContext->ch_layout, ++ AV_SAMPLE_FMT_FLT, ++ (int)rate, ++ 0, ++ nullptr); ++#else + this->resampler = swr_alloc_set_opts( + nullptr, + this->outputContext->channel_layout, +@@ -324,6 +345,7 @@ bool FfmpegEncoder::OpenOutputCodec(size_t rate, size_ + (int)rate, + 0, + nullptr); ++#endif + + error = swr_init(this->resampler); + +@@ -620,9 +642,13 @@ AVFrame* FfmpegEncoder::ReallocFrame( + } + original = av_frame_alloc(); + original->nb_samples = samplesPerChannel; +- original->channel_layout = this->outputContext->channel_layout; + original->format = format; + original->sample_rate = sampleRate; ++#ifdef USE_FFMPEG6_CHANNEL_LAYOUT ++ original->ch_layout = this->outputContext->ch_layout; ++#else ++ original->channel_layout = this->outputContext->channel_layout; ++#endif + int error = av_frame_get_buffer(original, 0); + if (error < 0) { + logAvError("av_frame_get_buffer", error);