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()
 |