Creating a sound Track
-
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
-
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
-
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();
-
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.
-
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
-
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 -
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/1J002V0y3o0q1c3v2B20I also explain it here: