musikinformatik / SuperDirt

Tidal Audio Engine
GNU General Public License v2.0
520 stars 74 forks source link

does this work with SC 3.11.0 ? #192

Closed jwaldmann closed 4 years ago

jwaldmann commented 4 years ago

Hi.

I built supercollider-3.11.0 from source, then sc3-plugins (git master) from source. Then:

$ sclang superdirt_startup.scd                                                                       

compiling class library...                                                                                           
        Found 733 primitives.                                                                                        
        Compiling directory '/opt/supercollider/3.11.0/share/SuperCollider/SCClassLibrary'                           
        Compiling directory '/opt/supercollider/3.11.0/share/SuperCollider/Extensions'                               
        Compiling directory '/home/waldmann/.local/share/SuperCollider/Extensions'                                   
        Compiling directory '/home/waldmann/.local/share/SuperCollider/downloaded-quarks/Vowel'                      
        Compiling directory '/home/waldmann/.local/share/SuperCollider/downloaded-quarks/SuperDirt'            
        Compiling directory '/home/waldmann/.local/share/SuperCollider/downloaded-quarks/Dirt-Samples'          
ERROR: Class extension for nonexistent class 'Plotter'                                                               
     In file:'deprecated/3.10/Plotter.sc'                      
...
tech (13) techno (7) tink (5) tok (4) toys (13) trump (11) ul (10) ulgab (5) uxay (3) v (6) voodoo (5) wind (10) wobb
le (1) world (3) xmas (1) yeah (31)                                                                                  
... file reading complete. Required 449 MB of memory.                                                                

SuperDirt: listening to Tidal on port 57120                                                                          
*** ERROR: SynthDef dirt_delay2 not found                                                                            
FAILURE IN SERVER /s_new SynthDef not found
...

What to do? Preferrably with sclang, as I don't have scide, since I was building sc with -DSC_QT=OFF because I found no other way to start sclang on a remote server, and keep it running after logging out.

Well I guess I could build another SC with GUI but that seems quite roundabout. I'd rather I understand the proper way of (re)installing SuperDirt better.

jwaldmann commented 4 years ago

I don't get the above error for sc-3.10.4 without sc3-plugins, and it also seems to work fine for sc-3.11.0 without sc3-plugins.

telephon commented 4 years ago

ERROR: Class extension for nonexistent class 'Plotter'
In file:'deprecated/3.10/Plotter.sc'

This indicates that something is wrong with the include paths. Take a look at the preferences > interpreter and make sure that the SCClassLibrary and HelpSource point to the supercollider directory that you used to build it.

The other error might be a consequential error.

jwaldmann commented 4 years ago

could I "take this look" with sclang (not scide)?

telephon commented 4 years ago
LanguageConfig.includePaths // take a look

// and then edit

LanguageConfig.addIncludePath(aPath) 

LanguageConfig.removeIncludePath(aPath)

LanguageConfig.addExcludePath(aPath)

LanguageConfig.removeExcludePath(aPath)

// finally, store:

LanguageConfig.store(LanguageConfig.currentPath);

hope this helps

jwaldmann commented 4 years ago

Thanks. Paths are identical between 3.10.2 and 3.11.0:

sc3> LanguageConfig.includePaths
-> [ /home/waldmann/.local/share/SuperCollider/downloaded-quarks/Vowel, /home/waldmann/.local/share/SuperCollider/downloaded-quarks/Dirt-Samples, /home/waldmann/.local/share/SuperCollider/downloaded-quarks/SuperDirt ]

and that's consistent with the log I included above.

Will investigate further (try more versions). (I find it difficult to build SC at specific versions since source.tar.gz sometimes can't be used (it's missing git information on submodules), and when I git checkout Version-3.X.Y I don't see any change in submodules. Oh well.)

Result of my compilations: The error above is absent from SC 3.10.3, and appears in SC 3.10.4

mossheim commented 4 years ago

you can simply delete that file for now. it shouldn't have been installed in a GUI build. i'll try to fix it this week for the 3.11.1 release.

mossheim commented 4 years ago

git is infinitely configurable. to update submodules after a checkout you can run git submodule update --recursive. you can also set config options within git and/or pass options to git to update submodules automatically upon checkout. see https://github.com/supercollider/supercollider/wiki/git-cheat-sheet#working-with-submodules or git help <command> for more info

jwaldmann commented 4 years ago

@brianlheim Thanks! I did git submodule update but didn't notice them changing. E.g., yaml-cpp is always on release-0.5.3-35-g728e26e. But some others are in fact moving.

I removed /opt/supercollider/3.11.0/share/SuperCollider/SCClassLibrary/deprecated/3.10/Plotter.sc and Class extension for nonexistent class goes away.

jwaldmann commented 4 years ago

@telephon I think I was missing

Quarks.install("https://github.com/musikinformatik/SuperDirt");

from http://doc.sccode.org/Guides/UsingQuarks.html

After automating my builds, starting from totally fresh source checkouts each time (supercollider: git checkout $version, sc3-plugins: git checkout master always) I was able to build and run SuperDirt successfully.

mossheim commented 4 years ago

I did git submodule update but didn't notice them changing. E.g., yaml-cpp is always on release-0.5.3-35-g728e26e. But some others are in fact moving.

not all of the submodules change between commits or even version tags, that's typical. if we don't need fixes or features from upstream we keep them pinned.

mossheim commented 4 years ago

https://github.com/supercollider/supercollider/pull/4875 fixes this. thanks for the report @jwaldmann :)

jwaldmann commented 4 years ago

@brianlheim As I said, I got it working, but I really didn't know why. Now I have a theory about what's really been confusing me:

sclang will call scsynth - and for that it picks the version that it finds on $PATH?

I have several installs at /opt/supercollider/$VERSION, and one of their bin is in $PATH. I found the behaviour is different between

/opt/supercollider/3.10.0/bin/sclang superdirt_startup.scd # breaks (calls non-matching scsynth)
PATH=/opt/supercollider/3.10.0/bin sclang superdirt_startup.scd # works

I thought that sclang would call $CMAKE_INSTALL_PREFIX/bin/scsynth, the same way that gcc calls $PREFIX/libexec/gcc/x86_64-pc-linux-gnu/9.3.0/cc1 and not cc1 on $PATH. That way, a user of gcc does not even need to be aware of it calling other executables.

This is the build script that I used: https://gitlab.imn.htwk-leipzig.de/waldmann/computer-mu/-/blob/master/etc/sc/build.sh