private void Update(object sender, NAudio.Wave.WaveInEventArgs args) { this.Volume = recordingDevice.AudioMeterInformation.MasterPeakValue; lock (this.maxAudioDataLevels) { short[] values = new short[args.Buffer.Length / 2]; for (int i = 0; i < args.BytesRecorded; i += 2) { values[i / 2] = (short)((args.Buffer[i + 1] << 8) | args.Buffer[i]); } this.unanalyzedValues.AddRange(values); if (this.unanalyzedValues.Count >= fftSize) { this.GenerateAudioData(); this.unanalyzedValues.Clear(); } foreach (var pair in this.config.levelDriverPresets) { if (pair.Value.Source != LevelDriverSource.Audio) { continue; } AudioLevelDriverPreset preset = (AudioLevelDriverPreset)pair.Value; double filteredMax = AudioInput.GetFilteredMax( preset.FilterRangeStart, preset.FilterRangeEnd, this.AudioData ); if (this.maxAudioDataLevels.ContainsKey(preset.Name)) { this.maxAudioDataLevels[preset.Name] = Math.Max( this.maxAudioDataLevels[preset.Name], filteredMax ); } else { this.maxAudioDataLevels[preset.Name] = filteredMax; } } this.UpdateEnergyHistory(); } }
public double LevelForChannel(int channelIndex) { double?midiLevel = this.config.beatBroadcaster.CurrentMidiLevelDriverValueForChannel( channelIndex ); if (midiLevel.HasValue) { return(midiLevel.Value); } if (!this.config.channelToAudioLevelDriverPreset.ContainsKey(channelIndex)) { return(this.Volume); } string audioPreset = this.config.channelToAudioLevelDriverPreset[channelIndex]; if ( audioPreset == null || !this.config.levelDriverPresets.ContainsKey(audioPreset) || !(this.config.levelDriverPresets[audioPreset] is AudioLevelDriverPreset) ) { return(0.0); } AudioLevelDriverPreset preset = (AudioLevelDriverPreset)this.config.levelDriverPresets[audioPreset]; if (preset.FilterRangeStart == 0.0 && preset.FilterRangeEnd == 1.0) { return(this.Volume); } var maxLevel = this.maxAudioDataLevels.ContainsKey(preset.Name) ? this.maxAudioDataLevels[preset.Name] : 1.0; return(AudioInput.GetFilteredMax( preset.FilterRangeStart, preset.FilterRangeEnd, this.AudioData ) / maxLevel); }
private void LevelDriverSaveClicked(object sender, RoutedEventArgs e) { if (this.levelDriverSource.SelectedIndex == -1) { this.levelDriverSource.Focus(); return; } var newName = this.levelDriverName.Text.Trim(); if (String.IsNullOrEmpty(newName) || this.MidiPresetNameExists(newName)) { this.levelDriverName.Text = ""; this.levelDriverName.Focus(); return; } string editing = this.currentlyEditingLevelDriverPreset; ILevelDriverPreset newPreset; if (this.levelDriverSource.SelectedIndex == 0) { double startValue, endValue; try { startValue = Convert.ToDouble(this.levelDriverAudioFilterRangeStart.Text.Trim()); } catch (Exception) { this.levelDriverAudioFilterRangeStart.Text = ""; this.levelDriverAudioFilterRangeStart.Focus(); return; } try { endValue = Convert.ToDouble(this.levelDriverAudioFilterRangeEnd.Text.Trim()); } catch (Exception) { this.levelDriverAudioFilterRangeEnd.Text = ""; this.levelDriverAudioFilterRangeEnd.Focus(); return; } if (endValue < startValue) { this.levelDriverAudioFilterRangeEnd.Text = ""; this.levelDriverAudioFilterRangeEnd.Focus(); return; } newPreset = new AudioLevelDriverPreset() { Name = newName, FilterRangeStart = startValue, FilterRangeEnd = endValue, }; } else if (this.levelDriverSource.SelectedIndex == 1) { int attack, decay, release; double peak, sustain; try { attack = Convert.ToInt32(this.levelDriverMidiAttack.Text.Trim()); } catch (Exception) { this.levelDriverMidiAttack.Text = ""; this.levelDriverMidiAttack.Focus(); return; } try { peak = Convert.ToDouble(this.levelDriverMidiPeak.Text.Trim()); } catch (Exception) { this.levelDriverMidiPeak.Text = ""; this.levelDriverMidiPeak.Focus(); return; } try { decay = Convert.ToInt32(this.levelDriverMidiDecay.Text.Trim()); } catch (Exception) { this.levelDriverMidiDecay.Text = ""; this.levelDriverMidiDecay.Focus(); return; } try { sustain = Convert.ToDouble(this.levelDriverMidiSustain.Text.Trim()); } catch (Exception) { this.levelDriverMidiSustain.Text = ""; this.levelDriverMidiSustain.Focus(); return; } try { release = Convert.ToInt32(this.levelDriverMidiRelease.Text.Trim()); } catch (Exception) { this.levelDriverMidiRelease.Text = ""; this.levelDriverMidiRelease.Focus(); return; } newPreset = new MidiLevelDriverPreset() { Name = newName, AttackTime = attack, PeakLevel = peak, DecayTime = decay, SustainLevel = sustain, ReleaseTime = release, }; } else { return; } var newLevelDriverPresets = new Dictionary <string, ILevelDriverPreset>(this.config.levelDriverPresets); newLevelDriverPresets[newName] = newPreset; if (editing != null && newName != editing) { newLevelDriverPresets.Remove(editing); } this.config.levelDriverPresets = newLevelDriverPresets; if (this.levelDriverSource.SelectedIndex == 0) { this.levelDriverAudioFilterRangeStart.Text = ""; this.levelDriverAudioFilterRangeEnd.Text = ""; } else if (this.levelDriverSource.SelectedIndex == 1) { this.levelDriverMidiAttack.Text = ""; this.levelDriverMidiPeak.Text = ""; this.levelDriverMidiDecay.Text = ""; this.levelDriverMidiSustain.Text = ""; this.levelDriverMidiRelease.Text = ""; } this.levelDriverSource.SelectedIndex = -1; this.levelDriverSource.IsEnabled = true; this.levelDriverName.Text = ""; var entry = new LevelDriverPresetEntry() { Name = newName, Source = newPreset.Source, }; if (editing != null) { this.levelDriverPresetList.Items[this.levelDriverPresetList.SelectedIndex] = entry; } else { this.levelDriverPresetList.Items.Add(entry); } if (editing != null && newName != editing) { var currentDict = this.GetChannelToPresetDictionary(newPreset.Source); Dictionary <int, string> nextDict = new Dictionary <int, string>(currentDict); bool changed = false; foreach (var pair in currentDict) { if (pair.Value == editing) { nextDict[pair.Key] = newName; changed = true; } } if (changed) { this.SetChannelToPresetDictionary(newPreset.Source, nextDict); } } var comboBoxesToUpdate = this.channelComboBoxes[newPreset.Source]; for (int i = 0; i < comboBoxesToUpdate.Length; i++) { ComboBox box = comboBoxesToUpdate[i]; this.ResetItemsOfChannelComboBox(box, i, newPreset.Source); } }