private void InitSoundTouch()
        {
            // 初始化 soundTouch
            _soundTouch = new SoundTouchApi();
            _soundTouch.CreateInstance();

            _soundTouch.SetSampleRate(_waveChannel.WaveFormat.SampleRate);
            _soundTouch.SetChannels(_waveChannel.WaveFormat.Channels);
            _soundTouch.SetTempoChange(0f);
            _soundTouch.SetPitchSemiTones(0f);
            _soundTouch.SetRateChange(0f);

            _soundTouch.SetTempo(TempoValue);
            TimeStretchProfile = new TimeStretchProfile
            {
                AAFilterLength = 128,
                Description    = "demo1",
                Id             = "demo",
                Overlap        = 20,
                SeekWindow     = 80,
                Sequence       = 20,
                UseAAFilter    = true
            };

            _soundTouch.SetSetting(SoundTouchApi.SoundTouchSettings.SETTING_USE_AA_FILTER, TimeStretchProfile.UseAAFilter ? 1 : 0);
            _soundTouch.SetSetting(SoundTouchApi.SoundTouchSettings.SETTING_AA_FILTER_LENGTH, TimeStretchProfile.AAFilterLength);
            _soundTouch.SetSetting(SoundTouchApi.SoundTouchSettings.SETTING_OVERLAP_MS, TimeStretchProfile.Overlap);
            _soundTouch.SetSetting(SoundTouchApi.SoundTouchSettings.SETTING_SEQUENCE_MS, TimeStretchProfile.Sequence);
            _soundTouch.SetSetting(SoundTouchApi.SoundTouchSettings.SETTING_SEEKWINDOW_MS, TimeStretchProfile.SeekWindow);

            _soundTouch.SetSetting(SoundTouchApi.SoundTouchSettings.SETTING_SEQUENCE_MS, 0);
        }
        private void InitTimeStretchProfile()
        {
            TimeStretchProfile = new TimeStretchProfile();
            TimeStretchProfile.AAFilterLength = 128;
            TimeStretchProfile.Description    = "Optimum for Music and Speech";
            TimeStretchProfile.Id             = "Practice#_Optimum";
            TimeStretchProfile.Overlap        = 20;
            TimeStretchProfile.SeekWindow     = 80;
            TimeStretchProfile.Sequence       = 20;
            TimeStretchProfile.UseAAFilter    = true;

            soundTouch.SetSetting(SoundTouchAPI.SoundTouchSettings.SETTING_USE_AA_FILTER, timeStretchProfile.UseAAFilter ? 1 : 0);
            soundTouch.SetSetting(SoundTouchAPI.SoundTouchSettings.SETTING_AA_FILTER_LENGTH, timeStretchProfile.AAFilterLength);
            soundTouch.SetSetting(SoundTouchAPI.SoundTouchSettings.SETTING_OVERLAP_MS, timeStretchProfile.Overlap);
            soundTouch.SetSetting(SoundTouchAPI.SoundTouchSettings.SETTING_SEQUENCE_MS, timeStretchProfile.Sequence);
            soundTouch.SetSetting(SoundTouchAPI.SoundTouchSettings.SETTING_SEEKWINDOW_MS, timeStretchProfile.SeekWindow);
        }
Esempio n. 3
0
        private void InitTimeStretchProfile()
        {
            TimeStretchProfile = new TimeStretchProfile();
            TimeStretchProfile.AAFilterLength = 128;
            TimeStretchProfile.Description = "Optimum for Music and Speech";
            TimeStretchProfile.Id = "Practice#_Optimum";
            TimeStretchProfile.Overlap = 20;
            TimeStretchProfile.SeekWindow = 80;
            TimeStretchProfile.Sequence = 20;
            TimeStretchProfile.UseAAFilter = true;

            soundTouch.SetSetting(SoundTouchAPI.SoundTouchSettings.SETTING_USE_AA_FILTER, timeStretchProfile.UseAAFilter ? 1 : 0);
            soundTouch.SetSetting(SoundTouchAPI.SoundTouchSettings.SETTING_AA_FILTER_LENGTH, timeStretchProfile.AAFilterLength);
            soundTouch.SetSetting(SoundTouchAPI.SoundTouchSettings.SETTING_OVERLAP_MS, timeStretchProfile.Overlap);
            soundTouch.SetSetting(SoundTouchAPI.SoundTouchSettings.SETTING_SEQUENCE_MS, timeStretchProfile.Sequence);
            soundTouch.SetSetting(SoundTouchAPI.SoundTouchSettings.SETTING_SEEKWINDOW_MS, timeStretchProfile.SeekWindow);
        }
Esempio n. 4
0
        /// <summary>
        /// Loads the presets from the preset bank file
        /// </summary>
        /// <returns>
        /// The active preset Id
        /// </returns>
        public string LoadPresetsBank(Dictionary <string, PresetControl> presetControls)
        {
            if (!File.Exists(m_presetsBankFilename))
            {
                return(null);
            }

            try
            {
                // Loads the presets bank XML file
                XmlDocument doc = new XmlDocument();
                doc.Load(m_presetsBankFilename);

                XmlElement  root            = doc.DocumentElement;
                XmlNode     presetsBankNode = root.SelectSingleNode("/" + PresetBankFile.XML_Node_Root + "/" + PresetBankFile.XML_Node_PresetsBank);
                string      activePresetId  = presetsBankNode.Attributes[PresetBankFile.XML_Attr_ActivePreset].Value;
                XmlNodeList presetNodes     = presetsBankNode.SelectNodes(PresetBankFile.XML_Node_Preset);
                // Load all preset nodes
                foreach (XmlNode presetNode in presetNodes)
                {
                    string presetId = presetNode.Attributes[PresetBankFile.XML_Attr_Id].Value;
                    // Load XML values into PresetData object
                    PresetData presetData = presetControls[presetId].PresetData;
                    presetData.Tempo  = ReadXMLAttributeFloat(presetNode, PresetBankFile.XML_Attr_Tempo, PresetData.DefaultTempo);
                    presetData.Pitch  = ReadXMLAttributeFloat(presetNode, PresetBankFile.XML_Attr_Pitch, PresetData.DefaultPitch);
                    presetData.Volume = ReadXMLAttributeFloat(presetNode, PresetBankFile.XML_Attr_Volume, Properties.Settings.Default.DefaultVolume);

                    presetData.LoEqValue  = ReadXMLAttributeFloat(presetNode, PresetBankFile.XML_Attr_LoEq, PresetData.DefaultLoEq);
                    presetData.MedEqValue = ReadXMLAttributeFloat(presetNode, PresetBankFile.XML_Attr_MedEq, PresetData.DefaultMedEq);
                    presetData.HiEqValue  = ReadXMLAttributeFloat(presetNode, PresetBankFile.XML_Attr_HiEq, PresetData.DefaultHiEq);

                    presetData.CurrentPlayTime = TimeSpan.Parse(presetNode.Attributes[PresetBankFile.XML_Attr_PlayTime].Value);
                    presetData.StartMarker     = TimeSpan.Parse(presetNode.Attributes[PresetBankFile.XML_Attr_LoopStartMarker].Value);
                    presetData.EndMarker       = TimeSpan.Parse(presetNode.Attributes[PresetBankFile.XML_Attr_LoopEndMarker].Value);
                    presetData.Loop            = Convert.ToBoolean(presetNode.Attributes[PresetBankFile.XML_Attr_IsLoop].Value);
                    presetData.Cue             = TimeSpan.Parse(presetNode.Attributes[PresetBankFile.XML_Attr_Cue].Value);
                    presetData.Description     = Convert.ToString(presetNode.Attributes[PresetBankFile.XML_Attr_Description].Value);

                    TimeStretchProfile timeStretchProfile = TimeStretchProfileManager.DefaultProfile;
                    if (presetNode.Attributes[PresetBankFile.XML_Attr_TimeStretchProfileId] != null)
                    {
                        string timeStretchProfileId = Convert.ToString(presetNode.Attributes[PresetBankFile.XML_Attr_TimeStretchProfileId].Value);
                        if (!TimeStretchProfileManager.TimeStretchProfiles.TryGetValue(timeStretchProfileId, out timeStretchProfile))
                        {
                            // Handle a mismatched profile by using the default profile
                            timeStretchProfile = TimeStretchProfileManager.DefaultProfile;
                        }
                    }
                    presetData.TimeStretchProfile = timeStretchProfile;

                    if (presetNode.Attributes[PresetBankFile.XML_Attr_RemoveVocals] != null)
                    {
                        presetData.RemoveVocals = Convert.ToBoolean(presetNode.Attributes[PresetBankFile.XML_Attr_RemoveVocals].Value);
                    }

                    PresetControl presetControl = presetControls[presetId];
                    presetControl.PresetDescription = presetData.Description;
                }

                return(activePresetId);
            }
            catch (Exception ex)
            {
                m_logger.ErrorException("Failed loading Presets Bank for file: " + m_currentAudioFilename, ex);
                MessageBox.Show(null, "Failed loading Presets Bank for file: " + m_currentAudioFilename, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }

            return(null);
        }