Exemplo n.º 1
0
        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();
            }
        }
Exemplo n.º 2
0
        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);
        }
Exemplo n.º 3
0
        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);
            }
        }