synfig-studio compile failure

I’m running gentoo 64bit, and have gotten to the point of emerging synfig-studio, however it fails to compile properly with fmod. After trying several code modifications, compiling it manually from the unchanged source download fails with the same error.

audiocontainer.cpp: In function 'bool build_profile(FSOUND_SAMPLE*, double&, std::vector<char, std::allocator<char> >&)': audiocontainer.cpp:104: error: 'FSOUND_Sample_GetMode' was not declared in this scope audiocontainer.cpp:110: error: 'FSOUND_Sample_GetDefaults' was not declared in this scope audiocontainer.cpp:116: error: 'FSOUND_16BITS' was not declared in this scope audiocontainer.cpp:117: error: 'FSOUND_STEREO' was not declared in this scope audiocontainer.cpp:121: error: 'FSOUND_Sample_GetLength' was not declared in this scope audiocontainer.cpp:126: error: 'FSOUND_GetError' was not declared in this scope audiocontainer.cpp:142: warning: dereferencing type-punned pointer will break strict-aliasing rules audiocontainer.cpp:142: warning: dereferencing type-punned pointer will break strict-aliasing rules audiocontainer.cpp:142: error: 'FSOUND_Sample_Lock' was not declared in this scope audiocontainer.cpp:144: error: 'FSOUND_GetError' was not declared in this scope audiocontainer.cpp:226: error: 'FSOUND_Sample_Unlock' was not declared in this scope audiocontainer.cpp: In member function 'void scrubinfo::scrub_dsp_process()': audiocontainer.cpp:340: error: 'FSOUND_IsPlaying' was not declared in this scope audiocontainer.cpp:374: error: 'FSOUND_SetPaused' was not declared in this scope audiocontainer.cpp:384: error: 'FSOUND_GetCurrentPosition' was not declared in this scope audiocontainer.cpp:387: error: 'FSOUND_GetPaused' was not declared in this scope audiocontainer.cpp:389: error: 'FSOUND_GetFrequency' was not declared in this scope audiocontainer.cpp:427: error: 'FSOUND_DSP_GetBufferLength' was not declared in this scope audiocontainer.cpp:430: error: 'FSOUND_GetOutputRate' was not declared in this scope audiocontainer.cpp:440: error: 'FSOUND_SetPaused' was not declared in this scope audiocontainer.cpp:444: error: 'FSOUND_SetPaused' was not declared in this scope audiocontainer.cpp:445: error: 'FSOUND_SetFrequency' was not declared in this scope audiocontainer.cpp: At global scope: audiocontainer.cpp:485: error: expected initializer before '*' token audiocontainer.cpp:487: warning: unused parameter 'originalbuffer' audiocontainer.cpp:487: warning: unused parameter 'length' audiocontainer.cpp: In member function 'void FMODInitializer::addref()': audiocontainer.cpp:552: error: 'FSOUND_OUTPUT_OSS' was not declared in this scope audiocontainer.cpp:552: error: 'FSOUND_SetOutput' was not declared in this scope audiocontainer.cpp:571: error: 'FSOUND_Init' was not declared in this scope audiocontainer.cpp:579: error: 'scrubdspunit' was not declared in this scope audiocontainer.cpp:579: error: 'FSOUND_DSP_Create' was not declared in this scope audiocontainer.cpp:582: error: 'FSOUND_DSP_GetBufferLength' was not declared in this scope audiocontainer.cpp:582: error: 'FSOUND_GetOutputRate' was not declared in this scope audiocontainer.cpp: In member function 'void FMODInitializer::flush()': audiocontainer.cpp:622: error: 'scrubdspunit' was not declared in this scope audiocontainer.cpp:622: error: 'FSOUND_DSP_Free' was not declared in this scope audiocontainer.cpp:623: error: 'FSOUND_Close' was not declared in this scope audiocontainer.cpp: In member function 'bool studio::AudioContainer::AudioImp::init_play()': audiocontainer.cpp:712: error: 'FSOUND_IsPlaying' was not declared in this scope audiocontainer.cpp:717: error: 'FSOUND_FREE' was not declared in this scope audiocontainer.cpp:717: error: 'FSOUND_PlaySoundEx' was not declared in this scope audiocontainer.cpp:718: error: 'FSOUND_GetError' was not declared in this scope audiocontainer.cpp:718: error: 'FMOD_ERR_NONE' was not declared in this scope audiocontainer.cpp:726: error: 'FSOUND_SetPaused' was not declared in this scope audiocontainer.cpp:727: error: 'FSOUND_SetFrequency' was not declared in this scope audiocontainer.cpp: In constructor 'studio::AudioContainer::AudioImp::AudioImp()': audiocontainer.cpp:750: error: 'FSOUND_FREE' was not declared in this scope audiocontainer.cpp: In member function 'bool studio::AudioContainer::AudioImp::start_playing_now()': audiocontainer.cpp:767: error: 'FSOUND_SetPaused' was not declared in this scope audiocontainer.cpp: In member function 'bool studio::AudioContainer::AudioImp::isRunning()': audiocontainer.cpp:777: error: 'FSOUND_IsPlaying' was not declared in this scope audiocontainer.cpp: In member function 'bool studio::AudioContainer::AudioImp::isPaused()': audiocontainer.cpp:786: error: 'FSOUND_GetPaused' was not declared in this scope audiocontainer.cpp: In member function 'bool studio::AudioContainer::AudioImp::get_current_time(double&)': audiocontainer.cpp:812: error: 'FSOUND_GetCurrentPosition' was not declared in this scope audiocontainer.cpp: In member function 'bool studio::AudioContainer::AudioImp::load(const std::string&, const std::string&)': audiocontainer.cpp:1047: error: 'FSOUND_FREE' was not declared in this scope audiocontainer.cpp:1048: error: 'FSOUND_LOOP_OFF' was not declared in this scope audiocontainer.cpp:1048: error: 'FSOUND_MPEGACCURATE' was not declared in this scope audiocontainer.cpp:1048: error: 'FSOUND_Sample_Load' was not declared in this scope audiocontainer.cpp:1066: error: 'FSOUND_Sample_GetLength' was not declared in this scope audiocontainer.cpp:1069: error: 'FSOUND_Sample_GetDefaults' was not declared in this scope audiocontainer.cpp:1088: error: 'FSOUND_Sample_Free' was not declared in this scope audiocontainer.cpp: In member function 'void studio::AudioContainer::AudioImp::play(double)': audiocontainer.cpp:1125: error: 'FSOUND_SetFrequency' was not declared in this scope audiocontainer.cpp:1126: error: 'FSOUND_SetCurrentPosition' was not declared in this scope audiocontainer.cpp:1132: error: 'FSOUND_Sample_GetLength' was not declared in this scope audiocontainer.cpp:1139: error: 'FSOUND_SetFrequency' was not declared in this scope audiocontainer.cpp:1140: error: 'FSOUND_SetCurrentPosition' was not declared in this scope audiocontainer.cpp:1141: error: 'FSOUND_SetPaused' was not declared in this scope audiocontainer.cpp: In member function 'void studio::AudioContainer::AudioImp::stop()': audiocontainer.cpp:1155: error: 'FSOUND_SetPaused' was not declared in this scope audiocontainer.cpp: In member function 'void studio::AudioContainer::AudioImp::clear()': audiocontainer.cpp:1172: error: 'FSOUND_IsPlaying' was not declared in this scope audiocontainer.cpp:1174: error: 'FSOUND_StopSound' was not declared in this scope audiocontainer.cpp:1176: error: 'FSOUND_FREE' was not declared in this scope audiocontainer.cpp:1177: error: 'FSOUND_Sample_Free' was not declared in this scope audiocontainer.cpp: In member function 'void studio::AudioContainer::AudioImp::start_scrubbing(double)': audiocontainer.cpp:1228: error: 'FSOUND_SetCurrentPosition' was not declared in this scope audiocontainer.cpp:1242: error: 'scrubdspunit' was not declared in this scope audiocontainer.cpp:1242: error: 'FSOUND_DSP_SetActive' was not declared in this scope audiocontainer.cpp: In member function 'void studio::AudioContainer::AudioImp::stop_scrubbing()': audiocontainer.cpp:1259: error: 'scrubdspunit' was not declared in this scope audiocontainer.cpp:1259: error: 'FSOUND_DSP_SetActive' was not declared in this scope audiocontainer.cpp:1260: error: 'FSOUND_IsPlaying' was not declared in this scope audiocontainer.cpp:1260: error: 'FSOUND_SetPaused' was not declared in this scope audiocontainer.cpp: In member function 'void studio::AudioContainer::AudioImp::scrub(double)': audiocontainer.cpp:1296: error: 'FSOUND_IsPlaying' was not declared in this scope audiocontainer.cpp:1298: error: 'FSOUND_SetPaused' was not declared in this scope audiocontainer.cpp:1344: error: 'FSOUND_SetCurrentPosition' was not declared in this scope audiocontainer.cpp:1356: error: 'FSOUND_SetPaused' was not declared in this scope audiocontainer.cpp:1366: error: 'FSOUND_IsPlaying' was not declared in this scope audiocontainer.cpp:1368: error: 'FSOUND_SetPaused' was not declared in this scope audiocontainer.cpp:1411: error: 'FSOUND_SetCurrentPosition' was not declared in this scope audiocontainer.cpp:1423: error: 'FSOUND_SetPaused' was not declared in this scope make[3]: *** [synfigstudio-audiocontainer.o] Error 1 make[3]: Leaving directory `/root/software/test/synfig-studio-0.61.09/src/gtkmm' make[2]: *** [all-recursive] Error 1 make[2]: Leaving directory `/root/software/test/synfig-studio-0.61.09/src' make[1]: *** [all-recursive] Error 1 make[1]: Leaving directory `/root/software/test/synfig-studio-0.61.09' make: *** [all] Error 2

In looking at audiocontainer.cpp, it looks like WITH_FMOD isn’t being properly referenced, so it doesn’t use it. As you can see, there is also a syntax issue with the 2nd ‘bool build_profile’ line, which prompts the first error line above, but the 2nd ‘#ifdef WITH_FMOD’ failure prompts the rest of the errors.

[code]
#ifdef WITH_FMOD
bool build_profile(FSOUND_SAMPLE *sample, double &samplerate, std::vector &samples)
#else
bool build_profile(FSOUND_SAMPLE */sample/, double &/samplerate/, std::vector &/samples/)
#endif
{
#ifdef WITH_FMOD

     float sps = samplerate; 

     //trivial rejection... 
     if(!sample || sps < 1) 
     { 
             synfig::warning("build_profile: Sample rate was too low or sample was invalid"); 
             return false; 
     } 

     //lock for all samples and process them into a subset 
     unsigned int mode = FSOUND_Sample_GetMode(sample); 
     
     //make sure that it's 8 bit... I hope this works... 

    //sample rate of the actual song... 
     int allsamplerate = 0; 
     FSOUND_Sample_GetDefaults(sample,&allsamplerate,0,0,0); 

     //get the size of the sample defaults from the mode 
     int channels = 1; 
     int channelsize = 1; //number of bytes 

     if(mode & FSOUND_16BITS) channelsize = 2; //this shouldn't happen 
     if(mode & FSOUND_STEREO) channels = 2; 

     //Get the sample information 
     int samplesize = channels*channelsize; //the only two things that increase samplesize 
     int numsamples = FSOUND_Sample_GetLength(sample); //number of samples in the sound 
     int sizeall = samplesize*numsamples; //should be the size of the entire song... 

     if(sizeall <= 0) 
     { 
             synfig::warning("ProfileAudio: Sample buffer cannot be size smaller than 1 (%X)",FSOUND_GetError()); 
             return false; 
     } 

     //be sure that the new sample rate is less than or equal to the original 
     if(sps > allsamplerate) sps = allsamplerate; 

     float stride = allsamplerate/(float)sps; 

     //down sampling to 8 bit min/max values 
     synfig::warning("About to downsample from %d Hz to %.1f Hz, sample stride: %f", allsamplerate, sps, stride); 

     char *sampledata=0,*useless = 0; 
     unsigned int len1,len2; [/code]

Like I said, ETL, synfig, and all the other dependencies installed fine. I originally thought fmod was the issue, and updated it to the latest stable 64bit linux version, but that changed nothing with regard to synfig-studio compiling properly.

I need to hunt down why and where WITH_FMOD is not being referenced/defined properly. Willing to go the distance on solving this … Help is appreciated.

FMOD support was never completed in Synfig (or in some cases never started).

We don’t currently have sound support. :frowning:

If you can disable FMOD compiling, or uninstall FMOD, that would be best. Alternately, if you do get it working that would be awesome, but be advised it may take some source code hacking, and the FMOD API may have evolved since Synfig was originally written.

Chris

In addition, the FMOD license is incompatible with the GPL (and non-free) so it is impossible to build synfigstudio against fmod and distribute the result. At some point hopefully someone will rewrite it to use a free sound API, until then I suggest doing sound bits outside synfig.

pabs, pixelgeek

Thanks for the replies. Dropped fmod and it compiled, installed fine.

Please update the gentoo page to reflect the information you posted. Would help would be synfig noobs like me about such particulars…

Thanks again.

Removed, thanks for the suggestion. BTW, our site is a wiki, you can register and edit pages too.