forked from LeenkxTeam/LNXSDK
		
	
		
			
	
	
		
			117 lines
		
	
	
		
			4.1 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
		
		
			
		
	
	
			117 lines
		
	
	
		
			4.1 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| 
								 | 
							
								import bpy
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								from lnx.logicnode.lnx_nodes import *
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								class PlaySoundNode(LnxLogicTreeNode):
							 | 
						||
| 
								 | 
							
								    """Plays the given sound.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    @input Play: Plays the sound, or if paused, resumes the playback.
							 | 
						||
| 
								 | 
							
								        The exact behaviour depends on the Retrigger option (see below).
							 | 
						||
| 
								 | 
							
								    @input Pause: Pauses the playing sound. If no sound is playing,
							 | 
						||
| 
								 | 
							
								        nothing happens.
							 | 
						||
| 
								 | 
							
								    @input Stop: Stops the playing sound. If the playback is paused,
							 | 
						||
| 
								 | 
							
								        this will reset the playback position to the start of the sound.
							 | 
						||
| 
								 | 
							
								    @input Update Volume: Updates the volume of the current playback.
							 | 
						||
| 
								 | 
							
								    @input Volume: Volume of the playback. Typically ranges from 0 to 1.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    @output Out: activated once when Play is activated.
							 | 
						||
| 
								 | 
							
								    @output Running: activated while the playback is active.
							 | 
						||
| 
								 | 
							
								    @output Done: activated when the playback has finished or was
							 | 
						||
| 
								 | 
							
								        stopped manually.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    @option Sound/Sound Name: specify a sound by a resource or a string name
							 | 
						||
| 
								 | 
							
								    @option Sound: The sound that will be played.
							 | 
						||
| 
								 | 
							
								    @option Stream: Stream the sound from disk.
							 | 
						||
| 
								 | 
							
								    @option Loop: Whether to loop the playback.
							 | 
						||
| 
								 | 
							
								    @option Retrigger: If true, the playback position will be reset to
							 | 
						||
| 
								 | 
							
								        the beginning on each activation of Play. If false, the playback
							 | 
						||
| 
								 | 
							
								        will continue at the current position.
							 | 
						||
| 
								 | 
							
								    @option Sample Rate: Manually override the sample rate of the sound
							 | 
						||
| 
								 | 
							
								        (this controls the pitch and the playback speed).
							 | 
						||
| 
								 | 
							
								    """
							 | 
						||
| 
								 | 
							
								    bl_idname = 'LNPlaySoundRawNode'
							 | 
						||
| 
								 | 
							
								    bl_label = 'Play Sound'
							 | 
						||
| 
								 | 
							
								    bl_width_default = 200
							 | 
						||
| 
								 | 
							
								    lnx_version = 3
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    def remove_extra_inputs(self, context):
							 | 
						||
| 
								 | 
							
								        while len(self.inputs) > 5:
							 | 
						||
| 
								 | 
							
								            self.inputs.remove(self.inputs[-1])
							 | 
						||
| 
								 | 
							
								        if self.property6 == 'Sound Name':
							 | 
						||
| 
								 | 
							
								            self.add_input('LnxStringSocket', 'Sound Name')
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    property0: HaxePointerProperty('property0', name='', type=bpy.types.Sound)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    property1: HaxeBoolProperty(
							 | 
						||
| 
								 | 
							
								        'property1',
							 | 
						||
| 
								 | 
							
								        name='Loop',
							 | 
						||
| 
								 | 
							
								        description='Play the sound in a loop',
							 | 
						||
| 
								 | 
							
								        default=False)
							 | 
						||
| 
								 | 
							
								    property2: HaxeBoolProperty(
							 | 
						||
| 
								 | 
							
								        'property2',
							 | 
						||
| 
								 | 
							
								        name='Retrigger',
							 | 
						||
| 
								 | 
							
								        description='Play the sound from the beginning every time',
							 | 
						||
| 
								 | 
							
								        default=False)
							 | 
						||
| 
								 | 
							
								    property3: HaxeBoolProperty(
							 | 
						||
| 
								 | 
							
								        'property3',
							 | 
						||
| 
								 | 
							
								        name='Use Custom Sample Rate',
							 | 
						||
| 
								 | 
							
								        description='If enabled, override the default sample rate',
							 | 
						||
| 
								 | 
							
								        default=False)
							 | 
						||
| 
								 | 
							
								    property4: HaxeIntProperty(
							 | 
						||
| 
								 | 
							
								        'property4',
							 | 
						||
| 
								 | 
							
								        name='Sample Rate',
							 | 
						||
| 
								 | 
							
								        description='Set the sample rate used to play this sound',
							 | 
						||
| 
								 | 
							
								        default=44100,
							 | 
						||
| 
								 | 
							
								        min=0)
							 | 
						||
| 
								 | 
							
								    property5: HaxeBoolProperty(
							 | 
						||
| 
								 | 
							
								        'property5',
							 | 
						||
| 
								 | 
							
								        name='Stream',
							 | 
						||
| 
								 | 
							
								        description='Stream the sound from disk',
							 | 
						||
| 
								 | 
							
								        default=False
							 | 
						||
| 
								 | 
							
								    )
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    property6: HaxeEnumProperty(
							 | 
						||
| 
								 | 
							
								    'property6',
							 | 
						||
| 
								 | 
							
								    items = [('Sound', 'Sound', 'Sound'),
							 | 
						||
| 
								 | 
							
								             ('Sound Name', 'Sound Name', 'Sound Name')],
							 | 
						||
| 
								 | 
							
								    name='', default='Sound', update=remove_extra_inputs)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    def lnx_init(self, context):
							 | 
						||
| 
								 | 
							
								        self.add_input('LnxNodeSocketAction', 'Play')
							 | 
						||
| 
								 | 
							
								        self.add_input('LnxNodeSocketAction', 'Pause')
							 | 
						||
| 
								 | 
							
								        self.add_input('LnxNodeSocketAction', 'Stop')
							 | 
						||
| 
								 | 
							
								        self.add_input('LnxNodeSocketAction', 'Update Volume')
							 | 
						||
| 
								 | 
							
								        self.add_input('LnxFloatSocket', 'Volume', default_value=1.0)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        self.add_output('LnxNodeSocketAction', 'Out')
							 | 
						||
| 
								 | 
							
								        self.add_output('LnxNodeSocketAction', 'Is Running')
							 | 
						||
| 
								 | 
							
								        self.add_output('LnxNodeSocketAction', 'Done')
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    def draw_buttons(self, context, layout):
							 | 
						||
| 
								 | 
							
								        layout.prop(self, 'property6')
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        col = layout.column(align=True)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        if self.property6 == 'Sound':
							 | 
						||
| 
								 | 
							
								            col.prop_search(self, 'property0', bpy.data, 'sounds', icon='NONE', text='')
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        col.prop(self, 'property5')
							 | 
						||
| 
								 | 
							
								        col.prop(self, 'property1')
							 | 
						||
| 
								 | 
							
								        col.prop(self, 'property2')
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        layout.label(text="Overrides:")
							 | 
						||
| 
								 | 
							
								        # Sample rate
							 | 
						||
| 
								 | 
							
								        split = layout.split(factor=0.15, align=False)
							 | 
						||
| 
								 | 
							
								        split.prop(self, 'property3', text="")
							 | 
						||
| 
								 | 
							
								        row = split.row()
							 | 
						||
| 
								 | 
							
								        if not self.property3:
							 | 
						||
| 
								 | 
							
								            row.enabled = False
							 | 
						||
| 
								 | 
							
								        row.prop(self, 'property4')
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    def get_replacement_node(self, node_tree: bpy.types.NodeTree):
							 | 
						||
| 
								 | 
							
								        if 0 <= self.lnx_version <= 2:
							 | 
						||
| 
								 | 
							
								            return NodeReplacement.Identity(self)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        raise LookupError()
							 |