示例#1
0
        private void AddClip(NamedAudioClip c)
        {
            bool isChecked = clips_.Contains(c);

            var time = "?";

            if (c.sourceClip != null)
            {
                time = Utilities.SecondsToString(c.sourceClip.length);
            }

            var name = "?";

            if (c.displayName != null)
            {
                name = c.displayName;
            }

            var text = "[" + time + "] " + name;

            var cb = new Checkbox(
                text, isChecked,
                b => ClipToggled(c, b), flags_ | Widget.Tall);

            collapsible_.Add(cb);
        }
示例#2
0
        public static NamedAudioClip LoadAudio(string path)
        {
            string         localPath = SuperController.singleton.NormalizeLoadPath(path);
            NamedAudioClip existing  = URLAudioClipManager.singleton.GetClip(localPath);

            if (existing != null)
            {
                return(existing);
            }

            URLAudioClip clip = URLAudioClipManager.singleton.QueueClip(SuperController.singleton.NormalizeMediaPath(path));

            if (clip == null)
            {
                return(null);
            }

            NamedAudioClip nac = URLAudioClipManager.singleton.GetClip(clip.uid);

            if (nac == null)
            {
                return(null);
            }
            return(nac);
        }
示例#3
0
        public Expression(JSONNode expressionData, Dictionary <string, Facial> facialDict)
        {
            audioClip = Utils.LoadAudioClipAbs(Utils.AbsPath(expressionData["audio"]));

            if (expressionData["minIntensity"] != null)
            {
                minIntensity = float.Parse(expressionData["minIntensity"]);
            }

            if (expressionData["maxIntensity"] != null)
            {
                maxIntensity = float.Parse(expressionData["maxIntensity"]);
            }

            if (expressionData["mouthClosed"] != null)
            {
                keepMouthClosed = expressionData["mouthClosed"].AsBool;
            }

            var facialListNode = expressionData["facial"];

            for (int i = 0; i < facialListNode.Count; i++)
            {
                facialList.Add(facialListNode[i]);
            }

            facialLookup = facialDict;
        }
        public ExpressionAnimation(GenerateDAZMorphsControlUI morphControl, string jsonString)
        {
            this.morphControl = morphControl;

            JSONClass obj = JSON.Parse(jsonString).AsObject;

            audio    = obj["audio"].Value;
            duration = obj["duration"].AsFloat;
            JSONArray keyframesData = obj["keyframes"].AsArray;

            for (int i = 0; i < keyframesData.Count; i++)
            {
                ExpressionKeyframe keyframe = new ExpressionKeyframe();

                JSONClass keyframeData = keyframesData[i].AsObject;

                keyframeData.Keys.ToList().ForEach((keyName) =>
                {
                    float value = keyframeData[keyName].AsFloat;
                    if (keyName == "time")
                    {
                        keyframe.time = value;
                    }
                    else
                    {
                        keyframe.morphValues[keyName] = value;
                    }
                });

                keyframes.Add(keyframe);
            }

            nac = URLAudioClipManager.singleton.GetClip(audio);
        }
    public static GameObject Play(NamedAudioClip namedAudio, bool loop)
    {
        var sound = new GameObject(string.Format("Sound - {0}", namedAudio.name));

        sound.transform.SetParent(instance.transform);
        sound.transform.localPosition = Vector3.zero;
        var source = sound.AddComponent <AudioSource>();

        source.clip   = namedAudio.clip;
        source.volume = namedAudio.volume;

        if (namedAudio.name.Contains("Music"))
        {
            source.outputAudioMixerGroup = instance.musicMixerGroup;
        }
        else
        {
            source.outputAudioMixerGroup = instance.soundMixerGroup;
        }

        source.Play();
        source.loop = loop;
        if (!loop)
        {
            Destroy(sound, namedAudio.clip.length + 1);
        }
        return(sound);
    }
示例#6
0
 public void PlayAudio(NamedAudioClip clip)
 {
     if (clip != null)
     {
         headAudioSource.PlayNow(clip);
     }
 }
示例#7
0
        public void TriggerClimax()
        {
            if (dm.personality == null)
            {
                return;
            }

            if (dm.expressions == null)
            {
                return;
            }

            NamedAudioClip clip = dm.personality.GetRandomClimaxClip();

            if (clip == null || clip.sourceClip == null)
            {
                return;
            }

            dm.PlayAudio(clip);
            lastPlayedClip = clip;

            dm.climaxController.SetClimaxDuration(clip.sourceClip.length);

            currentIdle        = dm.expressions.climaxGroup.SelectRandomExpression();
            currentMouthOpened = dm.expressions.mouthOpenGroup.SelectRandomExpression();
        }
        JSONClass KeyToJSON(string key, JSONNode expressionNode)
        {
            if (key.ToLower().Contains(".json"))
            {
                string expressionPath = Expressions.EXPRESSIONS_PATH + "/" + key;
                //Debug.Log(expressionPath);
                JSONClass expression = JSON.Parse(SuperController.singleton.ReadFileIntoString(expressionPath)).AsObject;
                if (expression["audio"] != null)
                {
                    NamedAudioClip clip = DollmasterPlugin.LoadAudio(DollmasterPlugin.PLUGIN_PATH + "/" + expression["audio"]);
                    audioClips[expression["audio"]] = clip;
                }

                return(expression);
            }
            else
            {
                JSONClass node = new JSONClass();
                node["morphs"] = new JSONArray();
                JSONClass morphNode = new JSONClass();
                morphNode["name"]  = key;
                morphNode["value"] = expressionNode;
                node["morphs"].Add(morphNode);
                return(node);
            }
        }
示例#9
0
        JSONStorableStringChooser BuildClipUI(int index)
        {
            NamedAudioClip            clip    = null;
            JSONStorableStringChooser chooser = new JSONStorableStringChooser("clip_" + index, GetClipIds(), null, "Choose Audio Clip", (string choice) =>
            {
                clip = URLAudioClipManager.singleton.GetClip(choice);
                clips.Add(clip);

                clipCount.val = clips.Count;

                Debug.Log("updating choice " + choice);
            });

            RegisterStringChooser(chooser);
            UIDynamicPopup  popup  = CreateScrollablePopup(chooser, true);
            UIDynamicButton remove = CreateButton("Remove Clip Above", true);

            remove.button.onClick.AddListener(() =>
            {
                RemoveButton(remove);
                Destroy(popup.gameObject);

                clips.Remove(clip);
                clipCount.val = clips.Count;
            });

            return(chooser);
        }
示例#10
0
 public void AddClip(NamedAudioClip c)
 {
     if (c != null)
     {
         clips_.Add(c);
         Reshuffle();
     }
 }
        void SampleAudioClipAtT(NamedAudioClip clip, float t)
        {
            AudioSource testAudioSource = URLAudioClipManager.singleton.testAudioSource;

            testAudioSource.Stop();
            testAudioSource.time = clip.clipToPlay.length * t;
            URLAudioClipManager.singleton.TestClip(clip);
            testAudioSource.SetScheduledEndTime(AudioSettings.dspTime + 0.2f);
        }
示例#12
0
        public void playNext(AudioSource audioSource, float volume = 1.0f)
        {
            NamedAudioClip nac = audioClips[next];

            audioSource.clip   = nac.clipToPlay;
            audioSource.volume = volume;
            audioSource.pitch  = UnityEngine.Random.Range(pitchlow, pitchhigh);
            next = (next + 1) % audioClips.Count;
            audioSource.Play();
        }
示例#13
0
    public static void PlaySound(NamedAudioClip clip, Vector3 position, float minVolume, float maxVolume,
                                 float minPitch, float maxPitch)
    {
        var instance = Instantiate(Resources.Load("Prefabs/AudioPlayer", typeof(GameObject))) as GameObject;

        instance.transform.position = position;
        var audioPlayer = instance.GetComponent <InstantiatedAudioPlayer>();

        audioPlayer.PlayClip(clip, position, minVolume, maxVolume, minPitch, maxPitch);
    }
    private AudioClip GetAudioClip(string name)
    {
        NamedAudioClip clip = _clips.Find((NamedAudioClip c) => { return(c._name == name); });

        if (clip == null)
        {
            Debug.LogWarning("No AudioClip attached with name: " + name, this);
            return(null);
        }

        return(clip._clip);
    }
        void PlayAudioClipAtT(NamedAudioClip clip, float t)
        {
            if (clip == null)
            {
                Debug.Log("clip is null");
                return;
            }
            AudioSource testAudioSource = URLAudioClipManager.singleton.testAudioSource;

            testAudioSource.Stop();
            testAudioSource.time = clip.clipToPlay.length * t;
            URLAudioClipManager.singleton.TestClip(clip);
        }
示例#16
0
        public static NamedAudioClip LoadAudioClip(string localFilePath)
        {
            NamedAudioClip existing = URLAudioClipManager.singleton.GetClip(localFilePath);

            if (existing != null)
            {
                return(existing);
            }

            URLAudioClip clip = URLAudioClipManager.singleton.QueueClip(localFilePath, localFilePath);

            return(URLAudioClipManager.singleton.GetClip(clip.uid));
        }
示例#17
0
    private void PlayClip(NamedAudioClip clip, Vector3 position, float minVolume, float maxVolume,
                          float minPitch, float maxPitch)
    {
        transform.position = position;

        _source.clip   = clip.Clip;
        _source.volume = Random.Range(minVolume, maxVolume);
        _source.pitch  = Random.Range(minPitch, maxPitch);
        _started       = true;
        _source.Play();

        ShowText(AudioTextLoader.GetSelectedDescription(clip.Name), position, clip.Clip.length);
    }
示例#18
0
        private void ClipToggled(NamedAudioClip c, bool b)
        {
            if (b)
            {
                clips_.Add(c);
            }
            else
            {
                clips_.Remove(c);
            }

            callback_?.Invoke(clips_.ToList());
        }
示例#19
0
        public void StartExpression()
        {
            if (dm == null)
            {
                return;
            }

            if (dm.personality == null)
            {
                return;
            }

            if (dm.expressions == null)
            {
                return;
            }

            NamedAudioClip clip = dm.personality.GetTriggeredAudioClip(dm.arousal);

            if (clip == null || clip.sourceClip == null || clip == lastPlayedClip)
            {
                return;
            }

            //Debug.Log("playing " + clip.displayName);

            currentIdle = null;

            if (voiceEnabled.val)
            {
                dm.PlayAudio(clip);
                lastPlayedClip = clip;
            }

            nextTriggerAvailableTime = Time.time + clip.sourceClip.length + UnityEngine.Random.Range(0.5f, 3.0f);

            if (UnityEngine.Random.Range(0, 100) > 10)
            {
                currentMouthOpened = dm.expressions.mouthOpenGroup.SelectRandomExpression();
            }

            if (UnityEngine.Random.Range(0, 100) > 40)
            {
                currentMouthClosed = dm.expressions.mouthClosedGroup.SelectRandomExpression();
            }

            if (UnityEngine.Random.Range(0, 100) > 60)
            {
                currentEyes = dm.expressions.eyesGroup.SelectRandomExpression();
            }
        }
示例#20
0
        public static NamedAudioClip LoadAudioClipAbs(string absFilePath)
        {
            string         localPath = SuperController.singleton.NormalizePath(absFilePath);
            NamedAudioClip existing  = URLAudioClipManager.singleton.GetClip(localPath);

            if (existing != null)
            {
                return(existing);
            }

            URLAudioClip clip = URLAudioClipManager.singleton.QueueClip(absFilePath, localPath);

            return(URLAudioClipManager.singleton.GetClip(clip.uid));
        }
示例#21
0
        /**
         * Removes a clip from this collection
         */
        public bool Remove(NamedAudioClip sourceClip)
        {
            if (_clips == null)
            {
                return(false);
            }
            var clip = FindByNamedAudioClip(sourceClip);

            if (clip == null)
            {
                return(false);
            }
            ResetUnplayedClips();
            return(true);
        }
示例#22
0
        public void RemoveClip(NamedAudioClip c)
        {
            if (c != null && clips_.Contains(c))
            {
                if (currentClip_ == c)
                {
                    StopAudio();
                    needsDelay_  = false;
                    currentClip_ = null;
                }

                clips_.Remove(c);
                Reshuffle();
            }
        }
示例#23
0
        // Converts a NamedAudioClip into a AudioMateClip and creates the necessary UI to display the clip
        // in the clip library
        private AudioMateClip CreateClip(NamedAudioClip sourceClip)
        {
            var clip    = new AudioMateClip(sourceClip);
            var clipUID = GetClipObjectName(clip);
            var go      = new GameObject(clipUID);

            go.transform.SetParent(_content, false);
            var gridLayout = go.AddComponent <HorizontalLayoutGroup>();

            gridLayout.spacing = 10f;
            gridLayout.childForceExpandWidth  = false;
            gridLayout.childControlWidth      = true;
            gridLayout.childForceExpandHeight = true;
            gridLayout.childControlHeight     = false;
            gridLayout.padding = new RectOffset(5, 5, -20, -20);
            var buttonGroup   = gridLayout.gameObject.AddComponent <HorizontalButtonGroup>();
            var previewButton = buttonGroup.CreateButton("\u25B6", Styles.Success, () =>
            {
                clip.SourceClip.Test();
                Cursor.Clip  = clip;
                Cursor.Index = Clips.IndexOf(clip);
                RefreshUI();
            }, false, 10f);

            var toggleButton = buttonGroup.CreateButton(clip.DisplayName, Styles.Disabled, () =>
            {
                clip.ToggleState();
                if (clip.IsInActiveCollection)
                {
                    _collections.AddClipToActiveCollection(clip);
                }
                else
                {
                    _collections.RemoveClipFromActiveCollection(clip);
                }

                RefreshUI();
            }, true, 100f);

            clip.UI.PreviewButton = previewButton;
            clip.UI.ToggleButton  = toggleButton;
            clip.RefreshUI();

            return(clip);
        }
示例#24
0
            public BreathEntry(string name, float breatheOut, float holdOut, float breatheIn, float holdIn, bool noseIn)
            {
                this.name            = name;
                this.breatheOut      = breatheOut;
                this.holdOut         = holdOut;
                this.breatheIn       = breatheIn;
                this.holdInReference = holdIn - breatheIn;
                this.noseIn          = noseIn;

                string filename = "./" + AUDIO_DIR + name;

                audioClip = URLAudioClipManager.singleton.GetClip(filename);
                if (audioClip == null)
                {
                    URLAudioClipManager.singleton.QueueClip(SCENE_DIR + AUDIO_DIR + name);
                    audioClip = URLAudioClipManager.singleton.GetClip(filename);
                }
            }
示例#25
0
        public void playRandom(AudioSource audioSource, float volume = 1.0f, float delay = 0)
        {
            NamedAudioClip nac = audioClips[next];

            if (audioSource != null && nac.clipToPlay != null)
            {
                audioSource.clip   = audioClips[next].clipToPlay;
                audioSource.volume = volume;
                audioSource.pitch  = UnityEngine.Random.Range(pitchlow, pitchhigh);
                audioSource.PlayDelayed(delay);
                previous = next;
                next     = (int)UnityEngine.Random.Range(0f, (float)audioClips.Count - 1);
                // take next if its the same again
                if (next == previous)
                {
                    next = (next + 1) % audioClips.Count;
                }
            }
        }
示例#26
0
        public BreathController(DollmasterPlugin dm) : base(dm)
        {
            chestControl = atom.GetStorableByID("chestControl") as FreeControllerV3;

            string SFX_PATH = DollmasterPlugin.ASSETS_PATH + "/SFX";

            breathingMouth   = DollmasterPlugin.LoadAudio(SFX_PATH + "/breathing_mouth.wav");
            breathingNose    = DollmasterPlugin.LoadAudio(SFX_PATH + "/breathing_nose.wav");
            breathingPanting = DollmasterPlugin.LoadAudio(SFX_PATH + "/breathing_panting.mp3");

            breathEnabled = new JSONStorableBool("breathEnabled", true);
            dm.RegisterBool(breathEnabled);
            UIDynamicToggle moduleEnableToggle = dm.CreateToggle(breathEnabled);

            moduleEnableToggle.label           = "Enable Breathing";
            moduleEnableToggle.backgroundColor = Color.green;

            dm.CreateSpacer();
        }
示例#27
0
 private AudioMateClip FindByNamedAudioClip(NamedAudioClip sourceClip)
 {
     return(_clips?.Find(x => x.SourceClip == sourceClip));
 }
示例#28
0
 /**
  * Checks if a NamedAudioClip already exists in this collection.
  */
 public bool ContainsNamedAudioClip(NamedAudioClip namedAudioClip)
 {
     return(ContainsNamedAudioClip(namedAudioClip.uid));
 }
示例#29
0
 public AudioMateClip(NamedAudioClip sourceClip)
 {
     SourceClip = sourceClip;
     Init();
 }
示例#30
0
        public override void Update()
        {
            base.Update();

            if (breathEnabled.val == false)
            {
                return;
            }

            if (dm.arousal.value > 1)
            {
                breathesPerMinute += 2.0f * Time.deltaTime;
            }
            else
            {
                breathesPerMinute -= 10.0f * Time.deltaTime;
            }

            breathesPerMinute = Mathf.Clamp(breathesPerMinute, minBPM, maxBPM);
            float amount = 6.0f;

            float oneBreathePerMinute = Time.deltaTime * Mathf.PI * 2.0f / 60.0f;

            cycle += oneBreathePerMinute * breathesPerMinute;

            chestControl.jointRotationDriveXTarget = Mathf.Sin(cycle * 0.5f) * amount;

            if (dm.kissController.isKissing)
            {
                return;
            }

            if (dm.headAudioSource.playingClip == null)
            {
                if (breathesPerMinute > 100 && dm.thrustController.slider.slider.value > 2 && dm.arousal.value > 20)
                {
                    NamedAudioClip pantingClip = dm.personality.GetRandomPantingClip();
                    if (pantingClip == null)
                    {
                        pantingClip = breathingPanting;
                    }
                    if (pantingClip == null)
                    {
                        return;
                    }
                    dm.headAudioSource.PlayIfClear(pantingClip);
                    breatheWithMouth = true;
                }
                else
                if (breathesPerMinute > 60)
                {
                    if (dm.thrustController.sliderValue <= 0 && breathingMouth != null)
                    {
                        dm.headAudioSource.PlayIfClear(breathingMouth);
                    }
                    breatheWithMouth = true;
                }
                else
                {
                    if (dm.thrustController.sliderValue <= 0 && breathingNose != null)
                    {
                        dm.headAudioSource.PlayIfClear(breathingNose);
                    }
                    breatheWithMouth = false;
                }
            }
        }