private Texture2D AudioWaveform(AudioClip aud, int width, int height, Color color) { int step = Mathf.CeilToInt((aud.samples * aud.channels) / width); float[] samples = new float[aud.samples * aud.channels]; //workaround to prevent the error in the function getData //when Audio Importer loadType is "compressed in memory" string path = AssetDatabase.GetAssetPath(aud); AudioImporter audioImporter = AssetImporter.GetAtPath(path) as AudioImporter; AudioImporterLoadType audioLoadTypeBackup = audioImporter.loadType; audioImporter.loadType = AudioImporterLoadType.StreamFromDisc; AssetDatabase.ImportAsset(path); //getData after the loadType changed aud.GetData(samples, 0); //restore the loadType (end of workaround) audioImporter.loadType = audioLoadTypeBackup; AssetDatabase.ImportAsset(path); Texture2D img = new Texture2D(width, height, TextureFormat.RGBA32, false); Color[] xy = new Color[width * height]; for (int x = 0; x < width * height; x++) { xy[x] = new Color(0, 0, 0, 0); } img.SetPixels(xy); int i = 0; while (i < width) { int barHeight = Mathf.CeilToInt(Mathf.Clamp(Mathf.Abs(samples[i * step]) * height, 0, height)); int add = samples[i * step] > 0 ? 1 : -1; for (int j = 0; j < barHeight; j++) { img.SetPixel(i, Mathf.FloorToInt(height / 2) - (Mathf.FloorToInt(barHeight / 2) * add) + (j * add), color); } ++i; } img.Apply(); return(img); }
public override void ReadFromAsset(Object asset) { if (!(asset is AudioClip)) { Debug.Log("Asset isn't an AudioClip. Can't read from asset"); return; } AudioClip clip = asset as AudioClip; name = clip.name; AudioImporter audioImporter = AssetImporter.GetAtPath(AssetDatabase.GetAssetPath(clip)) as AudioImporter; if (audioImporter == null) { Debug.Log("Could not get audio importer for asset at path: " + AssetDatabase.GetAssetPath(clip)); return; } guid = AssetDatabase.AssetPathToGUID(audioImporter.assetPath); compressionBitrate = audioImporter.compressionBitrate; forceToMono = audioImporter.forceToMono; format = audioImporter.format; hardware = audioImporter.hardware; loadType = audioImporter.loadType; loopable = audioImporter.loopable; threeD = audioImporter.threeD; }
private void ShowBulkOperations() { GUILayout.BeginArea(new Rect(0, 616, 895, 200)); GUILayout.BeginHorizontal(EditorStyles.objectFieldThumb); GUI.contentColor = Color.yellow; GUILayout.Label("Bulk Settings: Click Copy buttons to copy setting to all selected."); // the setting above it to all selected. GUILayout.Space(26); GUI.contentColor = Color.green; if (GUILayout.Button(new GUIContent("Copy", "Copy Compression bitrate above to all selected"), EditorStyles.toolbarButton, GUILayout.Width(45))) { CopyBitrateToSelected(); } GUILayout.Space(6); if (GUILayout.Button(new GUIContent("Copy", "Copy 3D setting above to all selected"), EditorStyles.toolbarButton, GUILayout.Width(45))) { Copy3DToSelected(); } GUILayout.Space(8); if (GUILayout.Button(new GUIContent("Copy", "Copy Force Mono setting above to all selected"), EditorStyles.toolbarButton, GUILayout.Width(45))) { CopyForceMonoToSelected(); } GUILayout.Space(26); if (GUILayout.Button(new GUIContent("Copy", "Copy Audio Format setting above to all selected"), EditorStyles.toolbarButton, GUILayout.Width(45))) { CopyFormatToSelected(); } GUILayout.Space(101); if (GUILayout.Button(new GUIContent("Copy", "Copy Load Type setting above to all selected"), EditorStyles.toolbarButton, GUILayout.Width(45))) { CopyLoadTypeToSelected(); } GUILayout.FlexibleSpace(); GUILayout.EndHorizontal(); GUI.contentColor = Color.white; GUILayout.BeginHorizontal(EditorStyles.miniButtonLeft); GUILayout.Space(246); bulkBitrate = EditorGUILayout.IntSlider("", bulkBitrate / 1000, 32, 256, GUILayout.Width(202)) * 1000; GUILayout.Space(13); bulk3D = GUILayout.Toggle(bulk3D, ""); GUILayout.Space(36); bulkForceMono = GUILayout.Toggle(bulkForceMono, ""); GUILayout.Space(35); bulkFormat = (AudioImporterFormat)EditorGUILayout.EnumPopup(bulkFormat, GUILayout.Width(136)); GUILayout.Space(6); bulkLoadType = (AudioImporterLoadType)EditorGUILayout.EnumPopup(bulkLoadType, GUILayout.Width(140)); GUILayout.FlexibleSpace(); GUILayout.EndHorizontal(); GUILayout.EndArea(); }
void SetPsaiDefaultValues() { _3dSound = PSAI_DEFAULT_3D; _forceToMono = PSAI_DEFAULT_MONO; _format = PSAI_DEFAULT_FORMAT; _loadType = PSAI_DEFAULT_LOADTYPE; _createWrapperPrefabs = PSAI_DEFAULT_CREATE_WRAPPERS; }
static void SelectedToggleDecompressOnLoadSettings(AudioImporterLoadType loadType) { Object[] audioclips = GetSelectedAudioclips(); Selection.objects = new Object[0]; foreach (AudioClip audioclip in audioclips) { string path = AssetDatabase.GetAssetPath(audioclip); AudioImporter audioImporter = AssetImporter.GetAtPath(path) as AudioImporter; audioImporter.loadType = loadType; AssetDatabase.ImportAsset(path); } }
static void SelectedToggleDecompressOnLoadSettings(AudioImporterLoadType enabled) { Object[] audioclips = GetSelectedAudioclips(); Selection.objects = new Object[0]; foreach (AudioClip audioclip in audioclips) { string path = AssetDatabase.GetAssetPath(audioclip); AudioImporter audioImporter = AssetImporter.GetAtPath(path) as AudioImporter; audioImporter.loadType = enabled; AssetDatabase.ImportAsset(path); } }
/// <summary> /// Changes the setting of selected audio clip files. /// </summary> /// <param name='is3D'> /// Is3 d. /// </param> /// <param name='loadType'> /// Load type. /// </param> /// <param name='cb'> /// Compression Bitrate /// </param> private static void ChangeSettingAudio(bool is3D, AudioImporterLoadType loadType, int cb) { Object[] clips = GetSelectedSounds(); foreach (AudioClip clip in clips) { string path = AssetDatabase.GetAssetPath(clip); AudioImporter audioImporter = AssetImporter.GetAtPath(path) as AudioImporter; audioImporter.threeD = is3D; audioImporter.format = AudioImporterFormat.Compressed; audioImporter.loadType = loadType; audioImporter.compressionBitrate = cb; AssetDatabase.ImportAsset(path); } }
public override void ApplyCopiedValues(string[] properties, object[] values) { for(int i=0; i<properties.Length; i++) { string property = properties[i]; if(property == "compressionBitrate") { compressionBitrate = (int) values[i]; } if(property == "forceToMono") { forceToMono = (bool) values[i]; } if(property == "format") { format = (AudioImporterFormat) values[i]; } if(property == "hardware") { hardware = (bool) values[i]; } if(property == "loadType") { loadType = (AudioImporterLoadType) values[i]; } if(property == "loopable") { loopable = (bool) values[i]; }; if(property == "threeD") { threeD = (bool) values[i]; } } }
public void Init() { this.title = "Audio Importer"; Object[] audioclips = GetSelectedAudioclips(); if (audioclips.Length > 0) { string path = AssetDatabase.GetAssetPath(audioclips[0]); AudioImporter audioImporter = AssetImporter.GetAtPath(path) as AudioImporter; m_format = audioImporter.format; m_bitrate = audioImporter.compressionBitrate / 1000; m_loadType = audioImporter.loadType; m_3dSound = audioImporter.threeD; m_forceToMono = audioImporter.forceToMono; m_hardwareDecoding = audioImporter.hardware; m_gaplessLooping = audioImporter.loopable; } }
public AudioInfo(string fullPath, string name, bool is3d, int compressionBitrate, bool forceMono, AudioImporterFormat format, AudioImporterLoadType loadType) { _origIs3d = is3d; _origCompressionBitrate = compressionBitrate; _origForceMono = forceMono; _origFormat = format; _origLoadType = loadType; _fullPath = fullPath; _name = name; _is3d = is3d; _compressionBitrate = compressionBitrate; _forceMono = forceMono; _format = format; _loadType = loadType; _isSelected = false; _hasChanged = false; _lastUpdated = DateTime.MinValue.Ticks; }
public AudioInformation(string fullPath, string name, bool is3D, int compressionBitrate, bool forceMono, AudioImporterFormat format, AudioImporterLoadType loadType) { OrigIs3D = is3D; OrigCompressionBitrate = compressionBitrate; OrigForceMono = forceMono; OrigFormat = format; OrigLoadType = loadType; FullPath = fullPath; Name = name; Is3D = is3D; CompressionBitrate = compressionBitrate; ForceMono = forceMono; Format = format; LoadType = loadType; IsSelected = false; HasChanged = false; LastUpdated = DateTime.MinValue.Ticks; }
public AudioAsset(StreamReader reader) { string line = string.Empty; while((line = reader.ReadLine()) != null) { if(line.Contains(VerySimpleXml.EndNode(nodeName))) break; //Name if(line.Contains(VerySimpleXml.StartNode(nameNodeName))) name = VerySimpleXml.NodeValue(line, nameNodeName); //Path if(line.Contains(VerySimpleXml.StartNode(pathNodeName))) { guid = AssetDatabase.AssetPathToGUID(VerySimpleXml.NodeValue(line, pathNodeName)); } if(line.Contains(VerySimpleXml.StartNode(guidNodeName))) guid = VerySimpleXml.NodeValue(line, guidNodeName); //IMPORT SETTINGS if(line.Contains(VerySimpleXml.StartNode("compressionBitrate"))) compressionBitrate = int.Parse(VerySimpleXml.NodeValue(line, "compressionBitrate")); if(line.Contains(VerySimpleXml.StartNode("forceToMono"))) forceToMono = bool.Parse(VerySimpleXml.NodeValue(line, "forceToMono")); if(line.Contains(VerySimpleXml.StartNode("format"))) format = (AudioImporterFormat) System.Enum.Parse(typeof(AudioImporterFormat), VerySimpleXml.NodeValue(line, "format")); if(line.Contains(VerySimpleXml.StartNode("hardware"))) hardware = bool.Parse(VerySimpleXml.NodeValue(line, "hardware")); if(line.Contains(VerySimpleXml.StartNode("loadType"))) loadType = (AudioImporterLoadType) System.Enum.Parse(typeof(AudioImporterLoadType), VerySimpleXml.NodeValue(line, "loadType")); if(line.Contains(VerySimpleXml.StartNode("loopable"))) loopable = bool.Parse(VerySimpleXml.NodeValue(line, "loopable")); if(line.Contains(VerySimpleXml.StartNode("threeD"))) threeD = bool.Parse(VerySimpleXml.NodeValue(line, "threeD")); } }
static void SetAudioImportSettings(bool enableHardwareDecoding = true, AudioImporterFormat newFormat = AudioImporterFormat.Native, int newCompressionBitrate = 90, AudioImporterLoadType decompressOnLoadType = AudioImporterLoadType.StreamFromDisc, bool is3D = false, bool forceToMono = false ) { Object[] audioclips = GetSelectedAudioclips(); Selection.objects = new Object[0]; foreach (AudioClip audioclip in audioclips) { string path = AssetDatabase.GetAssetPath(audioclip); AudioImporter audioImporter = AssetImporter.GetAtPath(path) as AudioImporter; audioImporter.hardware = enableHardwareDecoding; audioImporter.format = newFormat; audioImporter.compressionBitrate = newCompressionBitrate; audioImporter.loadType = decompressOnLoadType; audioImporter.threeD = is3D; audioImporter.forceToMono = forceToMono; AssetDatabase.ImportAsset(path); } }
public override void DrawEditor() { format = (AudioImporterFormat)(EditorGUILayout.Popup("Audio Format", (int)format + 1, new[] { "Native", "Compressed" }) - 1); threeD = EditorGUILayout.Toggle("3D Sound", threeD); forceToMono = EditorGUILayout.Toggle("Force to mono", forceToMono); if (format == AudioImporterFormat.Compressed) { loadType = (AudioImporterLoadType)EditorGUILayout.Popup("Load type", (int)loadType, new[] { "Decompress on load", "Compressed in memory", "Stream from disc" }); } else { int curType = Mathf.Clamp((int)loadType - 1, 0, 1); loadType = (AudioImporterLoadType)(EditorGUILayout.Popup("Load type", curType, new[] { "Load into memory", "Stream from disc" }) + 1); } hardware = EditorGUILayout.Toggle("Hardware decoding", hardware); loopable = EditorGUILayout.Toggle("Gapless looping", loopable); compressionBitrate = EditorGUILayout.IntSlider("Compression (kbps)", compressionBitrate, 45, 500); }
public override void ApplyCopiedValues(string[] properties, object[] values) { for (int i = 0; i < properties.Length; i++) { string property = properties[i]; if (property == "compressionBitrate") { compressionBitrate = (int)values[i]; } if (property == "forceToMono") { forceToMono = (bool)values[i]; } if (property == "format") { format = (AudioImporterFormat)values[i]; } if (property == "hardware") { hardware = (bool)values[i]; } if (property == "loadType") { loadType = (AudioImporterLoadType)values[i]; } if (property == "loopable") { loopable = (bool)values[i]; } ; if (property == "threeD") { threeD = (bool)values[i]; } } }
void OnGUI() { if (_scanningInitiated) { GUILayout.Label("PLEASE WAIT! Scanning selection...", EditorStyles.boldLabel); return; } GUILayout.Label("psai Multi Audio Object Editor", EditorStyles.boldLabel); _usePsaiDefaults = EditorGUILayout.Toggle("use psai settings", _usePsaiDefaults); if (_usePsaiDefaults) { GUI.enabled = false; SetPsaiDefaultValues(); } _format = (AudioImporterFormat)EditorGUILayout.EnumPopup("Audio Format", _format); _3dSound = EditorGUILayout.Toggle("3D Sound", _3dSound); _forceToMono = EditorGUILayout.Toggle("Force to mono", _forceToMono); _loadType = (AudioImporterLoadType)EditorGUILayout.EnumPopup("Load type", _loadType); _createWrapperPrefabs = EditorGUILayout.Toggle("use Wrappers", _createWrapperPrefabs); GUI.enabled = true; EditorGUILayout.BeginHorizontal(); EditorGUILayout.PrefixLabel("Compression (kbps)"); _compression = EditorGUILayout.IntSlider(_compression, COMPRESSION_KBPS_MIN, COMPRESSION_KBPS_MAX); EditorGUILayout.EndHorizontal(); if (GUILayout.Button("Apply", GUILayout.Width(position.width / 2), GUILayout.Height(40))) { _applyClicked = true; } }
static void SelectedToggleDecompressOnLoadSettings(AudioImporterLoadType enabled) { Object[] audioclips = GetSelectedAudioclips(); if(deselectAfterCompletion) Selection.objects = new Object[0]; foreach (AudioClip audioclip in audioclips) { string path = AssetDatabase.GetAssetPath(audioclip); AudioImporter audioImporter = AssetImporter.GetAtPath(path) as AudioImporter; if(audioImporter.loadType != enabled) audioImporter.loadType = enabled; { AssetDatabase.ImportAsset(path); } } }
public AudioAsset(StreamReader reader) { string line = string.Empty; while ((line = reader.ReadLine()) != null) { if (line.Contains(VerySimpleXml.EndNode(nodeName))) { break; } //Name if (line.Contains(VerySimpleXml.StartNode(nameNodeName))) { name = VerySimpleXml.NodeValue(line, nameNodeName); } //Path if (line.Contains(VerySimpleXml.StartNode(pathNodeName))) { guid = AssetDatabase.AssetPathToGUID(VerySimpleXml.NodeValue(line, pathNodeName)); } if (line.Contains(VerySimpleXml.StartNode(guidNodeName))) { guid = VerySimpleXml.NodeValue(line, guidNodeName); } //IMPORT SETTINGS if (line.Contains(VerySimpleXml.StartNode("compressionBitrate"))) { compressionBitrate = int.Parse(VerySimpleXml.NodeValue(line, "compressionBitrate")); } if (line.Contains(VerySimpleXml.StartNode("forceToMono"))) { forceToMono = bool.Parse(VerySimpleXml.NodeValue(line, "forceToMono")); } if (line.Contains(VerySimpleXml.StartNode("format"))) { format = (AudioImporterFormat)System.Enum.Parse(typeof(AudioImporterFormat), VerySimpleXml.NodeValue(line, "format")); } if (line.Contains(VerySimpleXml.StartNode("hardware"))) { hardware = bool.Parse(VerySimpleXml.NodeValue(line, "hardware")); } if (line.Contains(VerySimpleXml.StartNode("loadType"))) { loadType = (AudioImporterLoadType)System.Enum.Parse(typeof(AudioImporterLoadType), VerySimpleXml.NodeValue(line, "loadType")); } if (line.Contains(VerySimpleXml.StartNode("loopable"))) { loopable = bool.Parse(VerySimpleXml.NodeValue(line, "loopable")); } if (line.Contains(VerySimpleXml.StartNode("threeD"))) { threeD = bool.Parse(VerySimpleXml.NodeValue(line, "threeD")); } } }
public static Texture2D CreatePreview(AudioClip aud, int width, int height, Color color, PreviewType previewType) { int step = Mathf.CeilToInt((aud.samples * aud.channels) / width); float[] samples = new float[aud.samples * aud.channels]; //workaround to prevent the error in the function getData when Audio Importer loadType is "compressed in memory" string path = AssetDatabase.GetAssetPath(aud); AudioImporter audioImporter = AssetImporter.GetAtPath(path) as AudioImporter; AudioImporterLoadType audioLoadTypeBackup = audioImporter.loadType; audioImporter.loadType = AudioImporterLoadType.StreamFromDisc; AssetDatabase.ImportAsset(path); //getData after the loadType changed aud.GetData(samples, 0); //restore the loadType audioImporter.loadType = audioLoadTypeBackup; AssetDatabase.ImportAsset(path); Texture2D img = new Texture2D(width, height, TextureFormat.RGBA32, false); if (previewType == PreviewType.wave) { Color[] xy = new Color[width * height]; for (int x = 0; x < width * height; x++) { xy[x] = new Color(0, 0, 0, 0); //xy[x] = new Color(0, 1, 0, 0.2f); } img.SetPixels(xy); int i = 0; while (i < width) { int barHeight = Mathf.CeilToInt(Mathf.Clamp(Mathf.Abs(samples[i * step]) * height, 0, height)); int add = samples[i * step] > 0 ? 1 : -1; for (int j = 0; j < barHeight; j++) { img.SetPixel(i, Mathf.FloorToInt(height / 2) - (Mathf.FloorToInt(barHeight / 2) * add) + (j * add), color); } ++i; } img.Apply(); } else if (previewType == PreviewType.bar) { img = new Texture2D(width, 1, TextureFormat.RGBA32, false); int i = 0; while (i < width) { //int barHeight = Mathf.CeilToInt(Mathf.Clamp(Mathf.Abs(samples[i * step]) * height, 0, height)); //int add = samples[i * step] > 0 ? 1 : -1; float colorIntensity = Mathf.Clamp(Mathf.Abs(samples[i * step]) * 10f, 0, 1); Color colorReturn = new Color(color.r / colorIntensity, color.g / colorIntensity, color.b / colorIntensity, colorIntensity / 4f); img.SetPixel(i, 0, colorReturn); ++i; } img.Apply(); } else if (previewType == PreviewType.both) { /* * Color[] xy = new Color[width * height]; * for (int x = 0; x < width * height; x++) * { * xy[x] = new Color(1, 0, 0, 1); * //xy[x] = new Color(0, 1, 0, 0.2f); * } * img.SetPixels(xy); */ int i = 0; while (i < width) { int barHeight = Mathf.CeilToInt(Mathf.Clamp(Mathf.Abs(samples[i * step]) * height, 0, height)); int add = samples[i * step] > 0 ? 1 : -1; float colorIntensity = Mathf.Clamp(Mathf.Abs(samples[i * step]) * 10f, 0, 1); Color colorReturn = new Color(color.r / colorIntensity, color.g / colorIntensity, color.b / colorIntensity, colorIntensity / 6f); for (int j = 0; j < height; j++) { img.SetPixel(i, j, colorReturn); } for (int j = 0; j < barHeight; j++) { img.SetPixel(i, Mathf.FloorToInt(height / 2) - (Mathf.FloorToInt(barHeight / 2) * add) + (j * add), color); } ++i; } img.Apply(); } return(img); }
private void ShowBulkOperations() { GUILayout.BeginArea(new Rect(0, 616, 895, 200)); GUILayout.BeginHorizontal(EditorStyles.objectFieldThumb); GUI.contentColor = DTGUIHelper.BrightButtonColor; GUILayout.Label("Bulk Settings: Click Copy buttons to copy setting to all selected."); // the setting above it to all selected. GUILayout.Space(26); GUI.contentColor = DTGUIHelper.BrightButtonColor; if (GUILayout.Button(new GUIContent("Copy", "Copy Compression bitrate above to all selected"), EditorStyles.toolbarButton, GUILayout.Width(45))) { CopyBitrateToSelected(); } GUILayout.Space(6); if (GUILayout.Button(new GUIContent("Copy", "Copy 3D setting above to all selected"), EditorStyles.toolbarButton, GUILayout.Width(45))) { Copy3DToSelected(); } GUILayout.Space(8); if (GUILayout.Button(new GUIContent("Copy", "Copy Force Mono setting above to all selected"), EditorStyles.toolbarButton, GUILayout.Width(45))) { CopyForceMonoToSelected(); } GUILayout.Space(26); if (GUILayout.Button(new GUIContent("Copy", "Copy Audio Format setting above to all selected"), EditorStyles.toolbarButton, GUILayout.Width(45))) { CopyFormatToSelected(); } GUILayout.Space(101); if (GUILayout.Button(new GUIContent("Copy", "Copy Load Type setting above to all selected"), EditorStyles.toolbarButton, GUILayout.Width(45))) { CopyLoadTypeToSelected(); } GUILayout.FlexibleSpace(); GUILayout.EndHorizontal(); GUI.contentColor = Color.white; GUILayout.BeginHorizontal(DTGUIHelper.CornerGUIStyle); GUILayout.Space(246); _bulkBitrate = EditorGUILayout.IntSlider("", _bulkBitrate / 1000, 32, 256, GUILayout.Width(202)) * 1000; GUILayout.Space(13); _bulk3D = GUILayout.Toggle(_bulk3D, ""); GUILayout.Space(36); _bulkForceMono = GUILayout.Toggle(_bulkForceMono, ""); GUILayout.Space(35); _bulkFormat = (AudioImporterFormat)EditorGUILayout.EnumPopup(_bulkFormat, GUILayout.Width(136)); GUILayout.Space(6); _bulkLoadType = (AudioImporterLoadType)EditorGUILayout.EnumPopup(_bulkLoadType, GUILayout.Width(140)); GUILayout.FlexibleSpace(); GUILayout.EndHorizontal(); GUILayout.EndArea(); }
public override void ReadFromAsset(Object asset) { if(!(asset is AudioClip)) { Debug.Log("Asset isn't an AudioClip. Can't read from asset"); return; } AudioClip clip = asset as AudioClip; name = clip.name; AudioImporter audioImporter = AssetImporter.GetAtPath(AssetDatabase.GetAssetPath(clip)) as AudioImporter; if(audioImporter == null) { Debug.Log("Could not get audio importer for asset at path: " + AssetDatabase.GetAssetPath(clip)); return; } guid = AssetDatabase.AssetPathToGUID(audioImporter.assetPath); compressionBitrate = audioImporter.compressionBitrate; forceToMono = audioImporter.forceToMono; format = audioImporter.format; hardware = audioImporter.hardware; loadType = audioImporter.loadType; loopable = audioImporter.loopable; threeD = audioImporter.threeD; }