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