Libvisual / libvisual

Libvisual Audio Visualization
http://libvisual.org/
81 stars 31 forks source link

macOS support / need your help with trying 0.4.x out on macOS (branch "0.4.x-macos") #246

Closed hartwork closed 1 year ago

hartwork commented 1 year ago

Hi! :wave:

The CI covers macOS for 0.4.x for two weeks now, there is an input plugin for PortAudio that supports macOS and there have been build system fixes for macOS to make CI integration possible in the first place.

However I have no access to macOS, all my boxes run Linux (and a pile of GNU). I am looking for people to help answer these macOS questions regarding libvisual 0.4.x:

  1. Does it compile out of the box?
  2. If it doesn't compile, did ./configure complain and helped figuring out what was needed?
  3. Does lv-tool-0.4 start and show a spinning 3D GL spectrum?
  4. Does lv-tool-0.4 use actual audio input when run with --input portaudio (and does it use the microphone or the audio that other apps are playing)?

If you can help answer these questions from practical experience, that would rock. To make that easier for you here's the quickest way I know:

Clone the right branch

git clone --branch 0.4.x-macos https://github.com/Libvisual/libvisual
cd libvisual

Install homebrew packages

EDIT 2023-02-08: Add package autoconf-archive this list of packages to install locally: https://github.com/Libvisual/libvisual/blob/fc109d84c613aff5dce4436f01ccc523edfd6304/.github/workflows/linux_and_macos.yml#L95-L112

Compile and run

Here's what I would put in a script run-0.4-macos.sh, this is very close to what I do on Linux, locally:

#! /usr/bin/env bash
set -eux

LV_INSTALL_PREFIX="${PWD}"/INSTALL_PREFIX

configure_args=(
  --prefix="${LV_INSTALL_PREFIX}"

  # In case you would like to play with AddressSanitizer:
  #CFLAGS="-O1 -pipe -g -fsanitize=address -fno-omit-frame-pointer"
  #CXXFLAGS="-O1 -pipe -g -fsanitize=address -fno-omit-frame-pointer"
  #LDFLAGS="-g -fsanitize=address"
)

for i in libvisual libvisual-plugins ; do
  ( cd "$i" && NOCONFIGURE=please ./autogen.sh )
done

pushd libvisual
  ./configure "${configure_args[@]}"
  make -j$(nproc)
  make install
popd

pushd libvisual-plugins
  PKG_CONFIG_PATH="${LV_INSTALL_PREFIX}"/lib/pkgconfig/ \
    ./configure "${configure_args[@]}"
  make -j$(nproc)
  make install
popd

lv_tool_env=(
  #ASAN_OPTIONS=detect_leaks=0
  DYLD_LIBRARY_PATH="${LV_INSTALL_PREFIX}"/lib/
)

exec env "${lv_tool_env[@]}" "${LV_INSTALL_PREFIX}"/bin/lv-tool-0.4 --input portaudio "$@"

What you should see:

Screenshot_20230203_195616_lv_tool_0_4

For anything odd that you find except compiler warnings, please open dedicated bug reports at https://github.com/Libvisual/libvisual/issues . Many thanks in advance! :pray:

Best, Sebastian

ChrisScheffler commented 1 year ago

CPU: M1 Pro (arm64) MacOS: Ventura 13.0.1 Kernel: Darwin Kernel Version 22.1.0

Does it compile out of the box?

no

If it doesn't compile, did ./configure complain and helped figuring out what was needed?

no, it fails at make

Does lv-tool-0.4 start and show a spinning 3D GL spectrum?

(after successful compile) it does start, but with a blank window

Does lv-tool-0.4 use actual audio input when run with --input portaudio (and does it use the microphone or the audio that other apps are playing)?

no _libvisual CRITICAL: lv-tool-0.4: inp_portaudioupload(): assertion `priv->stream != NULL' failed

image

Workaround for compile

make fails with default compiler clang

  1. install alternative compiler gcc 11 via brew brew install gcc@11
  2. override compiler flags for configure & make 2.1. ./configure CC=/opt/homebrew/bin/gcc-11 CXX=/opt/homebrew/bin/g++-11 2.2. make CC=/opt/homebrew/bin/gcc-11 CXX=/opt/homebrew/bin/g++-11

notes for run-0.4-macos.sh

  1. nproc is not available by default
  2. make install requires root privileges
idleberg commented 1 year ago

For comparison, here's the result on my rather old setup:

System Version: macOS 10.15.7 (19H2026) Kernel Version: Darwin 19.6.0 Model Name: Mac mini Model Identifier: Macmini8,1 Processor Name: 6-Core Intel Core i5

The output of your demo script:


+ LV_INSTALL_PREFIX=/Users/jan/Desktop/libvisual/INSTALL_PREFIX
+ configure_args=(--prefix="${LV_INSTALL_PREFIX}")
+ for i in libvisual libvisual-plugins
+ cd libvisual
+ NOCONFIGURE=please
+ ./autogen.sh
autoreconf: export WARNINGS=
autoreconf: Entering directory '.'
autoreconf: running: autopoint --force
autoreconf: running: aclocal --force -I m4
autoreconf: configure.ac: tracing
autoreconf: running: glibtoolize --copy --force
autoreconf: configure.ac: not using Intltool
autoreconf: configure.ac: not using Gtkdoc
autoreconf: running: aclocal --force -I m4
autoreconf: running: /usr/local/Cellar/autoconf/2.71/bin/autoconf --force
configure.ac:101: error: possibly undefined macro: AC_MSG_ERROR
      If this token and others are legitimate, please use m4_pattern_allow.
      See the Autoconf documentation.
autoreconf: error: /usr/local/Cellar/autoconf/2.71/bin/autoconf failed with exit status: 1
hartwork commented 1 year ago

Thank you! :+1: :+1: That's more and more severe trouble than I expected.

@ChrisScheffler regarding your report:

@idleberg regarding the AC_MSG_ERROR, is this with pkg-config installed, did you run the homebrew install list mentioned above? From what this reads it seems to happen when pkg-config is not installed.

hartwork commented 1 year ago

@idleberg PS: Alternatively, could it be that there are multiple copies of pkg-config and the wrong one wins the ${PATH} race? Does which pkg-config point at homebrew? Autoconf tries to satisfy macro PKG_PROG_PKG_CONFIG and it needs file pkg.m4 for that — my copy is at /usr/share/aclocal/pkg.m4. If the wrong pkg-config looks in effectively the wrong place, maybe that would cause the error.

idleberg commented 1 year ago

Homebrew gave me some warnings when installing the dependencies. Basically, they don't guarantee that installing "formalas" will continue work for an outdated OS. I tried again and I'm now getting this:

=====================================================================
LIBVISUAL, AN AUDIO VISUALISATION ABSTRACTION LIBRARY, VERSION 0.4.1
=====================================================================

install path                         : ~/libvisual/INSTALL_PREFIX/lib
plugins base directory               : /Users/jan/Desktop/libvisual/INSTALL_PREFIX/lib/libvisual-0.4
compiler                             : gcc
debug enabled                        : no

++ nproc
+ make -j6
/Library/Developer/CommandLineTools/usr/bin/make  all-recursive
Making all in libvisual
make[2]: Nothing to be done for `all'.
Making all in po
make[2]: Nothing to be done for `all'.
Making all in examples
make[2]: Nothing to be done for `all'.
Making all in tools/lv-tool
g++ -DHAVE_CONFIG_H -I. -I../..  -I../.. -I../../libvisual  -D_THREAD_SAFE -I/usr/local/include/SDL -g -O2 -MT lv_tool_0_4-lv-tool.o -MD -MP -MF .deps/lv_tool_0_4-lv-tool.Tpo -c -o lv_tool_0_4-lv-tool.o `test -f 'lv-tool.cpp' || echo './'`lv-tool.cpp
lv-tool.cpp:145:55: error: expected ';' after top level declarator
  const std::unordered_set<std::string> actors_to_skip {
                                                      ^
                                                      ;
lv-tool.cpp:168:8: warning: scoped enumerations are a C++11 extension [-Wc++11-extensions]
  enum class CycleDir
       ^
lv-tool.cpp:382:11: warning: 'auto' type specifier is a C++11 extension [-Wc++11-extensions]
          auto modelist = SDL_ListModes (nullptr, SDL_FULLSCREEN);
          ^
lv-tool.cpp:415:67: error: expected ';' at end of declaration
                  std::array<SDL_Color, target_color_count> colors {};
                                                                  ^
                                                                  ;
lv-tool.cpp:733:7: warning: 'auto' type specifier is a C++11 extension [-Wc++11-extensions]
      auto cycler = (dir == CycleDir::NEXT) ? visual_actor_get_next_by_name
      ^
lv-tool.cpp:733:29: warning: use of enumeration in a nested name specifier is a C++11 extension [-Wc++11-extensions]
      auto cycler = (dir == CycleDir::NEXT) ? visual_actor_get_next_by_name
                            ^
lv-tool.cpp:736:7: warning: 'auto' type specifier is a C++11 extension [-Wc++11-extensions]
      auto new_name = cycler (name.c_str ());
      ^
lv-tool.cpp:770:19: error: no matching constructor for initialization of '(anonymous namespace)::Libvisual'
        Libvisual main {argc, argv};
                  ^
/usr/local/include/SDL/SDL_main.h:34:14: note: expanded from macro 'main'
#define main SDL_main
             ^
lv-tool.cpp:175:9: note: candidate constructor (the implicit copy constructor) not viable: requires 1 argument, but 0
      were provided
  class Libvisual
        ^
lv-tool.cpp:179:7: note: candidate constructor not viable: requires 2 arguments, but 0 were provided
      Libvisual (int& argc, char**& argv)
      ^
lv-tool.cpp:770:23: error: expected ';' at end of declaration
        Libvisual main {argc, argv};
                      ^
                      ;
lv-tool.cpp:807:9: warning: 'auto' type specifier is a C++11 extension [-Wc++11-extensions]
        auto actor = bin.get_actor();
        ^
lv-tool.cpp:835:9: warning: 'auto' type specifier is a C++11 extension [-Wc++11-extensions]
        auto vidoptions = visual_actor_get_video_attribute_options(actor);
        ^
lv-tool.cpp:841:9: warning: 'auto' type specifier is a C++11 extension [-Wc++11-extensions]
        auto video = display.create(depth, vidoptions, width, height, true);
        ^
lv-tool.cpp:887:29: error: no matching constructor for initialization of '(anonymous namespace)::DisplayLock'
                DisplayLock lock {display};
                            ^
lv-tool.cpp:458:7: note: candidate constructor not viable: requires single argument 'display', but no arguments were
      provided
      DisplayLock(Display & display) : m_display(&display) {
      ^
lv-tool.cpp:453:9: note: candidate constructor (the implicit copy constructor) not viable: requires 1 argument, but 0
      were provided
  class DisplayLock
        ^
lv-tool.cpp:887:33: error: expected ';' at end of declaration
                DisplayLock lock {display};
                                ^
                                ;
lv-tool.cpp:910:64: warning: use of enumeration in a nested name specifier is a C++11 extension [-Wc++11-extensions]
                    actor_name = cycle_actor_name (actor_name, CycleDir::NEXT);
                                                               ^
lv-tool.cpp:922:13: warning: 'auto' type specifier is a C++11 extension [-Wc++11-extensions]
            auto pluginqueue = visual_plugin_get_eventqueue (visual_actor_get_plugin(bin.get_actor()));
            ^
lv-tool.cpp:938:37: error: no matching constructor for initialization of '(anonymous namespace)::DisplayLock'
                        DisplayLock lock {display};
                                    ^
lv-tool.cpp:458:7: note: candidate constructor not viable: requires single argument 'display', but no arguments were
      provided
      DisplayLock(Display & display) : m_display(&display) {
      ^
lv-tool.cpp:453:9: note: candidate constructor (the implicit copy constructor) not viable: requires 1 argument, but 0
      were provided
  class DisplayLock
        ^
lv-tool.cpp:938:41: error: expected ';' at end of declaration
                        DisplayLock lock {display};
                                        ^
                                        ;
lv-tool.cpp:960:68: warning: use of enumeration in a nested name specifier is a C++11 extension [-Wc++11-extensions]
                        actor_name = cycle_actor_name (actor_name, CycleDir::NEXT);
                                                                   ^
lv-tool.cpp:1032:29: error: no matching constructor for initialization of '(anonymous namespace)::DisplayLock'
                DisplayLock lock {display};
                            ^
lv-tool.cpp:458:7: note: candidate constructor not viable: requires single argument 'display', but no arguments were
      provided
      DisplayLock(Display & display) : m_display(&display) {
      ^
lv-tool.cpp:453:9: note: candidate constructor (the implicit copy constructor) not viable: requires 1 argument, but 0
      were provided
  class DisplayLock
        ^
lv-tool.cpp:1032:33: error: expected ';' at end of declaration
                DisplayLock lock {display};
                                ^
                                ;
11 warnings and 10 errors generated.
make[2]: *** [lv_tool_0_4-lv-tool.o] Error 1
make[1]: *** [all-recursive] Error 1
make: *** [all] Error 2
ChrisScheffler commented 1 year ago

startup with root privileges:

libvisual CRITICAL: lv-tool-0.4: VisPluginRef **visual_plugin_get_references(const char *, int *)(): Cannot load plugin: dlopen(/usr/local/lib/libvisual-0.4/input/input_mplayer.so, 0x0001): symbol not found in flat namespace '_mremap'
lv-tool - Libvisual 0.4.1 commandline tool - https://github.com/Libvisual/libvisual
libvisual CRITICAL: lv-tool-0.4: int visual_video_set_depth(VisVideo *, VisVideoDepth)(): assertion `video != NULL' failed
libvisual CRITICAL: lv-tool-0.4: int visual_video_set_depth(VisVideo *, VisVideoDepth)(): assertion `video != NULL' failed
libvisual CRITICAL: lv-tool-0.4: inp_portaudio_init(): assertion `open_error == paNoError' failed
libvisual CRITICAL: lv-tool-0.4: inp_portaudio_upload(): assertion `priv->stream != NULL' failed
ChrisScheffler commented 1 year ago

@idleberg last comment addresses the clang issue. Its the default compiler frontend (not homebrew). On M1 Pro @ Ventura: gcc -v

Apple clang version 14.0.0 (clang-1400.0.29.202)
Target: arm64-apple-darwin22.1.0
hartwork commented 1 year ago

Thanks for the updates, interesting! :+1:

There is a new branch 0.4.x-macos with these noteworthy changes:

Could you try with branch 0.4.x-macos and report back?

Thanks in advance! :pray:

hartwork commented 1 year ago

PS: One more homebrew package is needed with branch 0.4.x-macos now: autoconf-archive.

ChrisScheffler commented 1 year ago

compiling branch 0.4.x-macos with native clang fails for G-Force plugin (errors only):

G-Force.cpp:345:4: error: no matching member function for call to 'Print'
                        Print(_("WaveShape:  "));
                        ^~~~~
../../../../plugins/actor/G-Force/GForceCommon/Headers/G-Force.h:146:12: note: candidate function not viable: 1st argument ('const char *') would lose const qualifier
                void                                    Print( char* inStr );
                                                        ^
../../../../plugins/actor/G-Force/GForceCommon/Headers/G-Force.h:147:12: note: candidate function not viable: no known conversion from 'const char *' to 'UtilStr *' for 1st argument
                void                                    Print( UtilStr* inStr )                                                                                 { if ( inStr ) Print( inStr -> getCStr() );             }
                                                        ^
G-Force.cpp:347:4: error: no matching member function for call to 'Print'
                        Print(_("ColorMap:   "));
                        ^~~~~
../../../../plugins/actor/G-Force/GForceCommon/Headers/G-Force.h:146:12: note: candidate function not viable: 1st argument ('const char *') would lose const qualifier
                void                                    Print( char* inStr );
                                                        ^
../../../../plugins/actor/G-Force/GForceCommon/Headers/G-Force.h:147:12: note: candidate function not viable: no known conversion from 'const char *' to 'UtilStr *' for 1st argument
                void                                    Print( UtilStr* inStr )                                                                                 { if ( inStr ) Print( inStr -> getCStr() );             }
                                                        ^
G-Force.cpp:349:4: error: no matching member function for call to 'Print'
                        Print(_("DeltaField: "));
                        ^~~~~
../../../../plugins/actor/G-Force/GForceCommon/Headers/G-Force.h:146:12: note: candidate function not viable: 1st argument ('const char *') would lose const qualifier
                void                                    Print( char* inStr );
                                                        ^
../../../../plugins/actor/G-Force/GForceCommon/Headers/G-Force.h:147:12: note: candidate function not viable: no known conversion from 'const char *' to 'UtilStr *' for 1st argument
                void                                    Print( UtilStr* inStr )                                                                                 { if ( inStr ) Print( inStr -> getCStr() );             }
                                                        ^
G-Force.cpp:353:5: error: no matching member function for call to 'Print'
                                Print(_("Particles:  "));
                                ^~~~~
../../../../plugins/actor/G-Force/GForceCommon/Headers/G-Force.h:146:12: note: candidate function not viable: 1st argument ('const char *') would lose const qualifier
                void                                    Print( char* inStr );
                                                        ^
../../../../plugins/actor/G-Force/GForceCommon/Headers/G-Force.h:147:12: note: candidate function not viable: no known conversion from 'const char *' to 'UtilStr *' for 1st argument
                void                                    Print( UtilStr* inStr )                                                                                 { if ( inStr ) Print( inStr -> getCStr() );             }
                                                        ^
G-Force.cpp:374:4: error: no matching member function for call to 'Print'
                        Print(_("Amplitude scale: "));
                        ^~~~~
../../../../plugins/actor/G-Force/GForceCommon/Headers/G-Force.h:146:12: note: candidate function not viable: 1st argument ('const char *') would lose const qualifier
                void                                    Print( char* inStr );
                                                        ^
../../../../plugins/actor/G-Force/GForceCommon/Headers/G-Force.h:147:12: note: candidate function not viable: no known conversion from 'const char *' to 'UtilStr *' for 1st argument
                void                                    Print( UtilStr* inStr )                                                                                 { if ( inStr ) Print( inStr -> getCStr() );             }
                                                        ^
G-Force.cpp:381:4: error: no matching member function for call to 'Print'
                        Print(_("Amplitude scale: "));
                        ^~~~~
../../../../plugins/actor/G-Force/GForceCommon/Headers/G-Force.h:146:12: note: candidate function not viable: 1st argument ('const char *') would lose const qualifier
                void                                    Print( char* inStr );
                                                        ^
../../../../plugins/actor/G-Force/GForceCommon/Headers/G-Force.h:147:12: note: candidate function not viable: no known conversion from 'const char *' to 'UtilStr *' for 1st argument
                void                                    Print( UtilStr* inStr )                                                                                 { if ( inStr ) Print( inStr -> getCStr() );             }
                                                        ^
G-Force.cpp:388:5: error: no matching member function for call to 'Println'
                                Println(_("Particles ON"));
                                ^~~~~~~
../../../../plugins/actor/G-Force/GForceCommon/Headers/G-Force.h:148:12: note: candidate function not viable: 1st argument ('const char *') would lose const qualifier
                void                                    Println( char* inStr );
                                                        ^
../../../../plugins/actor/G-Force/GForceCommon/Headers/G-Force.h:149:12: note: candidate function not viable: no known conversion from 'const char *' to 'UtilStr *' for 1st argument
                void                                    Println( UtilStr* inStr )                                                                               { Println( inStr ? inStr -> getCStr() : 0 ); }
                                                        ^
G-Force.cpp:390:5: error: no matching member function for call to 'Println'
                                Println(_("Particles OFF"));
                                ^~~~~~~
../../../../plugins/actor/G-Force/GForceCommon/Headers/G-Force.h:148:12: note: candidate function not viable: 1st argument ('const char *') would lose const qualifier
                void                                    Println( char* inStr );
                                                        ^
../../../../plugins/actor/G-Force/GForceCommon/Headers/G-Force.h:149:12: note: candidate function not viable: no known conversion from 'const char *' to 'UtilStr *' for 1st argument
                void                                    Println( UtilStr* inStr )                                                                               { Println( inStr ? inStr -> getCStr() : 0 ); }
                                                        ^
G-Force.cpp:412:5: error: no matching member function for call to 'Println'
                                Println(_("Show names ON"));
                                ^~~~~~~
../../../../plugins/actor/G-Force/GForceCommon/Headers/G-Force.h:148:12: note: candidate function not viable: 1st argument ('const char *') would lose const qualifier
                void                                    Println( char* inStr );
                                                        ^
../../../../plugins/actor/G-Force/GForceCommon/Headers/G-Force.h:149:12: note: candidate function not viable: no known conversion from 'const char *' to 'UtilStr *' for 1st argument
                void                                    Println( UtilStr* inStr )                                                                               { Println( inStr ? inStr -> getCStr() : 0 ); }
                                                        ^
G-Force.cpp:414:5: error: no matching member function for call to 'Println'
                                Println(_("Show names OFF"));
                                ^~~~~~~
../../../../plugins/actor/G-Force/GForceCommon/Headers/G-Force.h:148:12: note: candidate function not viable: 1st argument ('const char *') would lose const qualifier
                void                                    Println( char* inStr );
                                                        ^
../../../../plugins/actor/G-Force/GForceCommon/Headers/G-Force.h:149:12: note: candidate function not viable: no known conversion from 'const char *' to 'UtilStr *' for 1st argument
                void                                    Println( UtilStr* inStr )                                                                               { Println( inStr ? inStr -> getCStr() : 0 ); }
                                                        ^
G-Force.cpp:420:5: error: no matching member function for call to 'Println'
                                Println(_("Normalize ON"));
                                ^~~~~~~
../../../../plugins/actor/G-Force/GForceCommon/Headers/G-Force.h:148:12: note: candidate function not viable: 1st argument ('const char *') would lose const qualifier
                void                                    Println( char* inStr );
                                                        ^
../../../../plugins/actor/G-Force/GForceCommon/Headers/G-Force.h:149:12: note: candidate function not viable: no known conversion from 'const char *' to 'UtilStr *' for 1st argument
                void                                    Println( UtilStr* inStr )                                                                               { Println( inStr ? inStr -> getCStr() : 0 ); }
                                                        ^
G-Force.cpp:422:5: error: no matching member function for call to 'Println'
                                Println(_("Normalize OFF"));
                                ^~~~~~~
../../../../plugins/actor/G-Force/GForceCommon/Headers/G-Force.h:148:12: note: candidate function not viable: 1st argument ('const char *') would lose const qualifier
                void                                    Println( char* inStr );
                                                        ^
../../../../plugins/actor/G-Force/GForceCommon/Headers/G-Force.h:149:12: note: candidate function not viable: no known conversion from 'const char *' to 'UtilStr *' for 1st argument
                void                                    Println( UtilStr* inStr )                                                                               { Println( inStr ? inStr -> getCStr() : 0 ); }
                                                        ^
G-Force.cpp:435:5: error: no matching member function for call to 'Print'
                                Print(_("Loading DeltaField: "));
                                ^~~~~
../../../../plugins/actor/G-Force/GForceCommon/Headers/G-Force.h:146:12: note: candidate function not viable: 1st argument ('const char *') would lose const qualifier
                void                                    Print( char* inStr );
                                                        ^
../../../../plugins/actor/G-Force/GForceCommon/Headers/G-Force.h:147:12: note: candidate function not viable: no known conversion from 'const char *' to 'UtilStr *' for 1st argument
                void                                    Print( UtilStr* inStr )                                                                                 { if ( inStr ) Print( inStr -> getCStr() );             }
                                                        ^
G-Force.cpp:446:5: error: no matching member function for call to 'Println'
                                Println(_("DeltaField slideshow ON"));
                                ^~~~~~~
../../../../plugins/actor/G-Force/GForceCommon/Headers/G-Force.h:148:12: note: candidate function not viable: 1st argument ('const char *') would lose const qualifier
                void                                    Println( char* inStr );
                                                        ^
../../../../plugins/actor/G-Force/GForceCommon/Headers/G-Force.h:149:12: note: candidate function not viable: no known conversion from 'const char *' to 'UtilStr *' for 1st argument
                void                                    Println( UtilStr* inStr )                                                                               { Println( inStr ? inStr -> getCStr() : 0 ); }
                                                        ^
G-Force.cpp:449:5: error: no matching member function for call to 'Println'
                                Println(_("DeltaField slideshow OFF"));
                                ^~~~~~~
../../../../plugins/actor/G-Force/GForceCommon/Headers/G-Force.h:148:12: note: candidate function not viable: 1st argument ('const char *') would lose const qualifier
                void                                    Println( char* inStr );
                                                        ^
../../../../plugins/actor/G-Force/GForceCommon/Headers/G-Force.h:149:12: note: candidate function not viable: no known conversion from 'const char *' to 'UtilStr *' for 1st argument
                void                                    Println( UtilStr* inStr )                                                                               { Println( inStr ? inStr -> getCStr() : 0 ); }
                                                        ^
G-Force.cpp:457:4: error: no matching member function for call to 'Println'
                        Println(_("All slideshows ON"));
                        ^~~~~~~
../../../../plugins/actor/G-Force/GForceCommon/Headers/G-Force.h:148:12: note: candidate function not viable: 1st argument ('const char *') would lose const qualifier
                void                                    Println( char* inStr );
                                                        ^
../../../../plugins/actor/G-Force/GForceCommon/Headers/G-Force.h:149:12: note: candidate function not viable: no known conversion from 'const char *' to 'UtilStr *' for 1st argument
                void                                    Println( UtilStr* inStr )                                                                               { Println( inStr ? inStr -> getCStr() : 0 ); }
                                                        ^
G-Force.cpp:464:4: error: no matching member function for call to 'Println'
                        Println(_("All slideshows OFF"));
                        ^~~~~~~
../../../../plugins/actor/G-Force/GForceCommon/Headers/G-Force.h:148:12: note: candidate function not viable: 1st argument ('const char *') would lose const qualifier
                void                                    Println( char* inStr );
                                                        ^
../../../../plugins/actor/G-Force/GForceCommon/Headers/G-Force.h:149:12: note: candidate function not viable: no known conversion from 'const char *' to 'UtilStr *' for 1st argument
                void                                    Println( UtilStr* inStr )                                                                               { Println( inStr ? inStr -> getCStr() : 0 ); }
                                                        ^
G-Force.cpp:483:5: error: no matching member function for call to 'Println'
                                Println(_("ColorMap slideshow ON"));
                                ^~~~~~~
../../../../plugins/actor/G-Force/GForceCommon/Headers/G-Force.h:148:12: note: candidate function not viable: 1st argument ('const char *') would lose const qualifier
                void                                    Println( char* inStr );
                                                        ^
../../../../plugins/actor/G-Force/GForceCommon/Headers/G-Force.h:149:12: note: candidate function not viable: no known conversion from 'const char *' to 'UtilStr *' for 1st argument
                void                                    Println( UtilStr* inStr )                                                                               { Println( inStr ? inStr -> getCStr() : 0 ); }
                                                        ^
G-Force.cpp:486:5: error: no matching member function for call to 'Println'
                                Println(_("ColorMap slideshow OFF"));
                                ^~~~~~~
../../../../plugins/actor/G-Force/GForceCommon/Headers/G-Force.h:148:12: note: candidate function not viable: 1st argument ('const char *') would lose const qualifier
                void                                    Println( char* inStr );
                                                        ^
../../../../plugins/actor/G-Force/GForceCommon/Headers/G-Force.h:149:12: note: candidate function not viable: no known conversion from 'const char *' to 'UtilStr *' for 1st argument
                void                                    Println( UtilStr* inStr )                                                                               { Println( inStr ? inStr -> getCStr() : 0 ); }
                                                        ^
fatal error: too many errors emitted, stopping now [-ferror-limit=]

output for compiled binary (with gcc 11):

lv-tool - Libvisual 0.4.1 commandline tool - https://github.com/Libvisual/libvisual
libvisual CRITICAL: lv-tool-0.4: int visual_video_set_depth(VisVideo *, VisVideoDepth)(): assertion `video != NULL' failed
libvisual CRITICAL: lv-tool-0.4: int visual_video_set_depth(VisVideo *, VisVideoDepth)(): assertion `video != NULL' failed
libvisual CRITICAL: lv-tool-0.4: inp_portaudio_init(): PortAudio: Could not open input stream, error -9998 "Invalid number of channels".
libvisual CRITICAL: lv-tool-0.4: inp_portaudio_upload(): assertion `priv->stream != NULL' failed
hartwork commented 1 year ago

@ChrisScheffler thanks! Will need to look into the C++ errors and find a clean way to make the PortAudio code first try stereo and the fall back to mono. With the changes regarding OpenGL, did you still get a black window or a rotating plane of squares this time?

ChrisScheffler commented 1 year ago

@hartwork sorry, forgot the screenshot. The window is now filled with colored "bars" as expected.

image
hartwork commented 1 year ago

@ChrisScheffler that is plain awesome! :+1:

idleberg commented 1 year ago

With the new version, I'm getting dozens of warnings (C++11 related, OpenGL deprecations and others) and ultimately an error:

~/Desktop/libvisual
+ lv_tool_env=(DYLD_LIBRARY_PATH="${LV_INSTALL_PREFIX}"/lib/)
+ exec env DYLD_LIBRARY_PATH=/Users/jan/Desktop/libvisual/INSTALL_PREFIX/lib/ /Users/jan/Desktop/libvisual/INSTALL_PREFIX/bin/lv-tool-0.4 --input portaudio
lv-tool - Libvisual 0.4.1 commandline tool - https://github.com/Libvisual/libvisual
Failed to start pipeline with actor 'lv_gltest' and input 'portaudio'

Let me know if you need the entire log (3181 lines)

PS: neither version will compile with root privileges

hartwork commented 1 year ago

@ChrisScheffler I made the PortAudio plugin fall back to mono now when stereo is not available, same branch. Could you give it a try?

@idleberg I did try with macOS 10.15 and its system Clang in the CI earlier, strange. If you could drag-n-drop the full log as a text file into a reply, that would rock (and be the easiest to look at). Alternatively, a <details> tag would work well too. The log would allow seeing if plugins lv_gltest and portaudio were fully built. PS: There should be no need for root with anything here, I made run-0.4-macos.sh with that in mind, e.g. that's why I put DYLD_LIBRARY_PATH in there. But maybe it needs adjustment (if the plugins are fully built). Could you share the output of find . -name \*lv_gltest.dy\*?

hartwork commented 1 year ago

@idleberg PS: Got your e-mail just now.

ChrisScheffler commented 1 year ago

@hartwork with the new version of the plugin audio is captured from the microphone and visualized.

output:

lv-tool - Libvisual 0.4.1 commandline tool - https://github.com/Libvisual/libvisual
libvisual CRITICAL: lv-tool-0.4: visual_video_set_depth(): assertion `video != NULL' failed
libvisual CRITICAL: lv-tool-0.4: visual_video_set_depth(): assertion `video != NULL' failed
hartwork commented 1 year ago

@hartwork with the new version of the plugin audio is captured from the microphone and visualized.

@ChrisScheffler awesome!

lv-tool - Libvisual 0.4.1 commandline tool - https://github.com/Libvisual/libvisual
libvisual CRITICAL: lv-tool-0.4: visual_video_set_depth(): assertion `video != NULL' failed
libvisual CRITICAL: lv-tool-0.4: visual_video_set_depth(): assertion `video != NULL' failed

The assertion output is not specific to macOS and a known todo, but thanks.

hartwork commented 1 year ago

compiling branch 0.4.x-macos with native clang fails for G-Force plugin (errors only):

Compiler output ``` G-Force.cpp:345:4: error: no matching member function for call to 'Print' Print(_("WaveShape: ")); ^~~~~ ../../../../plugins/actor/G-Force/GForceCommon/Headers/G-Force.h:146:12: note: candidate function not viable: 1st argument ('const char *') would lose const qualifier void Print( char* inStr ); ^ ../../../../plugins/actor/G-Force/GForceCommon/Headers/G-Force.h:147:12: note: candidate function not viable: no known conversion from 'const char *' to 'UtilStr *' for 1st argument void Print( UtilStr* inStr ) { if ( inStr ) Print( inStr -> getCStr() ); } ^ G-Force.cpp:347:4: error: no matching member function for call to 'Print' Print(_("ColorMap: ")); ^~~~~ ../../../../plugins/actor/G-Force/GForceCommon/Headers/G-Force.h:146:12: note: candidate function not viable: 1st argument ('const char *') would lose const qualifier void Print( char* inStr ); ^ ../../../../plugins/actor/G-Force/GForceCommon/Headers/G-Force.h:147:12: note: candidate function not viable: no known conversion from 'const char *' to 'UtilStr *' for 1st argument void Print( UtilStr* inStr ) { if ( inStr ) Print( inStr -> getCStr() ); } ^ G-Force.cpp:349:4: error: no matching member function for call to 'Print' Print(_("DeltaField: ")); ^~~~~ ../../../../plugins/actor/G-Force/GForceCommon/Headers/G-Force.h:146:12: note: candidate function not viable: 1st argument ('const char *') would lose const qualifier void Print( char* inStr ); ^ ../../../../plugins/actor/G-Force/GForceCommon/Headers/G-Force.h:147:12: note: candidate function not viable: no known conversion from 'const char *' to 'UtilStr *' for 1st argument void Print( UtilStr* inStr ) { if ( inStr ) Print( inStr -> getCStr() ); } ^ G-Force.cpp:353:5: error: no matching member function for call to 'Print' Print(_("Particles: ")); ^~~~~ ../../../../plugins/actor/G-Force/GForceCommon/Headers/G-Force.h:146:12: note: candidate function not viable: 1st argument ('const char *') would lose const qualifier void Print( char* inStr ); ^ ../../../../plugins/actor/G-Force/GForceCommon/Headers/G-Force.h:147:12: note: candidate function not viable: no known conversion from 'const char *' to 'UtilStr *' for 1st argument void Print( UtilStr* inStr ) { if ( inStr ) Print( inStr -> getCStr() ); } ^ G-Force.cpp:374:4: error: no matching member function for call to 'Print' Print(_("Amplitude scale: ")); ^~~~~ ../../../../plugins/actor/G-Force/GForceCommon/Headers/G-Force.h:146:12: note: candidate function not viable: 1st argument ('const char *') would lose const qualifier void Print( char* inStr ); ^ ../../../../plugins/actor/G-Force/GForceCommon/Headers/G-Force.h:147:12: note: candidate function not viable: no known conversion from 'const char *' to 'UtilStr *' for 1st argument void Print( UtilStr* inStr ) { if ( inStr ) Print( inStr -> getCStr() ); } ^ G-Force.cpp:381:4: error: no matching member function for call to 'Print' Print(_("Amplitude scale: ")); ^~~~~ ../../../../plugins/actor/G-Force/GForceCommon/Headers/G-Force.h:146:12: note: candidate function not viable: 1st argument ('const char *') would lose const qualifier void Print( char* inStr ); ^ ../../../../plugins/actor/G-Force/GForceCommon/Headers/G-Force.h:147:12: note: candidate function not viable: no known conversion from 'const char *' to 'UtilStr *' for 1st argument void Print( UtilStr* inStr ) { if ( inStr ) Print( inStr -> getCStr() ); } ^ G-Force.cpp:388:5: error: no matching member function for call to 'Println' Println(_("Particles ON")); ^~~~~~~ ../../../../plugins/actor/G-Force/GForceCommon/Headers/G-Force.h:148:12: note: candidate function not viable: 1st argument ('const char *') would lose const qualifier void Println( char* inStr ); ^ ../../../../plugins/actor/G-Force/GForceCommon/Headers/G-Force.h:149:12: note: candidate function not viable: no known conversion from 'const char *' to 'UtilStr *' for 1st argument void Println( UtilStr* inStr ) { Println( inStr ? inStr -> getCStr() : 0 ); } ^ G-Force.cpp:390:5: error: no matching member function for call to 'Println' Println(_("Particles OFF")); ^~~~~~~ ../../../../plugins/actor/G-Force/GForceCommon/Headers/G-Force.h:148:12: note: candidate function not viable: 1st argument ('const char *') would lose const qualifier void Println( char* inStr ); ^ ../../../../plugins/actor/G-Force/GForceCommon/Headers/G-Force.h:149:12: note: candidate function not viable: no known conversion from 'const char *' to 'UtilStr *' for 1st argument void Println( UtilStr* inStr ) { Println( inStr ? inStr -> getCStr() : 0 ); } ^ G-Force.cpp:412:5: error: no matching member function for call to 'Println' Println(_("Show names ON")); ^~~~~~~ ../../../../plugins/actor/G-Force/GForceCommon/Headers/G-Force.h:148:12: note: candidate function not viable: 1st argument ('const char *') would lose const qualifier void Println( char* inStr ); ^ ../../../../plugins/actor/G-Force/GForceCommon/Headers/G-Force.h:149:12: note: candidate function not viable: no known conversion from 'const char *' to 'UtilStr *' for 1st argument void Println( UtilStr* inStr ) { Println( inStr ? inStr -> getCStr() : 0 ); } ^ G-Force.cpp:414:5: error: no matching member function for call to 'Println' Println(_("Show names OFF")); ^~~~~~~ ../../../../plugins/actor/G-Force/GForceCommon/Headers/G-Force.h:148:12: note: candidate function not viable: 1st argument ('const char *') would lose const qualifier void Println( char* inStr ); ^ ../../../../plugins/actor/G-Force/GForceCommon/Headers/G-Force.h:149:12: note: candidate function not viable: no known conversion from 'const char *' to 'UtilStr *' for 1st argument void Println( UtilStr* inStr ) { Println( inStr ? inStr -> getCStr() : 0 ); } ^ G-Force.cpp:420:5: error: no matching member function for call to 'Println' Println(_("Normalize ON")); ^~~~~~~ ../../../../plugins/actor/G-Force/GForceCommon/Headers/G-Force.h:148:12: note: candidate function not viable: 1st argument ('const char *') would lose const qualifier void Println( char* inStr ); ^ ../../../../plugins/actor/G-Force/GForceCommon/Headers/G-Force.h:149:12: note: candidate function not viable: no known conversion from 'const char *' to 'UtilStr *' for 1st argument void Println( UtilStr* inStr ) { Println( inStr ? inStr -> getCStr() : 0 ); } ^ G-Force.cpp:422:5: error: no matching member function for call to 'Println' Println(_("Normalize OFF")); ^~~~~~~ ../../../../plugins/actor/G-Force/GForceCommon/Headers/G-Force.h:148:12: note: candidate function not viable: 1st argument ('const char *') would lose const qualifier void Println( char* inStr ); ^ ../../../../plugins/actor/G-Force/GForceCommon/Headers/G-Force.h:149:12: note: candidate function not viable: no known conversion from 'const char *' to 'UtilStr *' for 1st argument void Println( UtilStr* inStr ) { Println( inStr ? inStr -> getCStr() : 0 ); } ^ G-Force.cpp:435:5: error: no matching member function for call to 'Print' Print(_("Loading DeltaField: ")); ^~~~~ ../../../../plugins/actor/G-Force/GForceCommon/Headers/G-Force.h:146:12: note: candidate function not viable: 1st argument ('const char *') would lose const qualifier void Print( char* inStr ); ^ ../../../../plugins/actor/G-Force/GForceCommon/Headers/G-Force.h:147:12: note: candidate function not viable: no known conversion from 'const char *' to 'UtilStr *' for 1st argument void Print( UtilStr* inStr ) { if ( inStr ) Print( inStr -> getCStr() ); } ^ G-Force.cpp:446:5: error: no matching member function for call to 'Println' Println(_("DeltaField slideshow ON")); ^~~~~~~ ../../../../plugins/actor/G-Force/GForceCommon/Headers/G-Force.h:148:12: note: candidate function not viable: 1st argument ('const char *') would lose const qualifier void Println( char* inStr ); ^ ../../../../plugins/actor/G-Force/GForceCommon/Headers/G-Force.h:149:12: note: candidate function not viable: no known conversion from 'const char *' to 'UtilStr *' for 1st argument void Println( UtilStr* inStr ) { Println( inStr ? inStr -> getCStr() : 0 ); } ^ G-Force.cpp:449:5: error: no matching member function for call to 'Println' Println(_("DeltaField slideshow OFF")); ^~~~~~~ ../../../../plugins/actor/G-Force/GForceCommon/Headers/G-Force.h:148:12: note: candidate function not viable: 1st argument ('const char *') would lose const qualifier void Println( char* inStr ); ^ ../../../../plugins/actor/G-Force/GForceCommon/Headers/G-Force.h:149:12: note: candidate function not viable: no known conversion from 'const char *' to 'UtilStr *' for 1st argument void Println( UtilStr* inStr ) { Println( inStr ? inStr -> getCStr() : 0 ); } ^ G-Force.cpp:457:4: error: no matching member function for call to 'Println' Println(_("All slideshows ON")); ^~~~~~~ ../../../../plugins/actor/G-Force/GForceCommon/Headers/G-Force.h:148:12: note: candidate function not viable: 1st argument ('const char *') would lose const qualifier void Println( char* inStr ); ^ ../../../../plugins/actor/G-Force/GForceCommon/Headers/G-Force.h:149:12: note: candidate function not viable: no known conversion from 'const char *' to 'UtilStr *' for 1st argument void Println( UtilStr* inStr ) { Println( inStr ? inStr -> getCStr() : 0 ); } ^ G-Force.cpp:464:4: error: no matching member function for call to 'Println' Println(_("All slideshows OFF")); ^~~~~~~ ../../../../plugins/actor/G-Force/GForceCommon/Headers/G-Force.h:148:12: note: candidate function not viable: 1st argument ('const char *') would lose const qualifier void Println( char* inStr ); ^ ../../../../plugins/actor/G-Force/GForceCommon/Headers/G-Force.h:149:12: note: candidate function not viable: no known conversion from 'const char *' to 'UtilStr *' for 1st argument void Println( UtilStr* inStr ) { Println( inStr ? inStr -> getCStr() : 0 ); } ^ G-Force.cpp:483:5: error: no matching member function for call to 'Println' Println(_("ColorMap slideshow ON")); ^~~~~~~ ../../../../plugins/actor/G-Force/GForceCommon/Headers/G-Force.h:148:12: note: candidate function not viable: 1st argument ('const char *') would lose const qualifier void Println( char* inStr ); ^ ../../../../plugins/actor/G-Force/GForceCommon/Headers/G-Force.h:149:12: note: candidate function not viable: no known conversion from 'const char *' to 'UtilStr *' for 1st argument void Println( UtilStr* inStr ) { Println( inStr ? inStr -> getCStr() : 0 ); } ^ G-Force.cpp:486:5: error: no matching member function for call to 'Println' Println(_("ColorMap slideshow OFF")); ^~~~~~~ ../../../../plugins/actor/G-Force/GForceCommon/Headers/G-Force.h:148:12: note: candidate function not viable: 1st argument ('const char *') would lose const qualifier void Println( char* inStr ); ^ ../../../../plugins/actor/G-Force/GForceCommon/Headers/G-Force.h:149:12: note: candidate function not viable: no known conversion from 'const char *' to 'UtilStr *' for 1st argument void Println( UtilStr* inStr ) { Println( inStr ? inStr -> getCStr() : 0 ); } ^ fatal error: too many errors emitted, stopping now [-ferror-limit=] ```

@ChrisScheffler this^^ seems to be about const correctness. I believe that is fixed by 0c21b884a2f9c2811750810607850e483c401d4d now, same branch. Can you confirm?

ChrisScheffler commented 1 year ago

@hartwork 6d93614b816ef4526190ecc5e33e3e402c91e389 compiles without errors for clang and gcc11

hartwork commented 1 year ago

@ChrisScheffler perfect, thank you! :+1:

hartwork commented 1 year ago

libvisual just entered Homebrew. Please be invited to try it on macOS for yourself:

brew install libvisual libvisual-plugins libvisual-projectm
lv-tool-0.4 --input portaudio  # left click cycles through visual effects