public override void RevertChanges() { Filter.RevertChanges(); Phaser.RevertChanges(); Flanger.RevertChanges(); Synth.RevertChanges(); LoFi.RevertChanges(); RingModulator.RevertChanges(); GuitarToBass.RevertChanges(); SlowGear.RevertChanges(); Transpose.RevertChanges(); PitchBend.RevertChanges(); Robot.RevertChanges(); VocalDist.RevertChanges(); Dynamics.RevertChanges(); Eq.RevertChanges(); Isolator.RevertChanges(); Octave.RevertChanges(); Pan.RevertChanges(); Tremolo.RevertChanges(); Slicer.RevertChanges(); Delay.RevertChanges(); PanningDelay.RevertChanges(); TapeEcho.RevertChanges(); GranularDelay.RevertChanges(); Roll.RevertChanges(); Chorus.RevertChanges(); Reverb.RevertChanges(); }
/// <inheritdoc /> public void Reset() { Effect1.Reset(); Effect2.Reset(); Delay.Reset(); Reverb.Reset(); }
private void ReadFile(object sender, EventArgs e) { echo = new Echo(keyboard); chorus = new Chorus(keyboard); gargle = new Gargle(keyboard); reverb = new Reverb(keyboard); OpenFileDialog fileDialog = new OpenFileDialog(); fileDialog.Filter = "WAV files (*.wav)|*.wav"; fileDialog.FilterIndex = 2; fileDialog.RestoreDirectory = true; if (fileDialog.ShowDialog() == System.Windows.Forms.DialogResult.OK) { for (int i = 0; i < keyboard.AllKeys.Length; ++i) { keyboard.AllKeys[i].KeySound = new ASynt.Player.Sound(fileDialog.FileName, true); } keyboard.keys[0].SetFrequency = (44100 * 261) / 440; keyboard.keys[1].SetFrequency = (44100 * 293) / 440; keyboard.keys[2].SetFrequency = (44100 * 329) / 440; keyboard.keys[3].SetFrequency = (44100 * 349) / 440; keyboard.keys[4].SetFrequency = (44100 * 391) / 440; keyboard.keys[5].SetFrequency = (44100 * 440) / 440; keyboard.keys[6].SetFrequency = (44100 * 493) / 440; keyboard.smallKeys[0].SetFrequency = (44100 * 277) / 440; keyboard.smallKeys[1].SetFrequency = (44100 * 311) / 440; keyboard.smallKeys[2].SetFrequency = (44100 * 369) / 440; keyboard.smallKeys[3].SetFrequency = (44100 * 415) / 440; keyboard.smallKeys[4].SetFrequency = (44100 * 466) / 440; } }
private Reverb CreateReverbFrame(string id3v24FrameID, string id3v23FrameID, string id3v22FrameID, string property, Action validator) { Reverb reverb = new Reverb(); Bind(id3v24FrameID, id3v23FrameID, id3v22FrameID, reverb, "TODO", property, validator); return(reverb); }
/// <summary> /// Enables the reverb effect /// </summary> private void EnableReverb() { if (this.ReverbVoice == null) { #if DEBUG var reverbEffect = new Reverb(this.device, true); #else var reverbEffect = new Reverb(this.device); #endif using (reverbEffect) { var masterDetails = this.MasteringVoice.VoiceDetails; var sendFlags = this.UseReverbFilter ? SubmixVoiceFlags.UseFilter : SubmixVoiceFlags.None; this.ReverbVoice = new SubmixVoice( this.device, masterDetails.InputChannelCount, masterDetails.InputSampleRate, sendFlags, 0); this.ReverbVoice.SetEffectChain(new EffectDescriptor(reverbEffect, masterDetails.InputChannelCount) { InitialState = true, }); } } this.ReverbVoice.EnableEffect(0); }
public MyCueBank(XAudio2 audioEngine, MyObjectBuilder_CueDefinitions cues) { m_audioEngine = audioEngine; if (cues.Cues.Length > 0) { InitTransitionCues(); InitMusicCategories(); m_cues = new Dictionary <int, MyObjectBuilder_CueDefinition>(cues.Cues.Length); InitCues(cues); InitCategories(); InitWaveBank(); InitVoicePools(); #if DEBUG ValidateCues(); #endif //DEBUG InitNonLoopableCuesLimitRemoveHelper(); Reverb reverb = new Reverb(); m_effectDescriptor = new EffectDescriptor(reverb); } }
public void Dispose() { //#if DEBUG // if (m_voicePools != null) // { // foreach (MySourceVoicePool voicePool in m_voicePools.Values) // { // MySandboxGame.Log.WriteLine(voicePool.ToString()); // } // } //#endif //DEBUG if (m_waveBank != null) { m_waveBank.Dispose(); } if (m_reverb != null) { m_reverb.Dispose(); } m_reverb = null; foreach (var vp in m_voicePools) { // eventual stopping of playing vp.Value.StopAll(); } foreach (var vp in m_voicePools) { vp.Value.Dispose(); } m_voicePools.Clear(); m_cues.Clear(); }
private void AddReverb_Click(object sender, RoutedEventArgs e) { if (selectedLine?.Line != null) { var effect = new Reverb(); selectedLine.Line.AddEffect(effect); } }
public ReverbUI(Reverb effect) { Effect = effect; InitializeComponent(); Volume.Value = effect.Volume; Delay.Value = effect.Delay; Feedback.Value = effect.Feedback; Pan.Value = effect.Pan; }
private void soundGenerator(object sender, EventArgs e) { echo = new Echo(keyboard); chorus = new Chorus(keyboard); gargle = new Gargle(keyboard); reverb = new Reverb(keyboard); SoundGenerator sg = new SoundGenerator(keyboard); sg.ShowDialog(); }
public void SfxSetReverb(Reverb reverb) { PRESET preset = new PRESET(); REVERB_PROPERTIES rp = preset.OFF(); switch (reverb) { case Reverb.Room: rp = preset.STONEROOM(); break; case Reverb.Cave: rp = preset.CAVE(); break; case Reverb.Arena: rp = preset.ARENA(); break; case Reverb.Forest: rp = preset.FOREST(); break; case Reverb.Mountains: rp = preset.MOUNTAINS(); break; case Reverb.Underwater: rp = preset.UNDERWATER(); break; case Reverb.Dungeon: rp = preset.STONECORRIDOR(); break; case Reverb.CHall: rp = preset.CONCERTHALL(); break; case Reverb.Quarry: rp = preset.QUARRY(); break; case Reverb.Plain: rp = preset.PLAIN(); break; } fSystem.setReverbAmbientProperties(ref rp); fSystem.setReverbProperties(ref rp); }
/// <inheritdoc /> public void CopyFrom(IPatch patch) { if (patch is Patch p) { Effect1.CopyFrom(p.Effect1); Effect2.CopyFrom(p.Effect2); Delay.CopyFrom(p.Delay); Reverb.CopyFrom(p.Reverb); } else { throw new NotSupportedException("Copying from that type is not supported"); } }
/// <summary> /// Copy data from sysex dumps /// </summary> public void CopyFrom(Dictionary <Effect, SysExMessage> effects) { // Skipping 12 bytes from front because it's header and address offset // Skipping 2 bytes from end because it's checksum and sysex footer var effect1Bytes = effects[Effect.Effect1].GetBytes().Skip(12).ToArray(); var effect2Bytes = effects[Effect.Effect2].GetBytes().Skip(12).ToArray(); var delayBytes = effects[Effect.Delay].GetBytes().Skip(12).ToArray(); var reverbBytes = effects[Effect.Reverb].GetBytes().Skip(12).ToArray(); Effect1.CopyFrom(effect1Bytes.Take(effect1Bytes.Length - 2).ToArray()); Effect2.CopyFrom(effect2Bytes.Take(effect2Bytes.Length - 2).ToArray()); Delay.CopyFrom(delayBytes.Take(delayBytes.Length - 2).ToArray()); Reverb.CopyFrom(reverbBytes.Take(reverbBytes.Length - 2).ToArray()); }
public DeckViewModel() { _progressBarTimer = new Timer(100); _progressBarTimer.Elapsed += (s, e) => { if (!IsDragging) { OnPropertyChanged(nameof(Position)); } }; Player.MediaEnded += (s, e) => { Player.Stop(); Position = Player.Reverse ? Player.Duration.TotalSeconds : 0; _progressBarTimer.Stop(); }; Reverb.ApplyOn(Player); Distortion.ApplyOn(Player); Echo.ApplyOn(Player); AutoWah.ApplyOn(Player); Rotate.ApplyOn(Player); #region Commands PlayCommand = new DelegateCommand(Play); StopCommand = new DelegateCommand(Stop); SoftDistortionCommand = new DelegateCommand(Distortion.Soft); MediumDistortionCommand = new DelegateCommand(Distortion.Medium); HardDistortionCommand = new DelegateCommand(Distortion.Hard); VeryHardDistortionCommand = new DelegateCommand(Distortion.VeryHard); ManyEchoesCommand = new DelegateCommand(Echo.ManyEchoes); ReverseEchoesCommand = new DelegateCommand(Echo.ReverseEchoes); RoboticEchoesCommand = new DelegateCommand(Echo.RoboticVoice); SmallEchoesCommand = new DelegateCommand(Echo.Small); SlowAutoWahCommand = new DelegateCommand(AutoWah.Slow); FastAutoWahCommand = new DelegateCommand(AutoWah.Fast); HiFastAutoWahCommand = new DelegateCommand(AutoWah.HiFast); ResetPitchCommand = new DelegateCommand(() => Player.Pitch = 0); ResetFrequencyCommand = new DelegateCommand(() => Player.Frequency = 44100); ResetPanCommand = new DelegateCommand(() => Player.Balance = 0); ResetTempoCommand = new DelegateCommand(() => Player.Tempo = 0); #endregion }
public MainForm() { InitializeComponent(); keyboard = new Keyboard.Keyboard(this, new Point(20, 20)); echo = new Echo(keyboard); chorus = new Chorus(keyboard); gargle = new Gargle(keyboard); reverb = new Reverb(keyboard); List <int> l = new List <int>(); for (int i = 0; i < 360; ++i) { l.Add((int)(Math.Sin(Math.PI * i / 180.0) * 10000)); } }
public PlayForm() { InitializeComponent(); // Initalize XAudio2 xaudio2 = new XAudio2(XAudio2Flags.None, ProcessorSpecifier.DefaultProcessor); masteringVoice = new MasteringVoice(xaudio2); var waveFormat = new WaveFormat(44100, 32, 2); sourceVoice = new SourceVoice(xaudio2, waveFormat); int bufferSize = waveFormat.ConvertLatencyToByteSize(60000); DataStream dataStream = new DataStream(bufferSize, true, true); // Prepare the initial sound to modulate int numberOfSamples = bufferSize / waveFormat.BlockAlign; for (int i = 0; i < numberOfSamples; i++) { float value = (float)(Math.Cos(2 * Math.PI * 220.0 * i / waveFormat.SampleRate) * 0.5); dataStream.Write(value); dataStream.Write(value); } dataStream.Position = 0; audioBuffer = new AudioBuffer { Stream = dataStream, Flags = BufferFlags.EndOfStream, AudioBytes = bufferSize, LoopBegin = 0, LoopLength = numberOfSamples, LoopCount = AudioBuffer.LoopInfinite }; // Set the effect on the source ModulatorEffect = new ModulatorEffect(); modulatorDescriptor = new EffectDescriptor(ModulatorEffect); reverb = new Reverb(); effectDescriptor = new EffectDescriptor(reverb); //sourceVoice.SetEffectChain(modulatorDescriptor, effectDescriptor); sourceVoice.SetEffectChain(modulatorDescriptor); //sourceVoice.EnableEffect(0); this.Closed += new EventHandler(PlayForm_Closed); }
public MyCueBank(XAudio2 audioEngine, ListReader <MySoundData> cues) { m_audioEngine = audioEngine; if (cues.Count > 0) { m_cues = new Dictionary <MyCueId, MySoundData>(cues.Count, MyCueId.Comparer); InitTransitionCues(); InitCues(cues); InitCategories(); InitWaveBank(); InitVoicePools(); m_reverb = new Reverb(); m_effectDescriptor = new EffectDescriptor(m_reverb); } }
public PlayForm() { InitializeComponent(); // Initalize XAudio2 xaudio2 = new XAudio2(XAudio2Flags.None, ProcessorSpecifier.DefaultProcessor); masteringVoice = new MasteringVoice(xaudio2); var waveFormat = new WaveFormat(44100, 32, 2); sourceVoice = new SourceVoice(xaudio2, waveFormat); int bufferSize = waveFormat.ConvertLatencyToByteSize(60000); DataStream dataStream = new DataStream(bufferSize, true, true); // Prepare the initial sound to modulate int numberOfSamples = bufferSize / waveFormat.BlockAlign; for (int i = 0; i < numberOfSamples; i++) { float value = (float)(Math.Cos(2 * Math.PI * 220.0 * i / waveFormat.SampleRate) * 0.5); dataStream.Write(value); dataStream.Write(value); } dataStream.Position = 0; audioBuffer = new AudioBuffer { Stream = dataStream, Flags = BufferFlags.EndOfStream, AudioBytes = bufferSize, LoopBegin = 0, LoopLength = numberOfSamples, LoopCount = AudioBuffer.LoopInfinite }; // Set the effect on the source ModulatorEffect = new ModulatorEffect(); modulatorDescriptor = new EffectDescriptor(ModulatorEffect); reverb = new Reverb(xaudio2); effectDescriptor = new EffectDescriptor(reverb); //sourceVoice.SetEffectChain(modulatorDescriptor, effectDescriptor); sourceVoice.SetEffectChain(modulatorDescriptor); //sourceVoice.EnableEffect(0); this.Closed += new EventHandler(PlayForm_Closed); }
/// <summary> /// SharpDX XAudio2 sample. Plays a generated sound with some reverb. /// </summary> static void Main(string[] args) { var xaudio2 = new XAudio2(); var masteringVoice = new MasteringVoice(xaudio2); var waveFormat = new WaveFormat(44100, 32, 2); var sourceVoice = new SourceVoice(xaudio2, waveFormat); int bufferSize = waveFormat.ConvertLatencyToByteSize(60000); var dataStream = new DataStream(bufferSize, true, true); int numberOfSamples = bufferSize / waveFormat.BlockAlign; for (int i = 0; i < numberOfSamples; i++) { // cos(2 * PI * (220 + 4 * cos(2 * PI * 10 * t)) * t) * 0.5 double vibrato = Math.Cos(2 * Math.PI * 10.0 * i / waveFormat.SampleRate); float value = (float)(Math.Cos(2 * Math.PI * (220.0 + 4.0 * vibrato) * i / waveFormat.SampleRate) * 0.5); dataStream.Write(value); dataStream.Write(value); } dataStream.Position = 0; var audioBuffer = new AudioBuffer { Stream = dataStream, Flags = BufferFlags.EndOfStream, AudioBytes = bufferSize }; var reverb = new Reverb(xaudio2); var effectDescriptor = new EffectDescriptor(reverb); sourceVoice.SetEffectChain(effectDescriptor); sourceVoice.EnableEffect(0); sourceVoice.SubmitSourceBuffer(audioBuffer, null); sourceVoice.Start(); Console.WriteLine("Play sound"); for (int i = 0; i < 60; i++) { Console.Write("."); Console.Out.Flush(); Thread.Sleep(1000); } }
private void DisposeCore() { if (x3DAudio != null) { x3DAudio = null; } if (ReverbVoice != null) { ReverbVoice.DestroyVoice(); ReverbVoice.Dispose(); ReverbVoice = null; reverb.Dispose(); reverb = null; } IsReverbEffectEnabled = false; if (MasteringVoice != null) { MasteringVoice.DestroyVoice(); MasteringVoice.Dispose(); MasteringVoice = null; } if (masteringLimiter != null) { masteringLimiter.Dispose(); masteringLimiter = null; } IsMasteringLimiterEnabled = false; if (Device != null) { Device.StopEngine(); Device.Dispose(); Device = null; } }
/// <summary> /// SharpDX XAudio2 sample. Plays a generated sound with some reverb. /// </summary> static void Main(string[] args) { var xaudio2 = new XAudio2(); var masteringVoice = new MasteringVoice(xaudio2); var waveFormat = new WaveFormat(44100, 32, 2); var sourceVoice = new SourceVoice(xaudio2, waveFormat); int bufferSize = waveFormat.ConvertLatencyToByteSize(60000); var dataStream = new DataStream(bufferSize, true, true); int numberOfSamples = bufferSize/waveFormat.BlockAlign; for (int i = 0; i < numberOfSamples; i++) { double vibrato = Math.Cos(2 * Math.PI * 10.0 * i / waveFormat.SampleRate); float value = (float) (Math.Cos(2*Math.PI*(220.0 + 4.0*vibrato)*i/waveFormat.SampleRate)*0.5); dataStream.Write(value); dataStream.Write(value); } dataStream.Position = 0; var audioBuffer = new AudioBuffer {Stream = dataStream, Flags = BufferFlags.EndOfStream, AudioBytes = bufferSize}; var reverb = new Reverb(); var effectDescriptor = new EffectDescriptor(reverb); sourceVoice.SetEffectChain(effectDescriptor); sourceVoice.EnableEffect(0); sourceVoice.SubmitSourceBuffer(audioBuffer, null); sourceVoice.Start(); Console.WriteLine("Play sound"); for(int i = 0; i < 60; i++) { Console.Write("."); Console.Out.Flush(); Thread.Sleep(1000); } }
private void pianoSound(object sender, EventArgs e) { echo = new Echo(keyboard); chorus = new Chorus(keyboard); gargle = new Gargle(keyboard); reverb = new Reverb(keyboard); for (int i = 0; i < keyboard.keys.Length; ++i) { int l = i; //dodawanie do literki if ('c' + l > 'g') { l -= 7; } keyboard.keys[i].KeySound = new ASynt.Player.Sound(@"Piano\" + (char)('c' + l), false); } keyboard.smallKeys[0].KeySound = new ASynt.Player.Sound(@"Piano\c#", false); keyboard.smallKeys[1].KeySound = new ASynt.Player.Sound(@"Piano\d#", false); keyboard.smallKeys[2].KeySound = new ASynt.Player.Sound(@"Piano\f#", false); keyboard.smallKeys[3].KeySound = new ASynt.Player.Sound(@"Piano\g#", false); keyboard.smallKeys[4].KeySound = new ASynt.Player.Sound(@"Piano\a#", false); }
public override void ApplyChanges <T>(T model) { if (model is SettingsMemoryFxModel memoryFx) { Filter.ApplyChanges(memoryFx); Phaser.ApplyChanges(memoryFx); Flanger.ApplyChanges(memoryFx); Synth.ApplyChanges(memoryFx); LoFi.ApplyChanges(memoryFx); RingModulator.ApplyChanges(memoryFx); GuitarToBass.ApplyChanges(memoryFx); SlowGear.ApplyChanges(memoryFx); Transpose.ApplyChanges(memoryFx); PitchBend.ApplyChanges(memoryFx); Robot.ApplyChanges(memoryFx); VocalDist.ApplyChanges(memoryFx); Dynamics.ApplyChanges(memoryFx); Eq.ApplyChanges(memoryFx); Isolator.ApplyChanges(memoryFx); Octave.ApplyChanges(memoryFx); Pan.ApplyChanges(memoryFx); Tremolo.ApplyChanges(memoryFx); Slicer.ApplyChanges(memoryFx); Delay.ApplyChanges(memoryFx); PanningDelay.ApplyChanges(memoryFx); TapeEcho.ApplyChanges(memoryFx); GranularDelay.ApplyChanges(memoryFx); Roll.ApplyChanges(memoryFx); Chorus.ApplyChanges(memoryFx); Reverb.ApplyChanges(memoryFx); } else { throw new ArgumentException("Model must be of type SettingsMemoryFxModel."); } }
private void CreateReverbSubmixVoice() { try { VoiceDetails masterDetails = MasteringVoice.VoiceDetails; SubmixVoiceFlags sendFlags = IsReverbFilterEnabled ? SubmixVoiceFlags.UseFilter : SubmixVoiceFlags.None; ReverbVoice = new SubmixVoice(Device, 1, masterDetails.InputSampleRate, sendFlags, 0); } catch (SharpDXException ex) { throw new AudioException("Error creating reverb submix voice.", ex); } try { reverb = new Reverb(); ReverbVoice.SetEffectChain(new EffectDescriptor(reverb, 1)); ReverbVoice.SetEffectParameters(0, reverbParameters); } catch (SharpDXException ex) { throw new AudioException("Error setting reverb effect.", ex); } }
/// <summary> /// Initializes a new instance of the <see cref="FrameContainer"/> class. /// </summary> internal FrameContainer() { _frameBinder = new FrameBinder(this); _unknownFrames = new List <UnknownFrame>(); _id3v24SingleOccurrenceFrames = new Dictionary <string, IFrame>(); _id3v24MultipleOccurrenceFrames = new Dictionary <string, IBindingList>(); _id3v23SingleOccurrenceFrames = new Dictionary <string, IFrame>(); _id3v23MultipleOccurrenceFrames = new Dictionary <string, IBindingList>(); _id3v22SingleOccurrenceFrames = new Dictionary <string, IFrame>(); _id3v22MultipleOccurrenceFrames = new Dictionary <string, IBindingList>(); _id3v24FrameAliases = new Dictionary <string, string>(); _id3v23FrameAliases = new Dictionary <string, string>(); // Binding lists m_AttachedPictureList = new AttachedPictureBindingList(); m_UserDefinedUrlList = new UserDefinedUrlBindingList(); m_CommentsList = new CommentsBindingList(); m_iTunesCommentsList = new CommentsBindingList(); m_CommercialInfoUrlList = new UrlBindingList("WCOM", "WCOM", "WCM"); m_ArtistUrlList = new UrlBindingList("WOAR", "WOAR", "WAR"); m_UserDefinedTextList = new UserDefinedTextBindingList(); m_RelativeVolumeAdjustmentList = new RelativeVolumeAdjustmentBindingList(); m_UnsynchronizedLyricsList = new UnsynchronizedLyricsBindingList(); m_GeneralEncapsulatedObjectList = new GeneralEncapsulatedObjectBindingList(); m_UniqueFileIdentifierList = new UniqueFileIdentifierBindingList(); m_PrivateFrameList = new PrivateFrameBindingList(); m_PopularimeterList = new PopularimeterBindingList(); m_TermsOfUseList = new TermsOfUseBindingList(); m_LinkedInformationList = new LinkedInformationBindingList(); m_CommercialInfoList = new CommercialBindingList(); m_EncryptionMethodList = new EncryptionMethodBindingList(); m_GroupIdentificationList = new GroupIdentificationBindingList(); m_SignatureList = new SignatureBindingList(); m_AudioEncryptionList = new AudioEncryptionBindingList(); m_EncryptedMetaFrameList = new EncryptedMetaFrameBindingList(); m_SynchronizedLyricsList = new SynchronizedTextBindingList(); m_EqualizationList = new EqualizationListBindingList(); m_AudioTextList = new AudioTextBindingList(); // Add binding lists to multiple occurence frames dictionary AddMultipleOccurrenceFrame("APIC", "APIC", "PIC", m_AttachedPictureList); AddMultipleOccurrenceFrame("WXXX", "WXXX", "WXX", m_UserDefinedUrlList); AddMultipleOccurrenceFrame("COMM", "COMM", "COM", m_CommentsList); AddMultipleOccurrenceFrame(null, null, null, m_iTunesCommentsList); AddMultipleOccurrenceFrame("WCOM", "WCOM", "WCM", m_CommercialInfoUrlList); //"CommercialInfoUrl", new MethodInvoker(ValidateCommercialInfoUrl)); // TODO AddMultipleOccurrenceFrame("WOAR", "WOAR", "WAR", m_ArtistUrlList); AddMultipleOccurrenceFrame("TXXX", "TXXX", "TXX", m_UserDefinedTextList); AddMultipleOccurrenceFrame("RVA2", "RVAD", "RVA", m_RelativeVolumeAdjustmentList); AddMultipleOccurrenceFrame("USLT", "USLT", "ULT", m_UnsynchronizedLyricsList); AddMultipleOccurrenceFrame("GEOB", "GEOB", "GEO", m_GeneralEncapsulatedObjectList); AddMultipleOccurrenceFrame("UFID", "UFID", "UFI", m_UniqueFileIdentifierList); AddMultipleOccurrenceFrame("PRIV", "PRIV", null, m_PrivateFrameList); AddMultipleOccurrenceFrame("POPM", "POPM", "POP", m_PopularimeterList); AddMultipleOccurrenceFrame("USER", "USER", null, m_TermsOfUseList); AddMultipleOccurrenceFrame("LINK", "LINK", "LNK", m_LinkedInformationList); //"ArtistUrl", new MethodInvoker(ValidateArtistUrl)); // TODO AddMultipleOccurrenceFrame("AENC", "AENC", "CRA", m_AudioEncryptionList); AddMultipleOccurrenceFrame(null, null, "CRM", m_EncryptedMetaFrameList); // replaced in ID3v2.3 and ID3v2.4 with encryptable frames AddMultipleOccurrenceFrame("SYLT", "SYLT", "SLT", m_SynchronizedLyricsList); AddMultipleOccurrenceFrame("EQU2", "EQUA", "EQU", m_EqualizationList); // todo: not a multi-occur frame in 2.2/2.3 AddMultipleOccurrenceFrame("COMR", "COMR", null, m_CommercialInfoList); // todo: not a multi-occur in 2.3 AddMultipleOccurrenceFrame("ENCR", "ENCR", null, m_EncryptionMethodList); AddMultipleOccurrenceFrame("GRID", "GRID", null, m_GroupIdentificationList); AddMultipleOccurrenceFrame("SIGN", "SIGN", null, m_SignatureList); // todo: not in ID3v2.3 AddMultipleOccurrenceFrame("ATXT", "ATXT", null, m_AudioTextList); // Text frames m_Title = CreateTextFrame("TIT2", "TIT2", "TT2", "Title", null); m_Album = CreateTextFrame("TALB", "TALB", "TAL", "Album", null); m_EncodedByWho = CreateTextFrame("TENC", "TENC", "TEN", "EncodedByWho", null); m_Artist = CreateTextFrame("TPE1", "TPE1", "TP1", "Artist", null); m_AlbumArtist = CreateTextFrame("TPE2", "TPE2", "TP2", "AlbumArtist", null); // Note: TYER is not a valid frame in ID3v2.4, but many ID3v2.4 tags contain this frame anyway. // It's here to allow reading, but should not be written back (use TDRL instead). m_Year = CreateTextFrame("TYER", "TYER", "TYE", "Year", ValidateYear); // Note: TDAT is not a valid frame in ID3v2.4, but many ID3v2.4 tags contain this frame anyway. // It's here to allow reading, but should not be written back (use TDRC instead). m_DateRecorded = CreateTextFrame("TDAT", "TDAT", "TDA", "DateRecorded", ValidateDateRecorded); // Note: TIME is not a valid frame in ID3v2.4, but many ID3v2.4 tags contain this frame anyway. // It's here to allow reading, but should not be written back (use TDRC instead). m_TimeRecorded = CreateTextFrame("TIME", "TIME", "TIM", "TimeRecorded", ValidateTimeRecorded); m_Genre = CreateTextFrame("TCON", "TCON", "TCO", "Genre", null); m_Composer = CreateTextFrame("TCOM", "TCOM", "TCM", "Composer", null); m_OriginalArtist = CreateTextFrame("TOPE", "TOPE", "TOA", "OriginalArtist", null); m_Copyright = CreateTextFrame("TCOP", "TCOP", "TCR", "Copyright", ValidateCopyright); m_RemixedBy = CreateTextFrame("TPE4", "TPE4", "TP4", "RemixedBy", null); m_Publisher = CreateTextFrame("TPUB", "TPUB", "TPB", "Publisher", null); m_InternetRadioStationName = CreateTextFrame("TRSN", "TRSN", null, "InternetRadioStationName", null); m_InternetRadioStationOwner = CreateTextFrame("TRSO", "TRSO", null, "InternetRadioStationOwner", null); //m_Accompaniment = CreateTextFrame("TPE2", "TPE2", "TP2", "Accompaniment", null); m_Conductor = CreateTextFrame("TPE3", "TPE3", "TP3", "Conductor", null); m_Lyricist = CreateTextFrame("TEXT", "TEXT", "TXT", "Lyricist", null); m_OriginalLyricist = CreateTextFrame("TOLY", "TOLY", "TOL", "OriginalLyricist", null); m_TrackNumber = CreateTextFrame("TRCK", "TRCK", "TRK", "TrackNumber", ValidateTrackNumber); m_BPM = CreateTextFrame("TBPM", "TBPM", "TBP", "BPM", ValidateBPM); m_FileType = CreateTextFrame("TFLT", "TFLT", "TFT", "FileType", null); m_DiscNumber = CreateTextFrame("TPOS", "TPOS", "TPA", "DiscNumber", ValidateDiscNumber); m_EncoderSettings = CreateTextFrame("TSSE", "TSSE", "TSS", "EncoderSettings", null); m_ISRC = CreateTextFrame("TSRC", "TSRC", "TRC", "ISRC", ValidateISRC); // Note: TCMP/TCP is an unofficial frame. Used by iTunes and other taggers. m_IsPartOfCompilation = CreateTextFrame("TCMP", "TCMP", "TCP", "IsPartOfCompilation", null); // TDRL is not technically supported in ID3v2.3 m_ReleaseTimestamp = CreateTextFrame("TDRL", "TDRL", null, "ReleaseTimestamp", ValidateReleaseTimestamp); // TDRC is not technically supported in ID3v2.3 m_RecordingTimestamp = CreateTextFrame("TDRC", "TDRC", null, "RecordingTimestamp", ValidateRecordingTimestamp); // TDOR is not technically supported in ID3v2.3 m_OriginalReleaseTimestamp = CreateTextFrame("TDOR", "TDOR", null, "OriginalReleaseTimestamp", null /*todo:new MethodInvoker(ValidateOriginalReleaseTimestamp)*/); m_PlaylistDelayMilliseconds = CreateTextFrame("TDLY", "TDLY", "TDY", "PlaylistDelayMilliseconds", null); m_InitialKey = CreateTextFrame("TKEY", "TKEY", "TKE", "InitialKey", null /*TODO: new MethodInvoker(ValidateInitialKey)*/); // TDEN is not technically supported in ID3v2.3 m_EncodingTimestamp = CreateTextFrame("TDEN", "TDEN", null, "EncodingTimestamp", null /*TODO*/); // TDTG is not technically supported in ID3v2.3 m_TaggingTimestamp = CreateTextFrame("TDTG", "TDTG", null, "TaggingTimestamp", null /*TODO*/); m_ContentGroup = CreateTextFrame("TIT1", "TIT1", "TT1", "ContentGroup", null); // TMOO is not technically supported in ID3v2.3 m_Mood = CreateTextFrame("TMOO", "TMOO", null, "Mood", null); m_LengthMilliseconds = CreateTextFrame("TLEN", "TLEN", "TLE", "LengthMilliseconds", null); m_MediaType = CreateTextFrame("TMED", "TMED", "TMT", "MediaType", null); // TODO: technically not supported in ID3v2.4, but probably written by some impl. anyway m_FileSizeExcludingTag = CreateTextFrame(null, "TSIZ", "TSI", "FileSizeExcludingTag", null); // Not technically in ID3v2.4 m_OriginalReleaseYear = CreateTextFrame("TORY", "TORY", "TOR", "OriginalReleaseYear", null /*TODO*/); m_OriginalSourceTitle = CreateTextFrame("TOAL", "TOAL", "TOT", "OriginalSourceTitle", null); m_OriginalFileName = CreateTextFrame("TOFN", "TOFN", "TOF", "OriginalFileName", null); m_FileOwnerName = CreateTextFrame("TOWN", "TOWN", null, "FileOwnerName", null); // Not technically in ID3v2.4 m_RecordingDates = CreateTextFrame("TRDA", "TRDA", "TRD", "RecordingDates", null /*TODO*/); m_Subtitle = CreateTextFrame("TIT3", "TIT3", "TT3", "Subtitle", null); // Technically only supported in ID3v2.4, but some ID3v2.3 implementations use this frame m_AlbumSortOrder = CreateTextFrame("TSOA", "TSOA", null, "AlbumSortOrder", null); // Technically only supported in ID3v2.4, but some ID3v2.3 implementations use this frame m_ArtistSortOrder = CreateTextFrame("TSOP", "TSOP", null, "ArtistSortOrder", null); // Technically only supported in ID3v2.4, but some ID3v2.3 implementations use this frame m_TitleSortOrder = CreateTextFrame("TSOT", "TSOT", null, "TitleSortOrder", null); // Technically only supported in ID3v2.4, but some ID3v2.3 implementations use this frame m_ProducedNotice = CreateTextFrame("TPRO", "TPRO", null, "ProducedNotice", null /*todo - same as copyright validation*/); // Technically only supported in ID3v2.4, but some ID3v2.3 implementations use this frame m_SetSubtitle = CreateTextFrame("TSST", "TSST", null, "SetSubtitle", null); m_PodcastSeriesCategory = CreateTextFrame("TCAT", "TCAT", null, "SeriesCategory", null); m_PodcastEpisodeDescription = CreateTextFrame("TDES", "TDES", null, "EpisodeDescription", null); m_PodcastEpisodeUrl = CreateTextFrame("TGID", "TGID", null, "EpisodeUrl", null); m_PodcastFeedUrl = CreateTextFrame("WFED", "WFED", null, "PodcastFeedUrl", null); m_PositionSynchronization = CreatePositionSynchronizationFrame("POSS", "POSS", null, "PositionSynchronization", null); m_Ownership = CreateOwnershipFrame("OWNE", "OWNE", null, "Ownership", null); m_RecommendedBufferSize = CreateRecommendedBufferSizeFrame("RBUF", "RBUF", "BUF", "RecommendedBufferSize", null /*todo*/); m_InvolvedPersonList = CreateInvolvedPersonListFrame("TIPL", "IPLS", "IPL", "InvolvedPersonList", null /*TODO - needs validation?*/); m_Languages = CreateLanguageFrame("TLAN", "TLAN", "TLA", "Languages", null); m_MusicCDIdentifier = CreateMusicCDIdentifierFrame("MCDI", "MCDI", "MCI", "MusicCDIdentifier", null /*TODO?*/); m_EventTiming = CreateEventTimingFrame("ETCO", "ETCO", "ETC", "EventTiming", null /*TODO - needs validation?*/); m_MpegLookupTable = CreateMpegLookupTableFrame("MLLT", "MLLT", "MLL", "MpegLookupTable", null); m_Reverb = CreateReverbFrame("RVRB", "RVRB", "REV", "Reverb", null); m_SynchronizedTempoCodes = CreateSynchronizedTempoCodesFrame("SYTC", "SYTC", "STC", "SynchronizedTempoCodeList", null); m_SeekNextTag = CreateSeekFrame("SEEK", "SEEK", null, "SeekNextTag", null); // Technically only supported in ID3v2.4, but some ID3v2.3 implementations use this frame m_MusicianCreditsList = CreateMusicianCreditsListFrame("TMCL", "TMCL", null, "MusicianCreditsList", null); m_AudioSeekPointIndex = CreateAudioSeekPointIndexFrame("ASPI", "ASPI", null, "AudioSeekPointIndex", null); m_PlayCount = CreateFrame <PlayCount>("PCNT", "PCNT", "CNT", "PlayCount"); m_IsPodcast = CreateFrame <Podcast>("PCST", "PCST", "PCS", "Podcast"); // TODO: TYER->TDRL, TDAT,TIME->TDRC (in setters, not here) // URL frames m_CopyrightUrl = CreateUrlFrame("WCOP", "WCOP", "WCP", "CopyrightUrl", ValidateCopyrightUrl); m_AudioFileUrl = CreateUrlFrame("WOAF", "WOAF", "WAF", "AudioFileUrl", ValidateAudioFileUrl); m_AudioSourceUrl = CreateUrlFrame("WOAS", "WOAS", "WAS", "AudioSourceUrl", ValidateAudioSourceUrl); m_InternetRadioStationUrl = CreateUrlFrame("WORS", "WORS", null, "InternetRadioStationUrl", ValidateInternetRadioStationUrl); m_PaymentUrl = CreateUrlFrame("WPAY", "WPAY", null, "PaymentUrl", ValidatePaymentUrl); m_PublisherUrl = CreateUrlFrame("WPUB", "WPUB", "WPB", "PublisherUrl", ValidatePublisherUrl); // Frame aliases - handles incorrectly named frames // ID3v2.4 (Bad frame, Good frame) _id3v24FrameAliases.Add("RVAD", "RVA2"); _id3v24FrameAliases.Add("IPLS", "TIPL"); _id3v24FrameAliases.Add("EQUA", "EQU2"); // ID3v2.3 (Bad frame, Good frame) _id3v23FrameAliases.Add("RVA2", "RVAD"); _id3v23FrameAliases.Add("TIPL", "IPLS"); _id3v23FrameAliases.Add("EQU2", "EQUA"); }
private void StartEngine() { if (m_audioEngine != null) { DisposeVoices(); m_audioEngine.CriticalError -= m_audioEngine_CriticalError; m_audioEngine.Dispose(); } // Init/reinit engine m_audioEngine = new XAudio2(XAudio2Version.Version27); // A way to disable SharpDX callbacks //var meth = m_audioEngine.GetType().GetMethod("UnregisterForCallbacks_", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance); //var callbacks = m_audioEngine.GetType().GetField("engineShadowPtr", System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic); //meth.Invoke((object)m_audioEngine, new object[] { callbacks.GetValue(m_audioEngine) }); m_audioEngine.CriticalError += m_audioEngine_CriticalError; m_lastDeviceCount = m_audioEngine.DeviceCount; m_deviceNumber = 0; while (true) //find first non com device { try { m_deviceDetails = m_audioEngine.GetDeviceDetails(m_deviceNumber); if (m_deviceDetails.Role == DeviceRole.DefaultCommunicationsDevice) { m_deviceNumber++; if (m_deviceNumber == m_audioEngine.DeviceCount) { m_deviceNumber--; break; } } else break; } catch(Exception e) { MyLog.Default.WriteLine(string.Format("Failed to get device details.\n\tdevice no.: {0}\n\tdevice count: {1}",m_deviceNumber, m_audioEngine.DeviceCount),LoggingOptions.AUDIO); MyLog.Default.WriteLine(e.ToString()); m_deviceNumber = 0; m_deviceDetails = m_audioEngine.GetDeviceDetails(m_deviceNumber); break; } } m_masterVoice = new MasteringVoice(m_audioEngine, XAudio2.DefaultChannels, XAudio2.DefaultSampleRate, m_deviceNumber); if (m_useVolumeLimiter) { var limiter = new SharpDX.XAPO.Fx.MasteringLimiter(m_audioEngine); var param = limiter.Parameter; param.Loudness = 0; limiter.Parameter = param; //TODO: this throws exception in 3.0.1 version var effectDescriptor = new EffectDescriptor(limiter); m_masterVoice.SetEffectChain(effectDescriptor); m_soundLimiterReady = true; m_masterVoice.DisableEffect(0); //m_masterVoice.EnableEffect(0); //limiter.Dispose(); } m_calculateFlags = CalculateFlags.Matrix | CalculateFlags.Doppler; if ((m_deviceDetails.OutputFormat.ChannelMask & Speakers.LowFrequency) != 0) { m_calculateFlags |= CalculateFlags.RedirectToLfe; } var masterDetails = m_masterVoice.VoiceDetails; m_gameAudioVoice = new SubmixVoice(m_audioEngine, masterDetails.InputChannelCount, masterDetails.InputSampleRate); m_musicAudioVoice = new SubmixVoice(m_audioEngine, masterDetails.InputChannelCount, masterDetails.InputSampleRate); m_hudAudioVoice = new SubmixVoice(m_audioEngine, masterDetails.InputChannelCount, masterDetails.InputSampleRate); m_gameAudioVoiceDesc = new VoiceSendDescriptor[] { new VoiceSendDescriptor(m_gameAudioVoice) }; m_musicAudioVoiceDesc = new VoiceSendDescriptor[] { new VoiceSendDescriptor(m_musicAudioVoice) }; m_hudAudioVoiceDesc = new VoiceSendDescriptor[] { new VoiceSendDescriptor(m_hudAudioVoice) }; if (m_mute) { // keep sounds muted m_gameAudioVoice.SetVolume(0); m_musicAudioVoice.SetVolume(0); } m_reverb = new Reverb(m_audioEngine); m_gameAudioVoice.SetEffectChain(new EffectDescriptor(m_reverb, masterDetails.InputChannelCount)); m_gameAudioVoice.DisableEffect(0); }
public RESULT createReverb (ref Reverb reverb) { RESULT result = RESULT.OK; IntPtr reverbraw = new IntPtr(); Reverb reverbnew = null; try { result = FMOD_System_CreateReverb(systemraw, ref reverbraw); } catch { result = RESULT.ERR_INVALID_PARAM; } if (result != RESULT.OK) { return result; } if (reverb == null) { reverbnew = new Reverb(); reverbnew.setRaw(reverbraw); reverb = reverbnew; } else { reverb.setRaw(reverbraw); } return result; }
private static void ParseXml() { XElement xe = XElement.Load(@"C:\Users\perivar.nerseth\OneDrive\Audio\Presets\Izotope\Nectar 2\Presets\TEST.xml"); // Compressors: // Dynamics 1 and Dynamics 2 // Bypass // Attack // Gain // Mode // RMS Detection // Ratio // Release // Threshold var comp = new Compressors(); var xComp = (from a in xe.Element("Compressors").Elements("Param") //where a.Attribute("ElementID").Value.Equals("Dynamics 1") select new CompressorsParam { ElementID = a.Attribute("ElementID").Value, ParamID = a.Attribute("ParamID").Value, Value = NumberUtils.DecimalTryParseOrZero(a.Attribute("Value").Value) }).ToList(); comp.CompressorsParam = xComp; // Delay var del = new Delay(); var xDel = (from a in xe.Element("Delay").Elements("Param") select new DelayParam { ElementID = a.Attribute("ElementID").Value, ParamID = a.Attribute("ParamID").Value, Value = NumberUtils.DecimalTryParseOrZero(a.Attribute("Value").Value) }).ToList(); del.DelayParam = xDel; // Reverb var rev = new Reverb(); var xReverb = (from a in xe.Element("Reverb").Elements("Param") select new ReverbParam { ElementID = a.Attribute("ElementID").Value, ParamID = a.Attribute("ParamID").Value, Value = NumberUtils.DecimalTryParseOrZero(a.Attribute("Value").Value) }).ToList(); rev.ReverbParam = xReverb; // EQ var eq = new EQ(); // Band 2 Enable // Band 2 Frequency // Band 2 Gain // Band 2 Shape // Band 0 - 7 var xEQ = (from a in xe.Element("EQ").Elements("Param") where a.Attribute("ParamID").Value.StartsWith("Band 4") select new EQParam { ElementID = a.Attribute("ElementID").Value, ParamID = a.Attribute("ParamID").Value, Value = NumberUtils.DecimalTryParseOrZero(a.Attribute("Value").Value) }).ToList(); eq.EQParam = xEQ; }
private static extern Error.Code SetReverbAmbientProperties(IntPtr system, ref Reverb.Properties prop);