コード例 #1
0
        public void AudioSourceSettingUpdate_NewValueIsWrittenBackToSettings()
        {
            var setting = "setting";

            _audioSourceMock.SetupGet(s => s.Settings).Returns(new List <AudioSourceSettingAttribute> {
                new AudioSourceSettingAttribute(setting)
            });
            var settingModel = new AudioSourceSetting {
                Name = setting
            };
            var settings = new AudioSourceSettings
            {
                Settings = new List <AudioSourceSetting> {
                    settingModel
                }
            };
            object newSettingValue = 1;

            _audioSourceMock.SetupGet(s => s[It.Is <string>(x => x == setting)]).Returns(newSettingValue);

            var vm = new AudioSourceSettingsCollectionViewModel(_audioSourceMock.Object, settings, _messageBus.Object);

            _audioSourceMock.Raise(s => s.SettingChanged += null, new SettingChangedEventArgs(setting));

            vm.EndEdit();
            Assert.Equal(newSettingValue, settingModel.Value);
        }
コード例 #2
0
        /// <summary>
        /// Creates a settings view model for the new audio source.
        /// </summary>
        /// <param name="audioSource">The audio source.</param>
        public void CreateViewModelForAudioSource(IInternalAudioSource audioSource)
        {
            var settings = audioSource.Settings;

            if (settings.Count == 0)
            {
                return;
            }

            // check if the settings were saved previously and reuse them
            var matchingSetting = _appSettings.AudioSourceSettings.FirstOrDefault(s => s.AudioSourceName == audioSource.Name);

            if (matchingSetting != null)
            {
                var viewModel = new AudioSourceSettingsCollectionViewModel(audioSource, matchingSetting, _messageBus);
                AudioSourcesSettings.Add(viewModel);
            }
            else
            {
                var newSettingsModel = new AudioSourceSettings {
                    AudioSourceName = audioSource.Name
                };
                _appSettings.AudioSourceSettings.Add(newSettingsModel);
                var newViewModel = new AudioSourceSettingsCollectionViewModel(audioSource, newSettingsModel, _messageBus);
                AudioSourcesSettings.Add(newViewModel);
            }

            _appSettings.Save();
        }
コード例 #3
0
    /// <summary>
    /// Setups the audio source to play the given sound at the given volume/spatial blend
    /// A spatial blen higher than 0 makes the sound 3D with the highest value being 1
    /// </summary>
    /// <param name="clip">Clip to play</param>
    /// <param name="volume">Volume to play at</param>
    /// <param name="spatialBlend">1f = 3D, 0f = 2D</param>
    /// <param name="loops">Loop sound playback</param>
    void PlaySound(AudioClip clip, AudioSourceSettings settings)
    {
        if (clip == null)
        {
            Destroy(gameObject);
            return;
        }

        m_soundPlayed = true;

        // Keeps the Hierarchy a little cleaner
        gameObject.name = clip.name + "_AudioSource";

        // Confiure the AudioSource
        Source.clip          = clip;
        Source.volume        = Mathf.Clamp01(settings.volume);
        Source.loop          = settings.loops;
        Source.priority      = settings.priority;
        Source.pitch         = settings.pitch;
        Source.panStereo     = settings.stereoPan;
        Source.reverbZoneMix = settings.reverbZoneMix;
        Source.dopplerLevel  = settings.dopplerLevel;
        Source.spatialBlend  = Mathf.Clamp01(settings.spatialBlend);
        Source.spread        = Mathf.Clamp(settings.spread, 0, 360);
        Source.minDistance   = settings.minDistance;
        Source.maxDistance   = settings.maxDistance;
        Source.rolloffMode   = settings.volumeRolloff;

        Source.Play();
    }
コード例 #4
0
        public void AudioSourceSettingUpdatesAreHandled()
        {
            var setting = "setting";

            _audioSourceMock.SetupGet(s => s.Settings).Returns(new List <AudioSourceSettingAttribute> {
                new AudioSourceSettingAttribute(setting)
            });
            var settingModel = new AudioSourceSetting {
                Name = setting
            };
            var settings = new AudioSourceSettings
            {
                Settings = new List <AudioSourceSetting> {
                    settingModel
                }
            };

            var vm = new AudioSourceSettingsVM(settings, _audioSourceMock.Object);

            object newSettingValue = 1;

            _audioSourceMock.SetupGet(s => s[It.Is <string>(x => x == setting)]).Returns(newSettingValue);
            _audioSourceMock.Raise(s => s.SettingChanged += null, new SettingChangedEventArgs(setting));

            Assert.AreEqual(settingModel.Value, newSettingValue);
        }
コード例 #5
0
        public void NoMatchingSettings_CreatesNoChildViewModels()
        {
            _audioSourceMock.SetupGet(s => s.Settings).Returns(new List <AudioSourceSettingAttribute>());
            var name = "test";

            _audioSourceMock.SetupGet(x => x.Name).Returns(name);

            var keyVals = new List <AudioSourceSetting>
            {
                new AudioSourceSetting {
                    Name = "key1", Value = "val1"
                },
                new AudioSourceSetting {
                    Name = "key2", Value = "val2"
                }
            };
            var settings = new AudioSourceSettings {
                AudioSourceName = name, Settings = keyVals
            };

            var vm = new AudioSourceSettingsCollectionViewModel(_audioSourceMock.Object, settings, _messageBus.Object);

            Assert.Empty(vm.SettingsList);
            Assert.Equal(name, vm.AudioSourceName);
        }
コード例 #6
0
 public AudioObject(AudioObject ao, GameObject go)
 {
     name     = ao.name;
     settings = ao.settings;
     AddAudioSource(go);
     InitAudioSourceFromSettings();
 }
コード例 #7
0
ファイル: SFXPool.cs プロジェクト: paulkelly/GGJ2016
 public void Init()
 {
     _defaultAudioSettings = gameObject.AddComponent<AudioSourceSettings>();
     for (int i = 0; i < DefaultSize; i++)
     {
         AddAudioSource();
     }
 }
コード例 #8
0
        public override void OnEnable()
        {
            base.OnEnable();

            _sourceSettings = target as AudioSourceSettings;
            _clipProperty = serializedObject.FindProperty("Clip");

            InitializeTextures();
        }
コード例 #9
0
    /// <summary>
    /// Plays the given clip as a 2D sound with default audio settings
    /// Use this when you need to quickly play a 2D sound without the need of custom settings
    /// </summary>
    /// <param name="clip"></param>
    /// <param name="volume"></param>
    /// <param name="pitch">change the pitch level</param>
    public void Play2DSound(AudioClip clip, float volume, float pitch = 1f)
    {
        AudioSourceSettings settings = new AudioSourceSettings()
        {
            volume = volume,
            pitch  = pitch
        };

        PlaySound(clip, settings);
    }
コード例 #10
0
    /// <summary>
    /// Plays the given clip as 2D sound which means it will be heard equally from all speakers
    /// If audio is set to loop it will only stop when either:
    /// <see cref="PauseSounds"/> or <see cref="StopAll"/> are called
    /// or when you stop it through the returned AudioSource
    /// </summary>
    /// <param name="clipName">The name of the clip to play</param>
    /// <param name="volume">Modify the default volume of the clip</param>
    /// <param name="pitch">Modify the pitch of the sound</param>
    /// <returns></returns>
    public AudioSource Play2DSound(AudioClipName clipName, float volume = 1f, float pitch = 1f)
    {
        AudioClipInfo       info     = GetClipInfo(clipName);
        AudioSourceSettings settings = info.Settings;

        // Override settings
        settings.volume = volume * SoundFxVolume;
        settings.pitch  = pitch;

        SingleShotAudio fx = CreateNewSoundSource();

        fx.Play2DSound(info.Clip, settings);

        return(fx.Source);
    }
コード例 #11
0
        public void AudioSourceSettingsUpdated_AudioSourceIsUpdatedInPriority()
        {
            var setting1 = new AudioSourceSettingAttribute("test1")
            {
                Priority = 10
            };
            var setting2 = new AudioSourceSettingAttribute("test2")
            {
                Priority = 5
            };
            var setting3 = new AudioSourceSettingAttribute("test3")
            {
                Priority = 20
            };

            _audioSourceMock.SetupAllProperties();
            _audioSourceMock.SetupGet(m => m.Settings).Returns(new List <AudioSourceSettingAttribute> {
                setting1, setting2, setting3
            });

            var settings = new AudioSourceSettings
            {
                Settings = new List <AudioSourceSetting>
                {
                    new AudioSourceSetting {
                        Name = setting1.Name
                    },
                    new AudioSourceSetting {
                        Name = setting2.Name
                    },
                    new AudioSourceSetting {
                        Name = setting3.Name
                    },
                }
            };

            var s = new MockSequence();

            _audioSourceMock.InSequence(s).SetupSet(source => source[It.Is <string>(x => x == setting3.Name)] = null);
            _audioSourceMock.InSequence(s).SetupSet(source => source[It.Is <string>(x => x == setting1.Name)] = null);
            _audioSourceMock.InSequence(s).SetupSet(source => source[It.Is <string>(x => x == setting2.Name)] = null);

            var vm = new AudioSourceSettingsCollectionViewModel(_audioSourceMock.Object, settings, _messageBus.Object);

            _audioSourceMock.VerifySet(source => source[setting3.Name] = null);
            _audioSourceMock.VerifySet(source => source[setting1.Name] = null);
            _audioSourceMock.VerifySet(source => source[setting2.Name] = null);
        }
コード例 #12
0
        private async Task AddNewAudioSource(IInternalAudioSource audioSource)
        {
            var menuItem = new DeskBandMenuAction(audioSource.Name);

            menuItem.Clicked += AudioSourceMenuItemOnClicked;

            lock (_audiosourceListLock)
            {
                _audioSourceContextMenuItems.Add(menuItem);
                RefreshContextMenu();
            }

            var settings = audioSource.Settings;

            if (settings.Count > 0)
            {
                // check if the settings were saved previously and reuse them
                var matchingSetting = _audioSourceSettingsModel.FirstOrDefault(s => s.AudioSourceName == audioSource.Name);
                if (matchingSetting != null)
                {
                    var viewModel = new AudioSourceSettingsVM(matchingSetting, audioSource);

                    // the collection was created on the ui thread
                    await _uiDispatcher.InvokeAsync(() => _settingsWindowVm.AudioSourceSettingsVM.Add(viewModel));
                }
                else
                {
                    var newSettingsModel = new AudioSourceSettings {
                        AudioSourceName = audioSource.Name
                    };
                    _audioSourceSettingsModel.Add(newSettingsModel);
                    var newViewModel = new AudioSourceSettingsVM(newSettingsModel, audioSource);
                    await _uiDispatcher.InvokeAsync(() => _settingsWindowVm.AudioSourceSettingsVM.Add(newViewModel));
                }
            }

            // If user was using this audio source last, then automatically activate it
            var savedAudioSourceName = _appSettings.AudioSource;

            if (savedAudioSourceName == null || audioSource.Name != savedAudioSourceName)
            {
                return;
            }

            await HandleAudioSourceContextMenuItemClick(menuItem).ConfigureAwait(false);
        }
コード例 #13
0
ファイル: MainControl.cs プロジェクト: break7533/audio-band
        private async Task <SettingsWindowVM> SetupViewModels()
        {
            var albumArt               = new AlbumArtVM(_albumArtModel, _trackModel);
            var albumArtPopup          = new AlbumArtPopupVM(_albumArtPopupModel, _trackModel);
            var audioBand              = new AudioBandVM(_audioBandModel);
            var customLabels           = new CustomLabelsVM(_customLabelsModel, this);
            var nextButton             = new NextButtonVM(_nextButtonModel);
            var playPauseButton        = new PlayPauseButtonVM(_playPauseButtonModel, _trackModel);
            var prevButton             = new PreviousButtonVM(_previousButtonModel);
            var progressBar            = new ProgressBarVM(_progressBarModel, _trackModel);
            var allAudioSourceSettings = new List <AudioSourceSettingsVM>();

            foreach (var audioSource in _audioSourceLoader.AudioSources)
            {
                var matchingSetting = _audioSourceSettingsModel.FirstOrDefault(s => s.AudioSourceName == audioSource.Name);
                if (matchingSetting != null)
                {
                    allAudioSourceSettings.Add(new AudioSourceSettingsVM(matchingSetting, audioSource));
                }
                else
                {
                    var newSettings = new AudioSourceSettings {
                        AudioSourceName = audioSource.Name
                    };
                    _audioSourceSettingsModel.Add(newSettings);
                    allAudioSourceSettings.Add(new AudioSourceSettingsVM(newSettings, audioSource));
                }
            }

            await _uiDispatcher.InvokeAsync(() => InitializeBindingSources(albumArtPopup, albumArt, audioBand, nextButton, playPauseButton, prevButton, progressBar));

            return(new SettingsWindowVM
            {
                AlbumArtPopupVM = albumArtPopup,
                ProgressBarVM = progressBar,
                PreviousButtonVM = prevButton,
                PlayPauseButtonVM = playPauseButton,
                NextButtonVM = nextButton,
                AudioBandVM = audioBand,
                AboutVm = new AboutVM(),
                AlbumArtVM = albumArt,
                CustomLabelsVM = customLabels,
                AudioSourceSettingsVM = allAudioSourceSettings
            });
        }
コード例 #14
0
        //A single function to unify play and play at point, under the hood
        private ArdenAudioInstance Play_Internal(AudioSourceSettings settings, float volume, MixerGroup group, bool looped, bool playAtPoint, Vector3 location)
        {
            if (audioAssets == null)
            {
                return(null);
            }

            if (audioAssets.Count == 0)
            {
                return(null);
            }

            ArdenAudioPlayListInstance instance = new ArdenAudioPlayListInstance(this, settings);

            instance.Init(volume, group, looped, playAtPoint, location);

            return(instance);
        }
コード例 #15
0
        public void MatchingSettingsShouldCreateVmsInOrder()
        {
            var    setting1 = "Setting1";
            var    setting2 = "setting2";
            object val1     = "val1";
            object val2     = 2;

            _audioSourceMock.SetupGet(s => s.Settings).Returns(new List <AudioSourceSettingAttribute>
            {
                new AudioSourceSettingAttribute(setting1),
                new AudioSourceSettingAttribute(setting2),
            });

            _audioSourceMock.SetupGet(s => s[It.Is <string>(x => x == setting1)]).Returns(val1);
            _audioSourceMock.SetupGet(s => s[It.Is <string>(x => x == setting2)]).Returns(val2);
            _audioSourceMock.Setup(s => s.GetSettingType(It.Is <string>(x => x == setting1))).Returns(typeof(string));
            _audioSourceMock.Setup(s => s.GetSettingType(It.Is <string>(x => x == setting2))).Returns(typeof(int));

            var settingModels = new List <AudioSourceSetting>
            {
                new AudioSourceSetting {
                    Name = setting1, Value = val1
                },
                new AudioSourceSetting {
                    Name = setting2, Value = val2
                }
            };

            var settings = new AudioSourceSettings {
                Settings = settingModels
            };
            var vm = new AudioSourceSettingsCollectionViewModel(_audioSourceMock.Object, settings, _messageBus.Object);

            Assert.AreEqual(settingModels.Count, vm.SettingsList.Count);
            Assert.AreEqual(settingModels[0].Name, vm.SettingsList[0].Name);
            Assert.AreEqual(settingModels[1].Name, vm.SettingsList[1].Name);

            Assert.AreEqual(settingModels[0].Value, vm.SettingsList[0].Value);
            Assert.AreEqual(settingModels[1].Value, vm.SettingsList[1].Value);
        }
コード例 #16
0
        public void NoMatchingSettings()
        {
            _audioSourceMock.SetupGet(s => s.Settings).Returns(new List <AudioSourceSettingAttribute>());

            var name    = "test";
            var keyVals = new List <AudioSourceSetting>
            {
                new AudioSourceSetting {
                    Name = "key1", Value = "val1"
                },
                new AudioSourceSetting {
                    Name = "key2", Value = "val2"
                }
            };
            var settings = new AudioSourceSettings {
                AudioSourceName = name, Settings = keyVals
            };

            var vm = new AudioSourceSettingsVM(settings, _audioSourceMock.Object);

            Assert.AreEqual(0, vm.Settings.Count);
            Assert.AreEqual(name, vm.AudioSourceName);
        }
コード例 #17
0
ファイル: SFXPool.cs プロジェクト: paulkelly/GGJ2016
        public void PlaySound(AudioClip clip, Vector3 position, AudioSourceSettings settings)
        {
            SetAudioSettings(settings);

            PlaySound(clip, position);
        }
コード例 #18
0
 public override ArdenAudioInstance Play(AudioSourceSettings settings, float volume = 1, MixerGroup group = MixerGroup.sfx, bool looped = false)
 {
     return(Play_Internal(settings, volume, group, looped, false, new Vector3()));
 }
コード例 #19
0
ファイル: SFXView.cs プロジェクト: paulkelly/GGJ2016
 protected override void OnAwake()
 {
     AudioSettings = GetComponent<AudioSourceSettings>();
 }
コード例 #20
0
    public static bool ChangeAudioSourceSettings(AudioSource source, AudioSourceSettings settings)
    {
        bool flag = false;

        if (source.bypassEffects != settings.m_bypassEffects)
        {
            source.bypassEffects = settings.m_bypassEffects;
            flag = true;
        }
        if (source.loop != settings.m_loop)
        {
            source.loop = settings.m_loop;
            flag        = true;
        }
        if (source.priority != settings.m_priority)
        {
            source.priority = settings.m_priority;
            flag            = true;
        }
        if (!object.Equals(source.volume, settings.m_volume))
        {
            source.volume = settings.m_volume;
            flag          = true;
        }
        if (!object.Equals(source.pitch, settings.m_pitch))
        {
            source.pitch = settings.m_pitch;
            flag         = true;
        }
        if (!object.Equals(source.panStereo, settings.m_stereoPan))
        {
            source.panStereo = settings.m_stereoPan;
            flag             = true;
        }
        if (!object.Equals(source.spatialBlend, settings.m_spatialBlend))
        {
            source.spatialBlend = settings.m_spatialBlend;
            flag = true;
        }
        if (!object.Equals(source.reverbZoneMix, settings.m_reverbZoneMix))
        {
            source.reverbZoneMix = settings.m_reverbZoneMix;
            flag = true;
        }
        if (source.rolloffMode != settings.m_rolloffMode)
        {
            source.rolloffMode = settings.m_rolloffMode;
            flag = true;
        }
        if (!object.Equals(source.dopplerLevel, settings.m_dopplerLevel))
        {
            source.dopplerLevel = settings.m_dopplerLevel;
            flag = true;
        }
        if (!object.Equals(source.minDistance, settings.m_minDistance))
        {
            source.minDistance = settings.m_minDistance;
            flag = true;
        }
        if (!object.Equals(source.maxDistance, settings.m_maxDistance))
        {
            source.maxDistance = settings.m_maxDistance;
            flag = true;
        }
        if (!object.Equals(source.spread, settings.m_spread))
        {
            source.spread = settings.m_spread;
            flag          = true;
        }
        return(flag);
    }
コード例 #21
0
 public override ArdenAudioInstance PlayAtPoint(AudioSourceSettings settings, Vector3 location, float volume = 1, MixerGroup group = MixerGroup.sfx, bool looped = false)
 {
     return(Play_Internal(settings, volume, group, looped, true, location));
 }
コード例 #22
0
        /// <summary>
        /// Initializes a new instance of the <see cref="AudioSourceSettingsCollectionViewModel"/> class.
        /// </summary>
        /// <param name="audioSource">The audiosource that these settings belong to.</param>
        /// <param name="settingsModel">The settings model.</param>
        /// <param name="messageBus">The message bus.</param>
        /// <param name="appSettings">The app settings.</param>
        public AudioSourceSettingsCollectionViewModel(IInternalAudioSource audioSource, AudioSourceSettings settingsModel, IMessageBus messageBus, IAppSettings appSettings)
        {
            _audioSource = audioSource;
            _messageBus  = messageBus;
            _appSettings = appSettings;
            SettingsList = new ObservableCollection <AudioSourceSettingKeyValue>(CreateKeyValuePairs(audioSource, settingsModel));
            _audioSource.SettingChanged += AudioSourceOnSettingChanged;

            foreach (var audioSourceSettingKeyValue in SettingsList)
            {
                audioSourceSettingKeyValue.PropertyChanged += AudioSourceSettingKeyValueOnPropertyChanged;
            }

            UseMessageBus(messageBus);
        }
コード例 #23
0
 /// <summary>
 /// Forces the given clip to have a spatial blend of 0 to make it 2D
 /// This overrides which ever values the given settings has
 /// Note:
 ///     You could set the settings to spatialBlend 0 by default and use the PlaySoundAt,
 ///     be it will always play as 2D, but what this allows you to do is play any sound
 ///     as a 2D sound even if it was configured to be 3D
 /// </summary>
 /// <param name="clip"></param>
 /// <param name="settings"></param>
 public void Play2DSound(AudioClip clip, AudioSourceSettings settings)
 {
     PlaySound(clip, settings);
 }
コード例 #24
0
 /// <summary>
 /// Plays the given clip at the given position by moving the AudioSource parent object to that location
 /// </summary>
 /// <param name="clip"></param>
 /// <param name="position"></param>
 /// <param name="settings"></param>
 public void PlaySoundAt(AudioClip clip, Vector3 position, AudioSourceSettings settings)
 {
     transform.position = position;
     PlaySound(clip, settings);
 }
コード例 #25
0
 public ArdenAudioPlayListInstance(ArdenAudioAsset asset, AudioSourceSettings settings) : base(asset, settings)
 {
 }
コード例 #26
0
        private List <AudioSourceSettingKeyValue> CreateKeyValuePairs(IInternalAudioSource source, AudioSourceSettings existingSettings)
        {
            // Using a list instead of a dictionary is simple and good enough for now. There are no observable dictionaries either.
            var keyPairViewModels = new List <AudioSourceSettingKeyValue>();
            var settingAttributes = source.Settings;

            foreach (var settingAttribute in settingAttributes)
            {
                var matchingSetting = existingSettings.Settings.FirstOrDefault(s => s.Name == settingAttribute.Name);
                if (matchingSetting != null)
                {
                    keyPairViewModels.Add(new AudioSourceSettingKeyValue(source, matchingSetting, settingAttribute));
                }
                else
                {
                    var name            = settingAttribute.Name;
                    var defaultValue    = source[name];
                    var newSettingModel = new AudioSourceSetting {
                        Name = name, Value = defaultValue
                    };
                    existingSettings.Settings.Add(newSettingModel);

                    keyPairViewModels.Add(new AudioSourceSettingKeyValue(source, newSettingModel, settingAttribute));
                }
            }

            // apply changes in priority
            foreach (var keyPair in keyPairViewModels.OrderByDescending(vm => vm.Priority))
            {
                keyPair.PropagateSettingToAudioSource();
            }

            return(keyPairViewModels);
        }
コード例 #27
0
ファイル: SFXPool.cs プロジェクト: paulkelly/GGJ2016
        public void SetAudioSettings(AudioSourceSettings settings)
        {
            if (settings == null)
            {
                settings = _pool.DefaultAudioSourceSettings;
            }

            Volume = settings.Volume;
            TheAudioSource.rolloffMode = settings.VolumeRolloff;
            TheAudioSource.bypassEffects = settings.BypassEffects;
            TheAudioSource.loop = settings.Loop;
            TheAudioSource.outputAudioMixerGroup = settings.MixerGroup;
            TheAudioSource.dopplerLevel = settings.DopplerLevel;
            TheAudioSource.maxDistance = settings.MaxDistance;
            TheAudioSource.minDistance = settings.MinDistance;
            TheAudioSource.priority = settings.Priority;
            TheAudioSource.mute = settings.Mute;
            TheAudioSource.reverbZoneMix = settings.ReverbZoneMix;
            TheAudioSource.spatialBlend = settings.SpatialBlend;
            TheAudioSource.spread = settings.Spread;
            TheAudioSource.panStereo = settings.StereoPan;
            TheAudioSource.pitch = 1;
        }