예제 #1
0
        /// <summary>
        /// из UserSettings взять схему событие - имя файла
        /// и инициализировать SoundSettings
        /// </summary>
        public void ApplySoundScheme()
        {
            silent = UserSettings.Instance.Mute;

            try
            {
                // добить недостающие события/звуки в настройках
                var setsLacks = false;
                foreach (var pair in defaultSounds)
                {
                    var evt = pair.Key;
                    if (UserSettings.Instance.VocalEvents.Any(e => e.EventName == evt))
                    {
                        continue;
                    }
                    setsLacks = true;
                    UserSettings.Instance.VocalEvents.Add(new VocalizedEventFileName
                    {
                        EventName = evt,
                        FileName  = pair.Value
                    });
                }
                if (setsLacks)
                {
                    UserSettings.Instance.SaveSettings();
                }

                var dic = new Dictionary <VocalizedEvent, byte[]>();
                foreach (var sets in UserSettings.Instance.VocalEvents)
                {
                    byte[] bytes;
                    soundFileContent.TryGetValue(sets.FileName, out bytes);
                    if (bytes != null)
                    {
                        dic.Add(sets.EventName, bytes);
                    }
                }
                SoundSettings.UpdateEventSound(dic);
            }
            catch (Exception ex)
            {
                Logger.Error("ApplySoundScheme() error", ex);
            }
        }
예제 #2
0
        /// <summary>
        /// асинхронно запустить проигрывание соотв. звука
        /// </summary>
        public void PlayEvent(VocalizedEvent evt)
        {
            if (silent)
            {
                return;
            }
            // проверить количество потоков
            if (soundStreamsCount >= soundStreamsMax)
            {
                return;
            }

            // получить содержимое звукового файла
            var bytes = SoundSettings.GetEventSound(evt);

            if (bytes == null || bytes.Length == 0)
            {
                return;
            }

            // проиграть в отдельном потоке
            ThreadPool.QueueUserWorkItem(PlaySoundSync, bytes);
        }