Maxon Developers Maxon Developers
    • Documentation
      • Cinema 4D Python API
      • Cinema 4D C++ API
      • Cineware API
      • ZBrush Python API
      • ZBrush GoZ API
      • Code Examples on Github
    • Forum
    • Downloads
    • Support
      • Support Procedures
      • Registered Developer Program
      • Plugin IDs
      • Contact Us
    • Categories
      • Overview
      • News & Information
      • Cinema 4D SDK Support
      • Cineware SDK Support
      • ZBrush 4D SDK Support
      • Bugs
      • General Talk
    • Recent
    • Tags
    • Users
    • Login

    Creating a sound Track

    Scheduled Pinned Locked Moved SDK Help
    7 Posts 0 Posters 591 Views
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • H Offline
      Helper
      last edited by

      THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

      On 13/08/2011 at 09:40, xxxxxxxx wrote:

      User Information:
      Cinema 4D Version:   12 
      Platform:   Windows  ;   
      Language(s) :     C++  ;

      ---------
      Hi,
      I can't get a sound file to load into a sound track properly using Python. So I'm giving it a try with C++. But I'm running having problems creating a sound track.

      C4D is crashing on me. And I don't know what I'm doing wrong:

      Bool SimplePlugin::Execute(BaseDocument *doc)  
      {  
        BaseObject *sphere = BaseObject::Alloc(Osphere);  
        doc->InsertObject(sphere, NULL, NULL); // Add it to the OM  
        
        CTrack *soundtrack = CTrack::Alloc(sphere,DescLevel(CTsound,DTYPE_LONG,0));  //SDK says this: CTrack::Alloc(op,DescLevel(ID,ID,0))    
        sphere->InsertTrackSorted(soundtrack); //This crashes C4D!!!  
        
        //Then I need to load a sound file from my desktop into the sound field  
         
        EventAdd();  
          
        return true;  
      }
      

      I think I might be using the wrong code in the second Alloc ID parameter.
      Can anyone offer any help on creating a sound track and loading a sound file into it?

      -ScottA

      1 Reply Last reply Reply Quote 0
      • H Offline
        Helper
        last edited by

        THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

        On 13/08/2011 at 12:42, xxxxxxxx wrote:

        I figured out where my the crashing mistake was.
        Now that I can successfully create a sound track. How do I load a file into it?
        If I use the base container method. It just loads the file's text information into the sound field. But it doesn't actually load the file into the track:

        Bool SimplePlugin::Execute(BaseDocument *doc)  
        {  
          BaseObject *sphere = BaseObject::Alloc(Osphere);  
          doc->InsertObject(sphere, NULL, NULL); // Add it to the OM   
          CTrack *soundtrack = CTrack::Alloc(sphere,DescLevel(CTsound,CTsound,0));  
          sphere->InsertTrackSorted(soundtrack);   
          
          Filename file = GeGetC4DPath(C4D_PATH_DESKTOP) + "moviemix.wav";  
          BaseContainer bc = soundtrack->GetData();  
          bc.SetFilename(CID_SOUND_NAME, file);  
          soundtrack->SetData(bc);  
           
          EventAdd();      
          return true;  
        }
        

        This is the same problem I was having with Python.

        -ScottA

        1 Reply Last reply Reply Quote 0
        • H Offline
          Helper
          last edited by

          THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

          On 13/08/2011 at 15:38, xxxxxxxx wrote:

          Here's how I do it:

              // Add Sound track to Null object  
            CTrack*        track =        CTrack::Alloc(nullObj, DescID(DescLevel(ID_ANIM_SOUND,ID_ANIM_SOUND,0L)));  
            if (!track)                return ErrorException::OOMThrow(EE_NODIALOG, logging, GeLoadString(IPPERR_MEMORY_TEXT), "IPPLoader.AddSound.track");  
            nullObj->InsertTrackSorted(track);  
            if (storeUndoLoad)        baseDocument->AddUndo(UNDOTYPE_NEW, track);  
            // Set Start Time and Sound  
            // - Unofficial means to load audio file into SoundTrack  
            SoundTrack*    sdata =        (SoundTrack* )track->GetNodeData();  
            if (!sdata)                return ErrorException::Throw(EE_NODIALOG, logging, GeLoadString(IPPERR_MEMORY_TEXT), "IPPLoader.AddSound.sdata");  
            if (!sdata->sound)        return ErrorException::Throw(EE_NODIALOG, logging, GeLoadString(IPPERR_MEMORY_TEXT), "IPPLoader.AddSound.sdata->sound");  
            if (!sdata->sound->Load(sname))    return ErrorException::Throw(EE_NODIALOG, logging, GeLoadString(IPPERR_MEMORY_TEXT), "IPPLoader.AddSound.sdata->sound->Load(fn)");  
            // -  
            track->SetParameter(DescID(DescLevel(CID_SOUND_START, DTYPE_TIME,0L)), baseDocument->GetTime(), DESCFLAGS_SET_0);  
            //track->SetParameter(DescID(DescLevel(CID_SOUND_NAME, DTYPE_STRING,0L)), sname.GetFileString(), DESCFLAGS_SET_0);  
            track->SetParameter(DescLevel(CID_SOUND_NAME),sname.GetFileString(),DESCFLAGS_SET_0);  
            track->SetName(sname.GetFileString());  
            EventAdd();  
          
          1 Reply Last reply Reply Quote 0
          • H Offline
            Helper
            last edited by

            THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

            On 13/08/2011 at 15:39, xxxxxxxx wrote:

            Note that ID_ANIM_SOUND is typdef'd from CTsound for backward compatibility; just use CTsound.

            1 Reply Last reply Reply Quote 0
            • H Offline
              Helper
              last edited by

              THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

              On 13/08/2011 at 16:11, xxxxxxxx wrote:

              Thanks Robert.

              I'm getting all kinds of undefined errors with that code from things like: SoundTrack, ErrorException, logging,sname, EE_NODIALOG, etc..)

              Can you tell me what includes you're using?

              -ScottA

              1 Reply Last reply Reply Quote 0
              • H Offline
                Helper
                last edited by

                THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

                On 13/08/2011 at 17:12, xxxxxxxx wrote:

                Never mind.
                I eventually managed to get it working.

                Using your example. I found out that SetParameter works:

                Bool SimplePlugin::Execute(BaseDocument *doc)  
                {      
                  BaseObject *sphere = BaseObject::Alloc(Osphere);  
                  doc->InsertObject(sphere, NULL, NULL);   
                  CTrack *track = CTrack::Alloc(sphere, DescID(DescLevel(CTsound,CTsound,0L)));   
                  sphere->InsertTrackSorted(track);     
                  
                  track->SetParameter(DescID(DescLevel(CID_SOUND_START, DTYPE_TIME,0L)), doc->GetTime(), DESCFLAGS_SET_0);      
                  Filename file = GeGetC4DPath(C4D_PATH_DESKTOP) + "moviemix.wav";  
                  track->SetParameter(DescLevel(CID_SOUND_NAME),file,DESCFLAGS_SET_0);  
                  
                  EventAdd();  
                  return true;  
                }
                

                Now I just need to see if there's a way to make it work in Python.

                Thanks Robert.🍺
                -ScottA

                1 Reply Last reply Reply Quote 0
                • H Offline
                  Helper
                  last edited by

                  THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

                  On 20/10/2011 at 15:09, xxxxxxxx wrote:

                  Here's my method for Python:

                  Download the script here:
                  http://cl.ly/1J002V0y3o0q1c3v2B20

                  I also explain it here:

                  1 Reply Last reply Reply Quote 0
                  • First post
                    Last post