diff --git a/pype/plugins/ftrack/publish/integrate_ftrack_instances.py b/pype/plugins/ftrack/publish/integrate_ftrack_instances.py index dfee6bdaa4..f3a348468a 100644 --- a/pype/plugins/ftrack/publish/integrate_ftrack_instances.py +++ b/pype/plugins/ftrack/publish/integrate_ftrack_instances.py @@ -25,7 +25,8 @@ class IntegrateFtrackInstance(pyblish.api.InstancePlugin): 'nukescript': 'comp', 'write': 'render', 'review': 'mov', - 'plate': 'img' + 'plate': 'img', + 'audio': 'audio' } def process(self, instance): diff --git a/pype/plugins/global/publish/integrate_new.py b/pype/plugins/global/publish/integrate_new.py index 43b3560dce..f4d653e97d 100644 --- a/pype/plugins/global/publish/integrate_new.py +++ b/pype/plugins/global/publish/integrate_new.py @@ -62,7 +62,8 @@ class IntegrateAssetNew(pyblish.api.InstancePlugin): "rendersetup", "rig", "plate", - "look" + "look", + "audio" ] exclude_families = ["clip"] diff --git a/pype/plugins/maya/load/load_audio.py b/pype/plugins/maya/load/load_audio.py new file mode 100644 index 0000000000..61fe654b30 --- /dev/null +++ b/pype/plugins/maya/load/load_audio.py @@ -0,0 +1,22 @@ +from maya import cmds, mel + +from avalon import api + + +class AudioLoader(api.Loader): + """Specific loader of audio.""" + + families = ["audio"] + label = "Import audio." + representations = ["wav"] + icon = "volume-up" + color = "orange" + + def load(self, context, name, namespace, data): + start_frame = cmds.playbackOptions(query=True, min=True) + sound_node = cmds.sound( + file=context["representation"]["data"]["path"], offset=start_frame + ) + mel.eval("setSoundDisplay {} 1".format(sound_node)) + + return [sound_node] diff --git a/pype/plugins/nukestudio/publish/collect_audio.py b/pype/plugins/nukestudio/publish/collect_audio.py new file mode 100644 index 0000000000..1b677d6410 --- /dev/null +++ b/pype/plugins/nukestudio/publish/collect_audio.py @@ -0,0 +1,53 @@ +from pyblish import api + + +class CollectAudio(api.InstancePlugin): + """Collect audio from tags. + + Tag is expected to have metadata: + { + "family": "audio", + "subset": "main" + } + """ + + # Run just before CollectSubsets + order = api.CollectorOrder + 0.1025 + label = "Collect Audio" + hosts = ["nukestudio"] + families = ["clip"] + + def process(self, instance): + # Exclude non-tagged instances. + tagged = False + for tag in instance.data["tags"]: + family = dict(tag["metadata"]).get("tag.family", "") + if family.lower() == "audio": + tagged = True + + if not tagged: + self.log.debug( + "Skipping \"{}\" because its not tagged with " + "\"audio\"".format(instance) + ) + return + + # Collect data. + data = {} + for key, value in instance.data.iteritems(): + data[key] = value + + data["family"] = "audio" + data["families"] = ["ftrack"] + + subset = "" + for tag in instance.data["tags"]: + tag_data = dict(tag["metadata"]) + if "tag.subset" in tag_data: + subset = tag_data["tag.subset"] + data["subset"] = subset + + data["source"] = data["sourcePath"] + + self.log.debug("Creating instance with data: {}".format(data)) + instance.context.create_instance(**data) diff --git a/pype/plugins/nukestudio/publish/extract_audio.py b/pype/plugins/nukestudio/publish/extract_audio.py index 17ef882690..c16f123353 100644 --- a/pype/plugins/nukestudio/publish/extract_audio.py +++ b/pype/plugins/nukestudio/publish/extract_audio.py @@ -1,6 +1,7 @@ from pyblish import api import pype + class ExtractAudioFile(pype.api.Extractor): """Extracts audio subset file""" @@ -53,10 +54,10 @@ class ExtractAudioFile(pype.api.Extractor): instance.data["representations"] = list() representation = { - 'files': [audio_file], + 'files': os.path.basename(audio_file), 'stagingDir': staging_dir, 'name': "wav", - 'ext': ".wav" + 'ext': "wav" } instance.data["representations"].append(representation)