/// <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); } }
/// <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); }