Maxon Developers Maxon Developers
    • Documentation
      • Cinema 4D Python API
      • Cinema 4D C++ API
      • Cineware 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
    • Unread
    • Recent
    • Tags
    • Users
    • Login

    PYTHON - Getting CTsound volume strength on current frame

    Cinema 4D SDK
    python
    3
    5
    748
    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.
    • S
      SolarPH
      last edited by Manuel

      Hello! I was trying to create my own variation of the Sound Effector on R19 since the one on my version doesn't fit the purpose of LipSyncing since it doesn't follow Sound Track time offset from the timeline,

      I tried several python functions including CTrack.GetValue() but it always return 0

      Any way possible that I can get the sound strength value from a sound track (CTsound type) using python? I can make the thing using Sound Node, but once played, it cannot be stopped or controlled by timeline itself.

      1 Reply Last reply Reply Quote 0
      • ManuelM
        Manuel
        last edited by Manuel

        hi,

        I've edit your post to add the python tag and set the thread to "ask a question". You can read our guidelines to have more informations about those features.

        Sample the value of a sound track isn't possible directly. But you can use the SoundEffectorData to do so.
        That's what is used in the sound effector.
        You can create probe and define the frequencies and the amplitude of the samples.

        We also have the C++ manual where you will find some informations.

        A basic example :

        import c4d
        from c4d import gui
        # Welcome to the world of Python
        
        
        # Main function
        def main():
            tracks = op.GetCTracks()
            for track in tracks:
                if track.IsInstanceOf(c4d.CTsound):
                    sed = c4d.SoundEffectorData();
                    sed.SetActiveSoundTrack(track, doc)
                    # we create basic probes at different frequencies
                    probeIndex = sed.CreateProbe(5000,10000, 1, 0, False)
                    probeIndex2 = sed.CreateProbe(10001,25001, 1, 0, False)
                    # initsample before doing any sample
                    sed.InitSampling(doc)
                    samples = sed.Sample(probeIndex,1)
                    print (samples)
                    samples = sed.Sample(probeIndex2,2)
                    print (samples)
                    # don't forget to call freesampling'
                    sed.FreeSampling()
                    
        
        # Execute main()
        if __name__=='__main__':
            main()
                    
        

        Cheers,
        Manuel

        MAXON SDK Specialist

        MAXON Registered Developer

        1 Reply Last reply Reply Quote 0
        • S
          SolarPH
          last edited by

          That does its thing, but like the Sound Effector included in MoGraph Effectors, even if I set the offset of the track like ahead like 30 frames, it still reads volume/sample data from the position of the track with high volume on its original position if the track started in 0F

          For like...

          If my voice starts at 40F and I pick an offset of 30F, it should start reading sample data from 70F and not 40F

          By this code, it behaves the same as the Sound Effector, but the data is readable and can be applied to any object.

          1 Reply Last reply Reply Quote 0
          • ManuelM
            Manuel
            last edited by

            hi,

            sorry i just saw that you were using R19. this issue have been fixed in later release.
            a working workaround is to change the time of the document sample it and come back to the current time.
            With ExecutePasses you will be (kind of) sure that your document will be updated properlly.

            import c4d
            from c4d import gui
            # Welcome to the world of Python
            
            
            # Main function
            def main():
                tracks = op.GetCTracks()
                for track in tracks:
                    if track.IsInstanceOf(c4d.CTsound):
                        currentTime = doc.GetTime()
                        offset = track[c4d.CID_SOUND_START]
                        newTime = currentTime - offset
                        doc.SetTime(newTime)
                        doc.ExecutePasses(None, True, True, True, 0)
                        sed = c4d.SoundEffectorData();
                        sed.SetActiveSoundTrack(track, doc)
                        # we create basic probes at different frequencies
                        probeIndex = sed.CreateProbe(5000,10000, 1, 0, False)
                        probeIndex2 = sed.CreateProbe(10001,25001, 1, 0, False)
                        # initsample before doing any sample
                        sed.InitSampling(doc)
                        samples = sed.Sample(probeIndex,1)
                        print (samples)
                        samples = sed.Sample(probeIndex2,2)
                        print (samples)
                        # don't forget to call freesampling'
                        sed.FreeSampling()
                         
                        doc.SetTime(currentTime)
                        doc.ExecutePasses(None, True, True, True, 0)
                        
            
            # Execute main()
            if __name__=='__main__':
                main()
                        
            

            Cheers,
            Manuel

            MAXON SDK Specialist

            MAXON Registered Developer

            1 Reply Last reply Reply Quote 0
            • ferdinandF
              ferdinand
              last edited by

              Hi @SolarPH,

              without further questions or feedback, we will consider this thread as solved by Monday and flag it accordingly.

              Cheers,
              Ferdinand

              MAXON SDK Specialist
              developers.maxon.net

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