Exemplo n.º 1
0
        /// <summary>
        /// Plays the given sound.
        /// </summary>
        /// <param name="soundFile">The sound file to be played.</param>
        /// <param name="volume">The volume of the sound to be played.</param>
        public async Task PlaySoundAsync(CachedSoundFile soundFile, float volume = 1f)
        {
            soundFile.EnsureNotNullOrDisposed(nameof(soundFile));
            volume.EnsurePositive(nameof(volume));

            if (!m_xaudioDevice.IsLoaded) { return; }

            // Play the sound on the device
            using (var sourceVoice = new XA.SourceVoice(m_xaudioDevice.Device, soundFile.Format, true))
            {
                // Register the created voice
                m_playingVoices.Add(sourceVoice);

                // Start voice playing
                TaskCompletionSource<object> complSource = new TaskCompletionSource<object>();
                sourceVoice.SubmitSourceBuffer(soundFile.AudioBuffer, soundFile.DecodedPacketsInfo);
                sourceVoice.SetVolume(volume);
                sourceVoice.BufferEnd += (pointer) =>
                {
                    complSource.TrySetResult(null);
                };
                sourceVoice.Start();

                // Await finished playing
                await complSource.Task;

                // Destroy the voice object
                //  A NullReference is raised later, if we forget this call
                sourceVoice.DestroyVoice();

                // Remove the created voice finally
                m_playingVoices.Remove(sourceVoice);
            }
        }
Exemplo n.º 2
0
 public void startSound(int loop = -1)
 {
     buffer.LoopCount = loop;
     sourceVoice = new SourceVoice(device, stream.Format, true);
     sourceVoice.SubmitSourceBuffer(buffer, stream.DecodedPacketsInfo);
     sourceVoice.Start();
 }
Exemplo n.º 3
0
        /// <summary>
        /// Initializes a new instance of the <see cref="AudioPlayer" /> class.
        /// </summary>
        /// <param name="xaudio2">The xaudio2 engine.</param>
        /// <param name="audioStream">The input audio stream.</param>
        public AudioPlayer(XAudio2 xaudio2, Stream audioStream)
        {
            this.xaudio2 = xaudio2;
            audioDecoder = new AudioDecoder(audioStream);
            //sourceVoice = new SourceVoice(xaudio2, audioDecoder.WaveFormat);
            sourceVoice = new SourceVoice(xaudio2, audioDecoder.WaveFormat,0,1.0f);
            localVolume = 1.0f;

            sourceVoice.BufferEnd += sourceVoice_BufferEnd;
            sourceVoice.Start();

            bufferEndEvent = new AutoResetEvent(false);
            playEvent = new ManualResetEvent(false);
            waitForPlayToOutput = new ManualResetEvent(false);

            clock = new Stopwatch();

            // Pre-allocate buffers
            audioBuffersRing = new AudioBuffer[3];
            memBuffers = new DataPointer[audioBuffersRing.Length];
            for (int i = 0; i < audioBuffersRing.Length; i++)
            {
                audioBuffersRing[i] = new AudioBuffer();
                memBuffers[i].Size = 32 * 1024; // default size 32Kb
                memBuffers[i].Pointer = Utilities.AllocateMemory(memBuffers[i].Size);
            }

            // Initialize to stopped
            State = AudioPlayerState.Stopped;

            // Starts the playing thread
            playingTask = Task.Factory.StartNew(PlayAsync, TaskCreationOptions.LongRunning);
        }
Exemplo n.º 4
0
 public void Play()
 {
     _sourceVoice = new SourceVoice(_xaudio, _waveFormat, true);
     _sourceVoice.SubmitSourceBuffer(_buffer, _soundstream.DecodedPacketsInfo);
     _sourceVoice.Start();
     IsPlaying = true;
 }
Exemplo n.º 5
0
 public void RestartSong()
 {
     voice.Stop();
     voice = new SourceVoice(xAudio, firstWave.Buffer.WaveFormat, true);
     voice.SourceSampleRate = defaultSampleRate;
     voice.SubmitSourceBuffer(firstWave.Buffer, firstWave.Buffer.DecodedPacketsInfo);
     voice.Start();
 }
Exemplo n.º 6
0
        public void ChangeSpeed(double modifier)
        {
            AudioBufferAndMetaData newBuffer = firstWave.Buffer;
            voice.Stop();

            newBuffer.Stream.Read(firstWave.Buffer.Stream.PositionPointer, 100000, 3);
            voice = new SourceVoice(xAudio, newBuffer.WaveFormat, true);
            voice.SourceSampleRate = (int)(defaultSampleRate * modifier);
            voice.SubmitSourceBuffer(newBuffer, newBuffer.DecodedPacketsInfo);
            voice.Start();
        }
        public static void PlaySound(Stream soundStream, float volume = 1)
        {
            SourceVoice sourceVoice;

            var buffer = GetBuffer(soundStream);
            sourceVoice = new SourceVoice(XAudio, buffer.WaveFormat, true);
            sourceVoice.SetVolume(volume, SharpDX.XAudio2.XAudio2.CommitNow);
            sourceVoice.SubmitSourceBuffer(buffer, buffer.DecodedPacketsInfo);
            sourceVoice.BufferEnd += SourceVoiceOnBufferEnd;
            sourceVoice.Start();

        }
Exemplo n.º 8
0
 public void PlayWave(string key)
 {
     var wave = waves.FirstOrDefault(x => x.Key == key);
     firstWave = wave;
     if (wave != null)
     {
         voice = new SourceVoice(xAudio, wave.Buffer.WaveFormat, true);
         voice.SourceSampleRate = defaultSampleRate;
         voice.SubmitSourceBuffer(wave.Buffer, wave.Buffer.DecodedPacketsInfo);
         voice.Start();
     }
 }
Exemplo n.º 9
0
        /// <summary>
        /// Function to play an mp3.
        /// </summary>
        /// <param name="path">The path to the mp3 file.</param>
        public async Task PlayMp3Async(string path)
        {
            if (_currentPlayback != null)
            {
                await _currentPlayback;
                return;
            }

            _tokenSource     = new CancellationTokenSource();
            _currentPlayback = Task.Run(() =>
            {
                var stream           = new Mm.SoundStream(File.Open(path, FileMode.Open, FileAccess.Read, FileShare.None));
                Mm.WaveFormat format = stream.Format;
                var buffer           = new Xa.AudioBuffer
                {
                    Stream     = stream.ToDataStream(),
                    AudioBytes = (int)stream.Length,
                    Flags      = Xa.BufferFlags.EndOfStream
                };

                stream.Close();

                var source = new Xa.SourceVoice(_audio, format);
                source.SubmitSourceBuffer(buffer, stream.DecodedPacketsInfo);
                source.Start();

                try
                {
                    while ((!_tokenSource.Token.IsCancellationRequested) && (!source.IsDisposed) && (source.State.BuffersQueued > 0))
                    {
                        Thread.Sleep(10);
                    }

                    source.Stop();
                }
                finally
                {
                    buffer.Stream?.Dispose();
                    source.Dispose();
                    stream?.Dispose();
                }
            }, _tokenSource.Token);

            await _currentPlayback;

            _currentPlayback = null;
        }
Exemplo n.º 10
0
        public static void PlaySound(string soundfile, float volume = 1)
        {
            SourceVoice sourceVoice;
            if (!LoadedSounds.ContainsKey(soundfile))
            {

                var buffer = GetBuffer(soundfile);
                sourceVoice = new SourceVoice(XAudio, buffer.WaveFormat, true);
                sourceVoice.SetVolume(volume, SharpDX.XAudio2.XAudio2.CommitNow);
                sourceVoice.SubmitSourceBuffer(buffer, buffer.DecodedPacketsInfo);
                sourceVoice.Start();

            }
            else
            {
                sourceVoice = LoadedSounds[soundfile];
                if (sourceVoice != null)
                    sourceVoice.Stop();
            }
        }
Exemplo n.º 11
0
        /// <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);
            }
        }
Exemplo n.º 12
0
        /// <summary>
        /// Play a sound file. Supported format are Wav(pcm+adpcm) and XWMA
        /// </summary>
        /// <param name="device">The device.</param>
        /// <param name="text">Text to display</param>
        /// <param name="fileName">Name of the file.</param>
        static void PLaySoundFile(XAudio2 device, string text, string fileName)
        {
            Console.WriteLine("{0} => {1} (Press esc to skip)", text, fileName);
            var stream = new SoundStream(File.OpenRead(fileName));
            var waveFormat = stream.Format;
            var buffer = new AudioBuffer
                             {
                                 Stream = stream.ToDataStream(),
                                 AudioBytes = (int) stream.Length,
                                 Flags = BufferFlags.EndOfStream
                             };
            stream.Close();
            
            var sourceVoice = new SourceVoice(device, waveFormat, true);
            // Adds a sample callback to check that they are working on source voices
            sourceVoice.BufferEnd += (context) => Console.WriteLine(" => event received: end of buffer");
            sourceVoice.SubmitSourceBuffer(buffer, stream.DecodedPacketsInfo);
            sourceVoice.Start();

            int count = 0;
            while (sourceVoice.State.BuffersQueued > 0 && !IsKeyPressed(ConsoleKey.Escape))
            {
                if (count == 50)
                {
                    Console.Write(".");
                    Console.Out.Flush();
                    count = 0;
                }
                Thread.Sleep(10);
                count++;
            }
            Console.WriteLine();

            sourceVoice.DestroyVoice();
            sourceVoice.Dispose();
            buffer.Stream.Dispose();
        }
Exemplo n.º 13
0
        public static void PlayNote(string AssetPath)
        {
            if (AssetPath.Equals("Oud Maquam"))
            {
                AssetPath = AssetPath.Replace(" ", "").Replace("M", "m");

            }
            try
            {
                XAudio2 xAudio = new XAudio2();
                var masteringVoice = new MasteringVoice(xAudio);
                var nativeFileStream = new NativeFileStream(AssetPath, NativeFileMode.Open, NativeFileAccess.Read, NativeFileShare.Read);

                SoundStream stream = new SoundStream(nativeFileStream);
                var waveFormat = stream.Format;
                AudioBuffer buffer = new AudioBuffer
                {
                    Stream = stream.ToDataStream(),
                    AudioBytes = (int)stream.Length,
                    Flags = BufferFlags.EndOfStream
                };

                var sourceVoice = new SourceVoice(xAudio, waveFormat, true);

                sourceVoice.SubmitSourceBuffer(buffer, stream.DecodedPacketsInfo);
                sourceVoice.Start();
                /*

                            SourceVoice sound;
                            notes.TryGetValue(AssetPath, out sound);
                            sound.Stop();

                 * sound.Start();*/
            }
            catch (Exception)
            {

            }
        }
Exemplo n.º 14
0
        /// <summary>
        /// SharpDX X3DAudio sample. Plays a generated sound rotating around the listener.
        /// </summary>
        static void Main(string[] args)
        {
            var xaudio2 = new XAudio2();
            using (var masteringVoice = new MasteringVoice(xaudio2))
            {
                // Instantiate X3DAudio
                var x3dAudio = new X3DAudio(Speakers.Stereo);

                var emitter = new Emitter
                                  {
                                      ChannelCount = 1,
                                      CurveDistanceScaler = float.MinValue,
                                      OrientFront = new Vector3(0, 0, 1),
                                      OrientTop = new Vector3(0, 1, 0),
                                      Position = new Vector3(0, 0, 0),
                                      Velocity = new Vector3(0, 0, 0)
                                  };

                var listener = new Listener
                                   {
                                       OrientFront = new Vector3(0, 0, 1),
                                       OrientTop = new Vector3(0, 1, 0),
                                       Position = new Vector3(0, 0, 0),
                                       Velocity = new Vector3(0, 0, 0)
                                   };

                var waveFormat = new WaveFormat(44100, 32, 1);
                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++)
                {
                    float value = (float) (Math.Cos(2*Math.PI*220.0*i/waveFormat.SampleRate)*0.5);
                    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 a sound rotating around the listener");
                for (int i = 0; i < 1200; i++)
                {
                    // Rotates the emitter
                    var rotateEmitter = Matrix.RotationY(i/5.0f);
                    var newPosition = Vector3.Transform(new Vector3(0, 0, 1000), rotateEmitter);
                    var newPositionVector3 = new Vector3(newPosition.X, newPosition.Y, newPosition.Z);
                    emitter.Velocity = (newPositionVector3 - emitter.Position)/0.05f;
                    emitter.Position = newPositionVector3;

                    // Calculate X3DAudio settings
                    var dspSettings = x3dAudio.Calculate(listener, emitter, CalculateFlags.Matrix | CalculateFlags.Doppler, 1, 2);

                    // Modify XAudio2 source voice settings
                    sourceVoice.SetOutputMatrix(1, 2, dspSettings.MatrixCoefficients);
                    sourceVoice.SetFrequencyRatio(dspSettings.DopplerFactor);

                    // Wait for 50ms
                    Thread.Sleep(50);
                }
            }
        }
Exemplo n.º 15
0
        private void btnXAudio2_Click(object sender, RoutedEventArgs e)
        {

            XAudio2 xaudio;
            MasteringVoice masteringVoice;

            xaudio = new XAudio2();
            masteringVoice = new MasteringVoice(xaudio);

            var nativefilestream = new NativeFileStream(
                @"Assets\Clk_1Sec1.wav",
                NativeFileMode.Open,
                NativeFileAccess.Read,
                NativeFileShare.Read);

            var soundstream = new SoundStream(nativefilestream);


            var waveFormat = soundstream.Format;
            var buffer = new AudioBuffer
            {
                Stream = soundstream.ToDataStream(),
                AudioBytes = (int)soundstream.Length,
                Flags = BufferFlags.EndOfStream,
            };

            var sourceVoice = new SourceVoice(xaudio, waveFormat, true);

            // There is also support for shifting the frequency.
            sourceVoice.SetFrequencyRatio(1.0f);

            sourceVoice.SubmitSourceBuffer(buffer, soundstream.DecodedPacketsInfo);

            sourceVoice.Start();
        }
Exemplo n.º 16
0
        static void Playsound(XAudio2 device, string path, int volume/*, bool ambiance*/)
        {
            var stream = new SoundStream(File.OpenRead(path));
            bool boolwhile = true;
            var waveformat = stream.Format;
            var buffer = new AudioBuffer
            {
                Stream = stream.ToDataStream(),
                AudioBytes = (int)stream.Length,
                Flags = BufferFlags.EndOfStream
            };
            stream.Close();

            var sourcevoice = new SourceVoice(device, waveformat, true);
            sourcevoice.SubmitSourceBuffer(buffer, stream.DecodedPacketsInfo);
            sourcevoice.SetVolume(volume);
            sourcevoice.Start();
            int count = 0;

            while (sourcevoice.State.BuffersQueued > 0  && boolwhile)
            {
                if (/*ambiance || soundContinue*/42 == 42)
                {
                   if (count == 50)
                    {
                        //Console.Out.Flush();
                        count = 0;
                    }

                    //Thread.Sleep(10);
                    count++;

                }
                else
                {
                    boolwhile = false;
                }

            }
            sourcevoice.DestroyVoice();
            sourcevoice.Dispose();
            buffer.Stream.Dispose();
        }
Exemplo n.º 17
0
 /// <summary>
 /// Play the sound.
 /// </summary>
 public override void Play()
 {
     SourceVoice sourceVoice;
     sourceVoice = new SourceVoice(m_xaudio, m_waveFormat, true);
     sourceVoice.SubmitSourceBuffer(m_buffer, m_soundStream.DecodedPacketsInfo);
     sourceVoice.Start();
 }
Exemplo n.º 18
0
 public void SetSourceVoice(SourceVoice sourceVoice)
 {
     this.sourceVoice = sourceVoice;
     sourceVoice.Start();
 }
Exemplo n.º 19
0
 public void SetSampleProvider(IAudioSampleProvider audioSampleProvider)
 {
     var format = ToWaveFormat(audioSampleProvider.AudioFormat);
     _voice = new SourceVoice(_xAudio, format, true);
     _audioSampleProvider = audioSampleProvider;
     for (var i = 0; i < NumBuffers; i++)
     {
         FillBuffer(i);
     }
     _audioThread = Task.Factory.StartNew(OnAudioThread, CancellationToken.None, TaskCreationOptions.LongRunning, TaskScheduler.Default);
     _voice.Start();
 }
Exemplo n.º 20
0
        public SourceVoice Play(EffectSound sound)
        {
            var waveFormat = sound.Stream.Format;
            List<SourceVoice> voices;
            lock (instances)
            {
                if (!instances.TryGetValue(waveFormat, out voices))
                {
                    voices = new List<SourceVoice>();
                    instances.Add(waveFormat, voices);
                }

                // Clean non-playing source
                var voiceToDelete = new List<SourceVoice>();
                foreach (var voice in voices)
                {
                    if (voice.State.BuffersQueued == 0)
                        voiceToDelete.Add(voice);
                }
                voiceToDelete.ForEach(x =>
                    {
                        voices.Remove(x);
                        x.Stop();
                        x.DestroyVoice();
                        x.Dispose();
                    });

                if (voices.Count >= this.maxInstances)
                    // Too many instances
                    return null;

                var newVoice = new SourceVoice(this.xaudio2, waveFormat, true);
                newVoice.BufferEnd += newVoice_BufferEnd;
                voices.Add(newVoice);

                newVoice.SubmitSourceBuffer(sound.Buffer, sound.Stream.DecodedPacketsInfo);
                newVoice.Start();

                return newVoice;
            }
        }
Exemplo n.º 21
0
		protected override void EndBufferChange()
		{
			if (AudioBuffer != null)
			{
				if (xAudioBuffer == null) xAudioBuffer = new XAudioBuffer();

				audioBufferHandle = GCHandle.Alloc(AudioBuffer.RawBuffer, GCHandleType.Pinned);
				xAudioBuffer.Stream = new DataStream(audioBufferHandle.AddrOfPinnedObject(), AudioBuffer.SizeInBytes, true, true);
				xAudioBuffer.AudioBytes = (int)xAudioBuffer.Stream.Length;
				xAudioBuffer.LoopLength = AudioBuffer.RawBuffer.Length / 2;
				xAudioBuffer.LoopCount = XAudio2.MaximumLoopCount;
				sourceVoice = new SourceVoice(xAudio, waveFormat);
				sourceVoice.SubmitSourceBuffer(xAudioBuffer, null);
				sourceVoice.Start();
			}
		}
Exemplo n.º 22
0
        static void Main(string[] args)
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            //Application.Run(new UIForm());

            UIHandler.Init();
            GraphicsManager.Init();
            ThemeManager.LoadDefault();
            InteropManager.Init();

            /*UIForm f1 = new UIForm(1);
            UIForm f2 = new UIForm(2);

            Button b = new Button();
            b.SetBounds(48, 48, 48, 48);
            b.Click += (Object s, EventArgs e) => {
                new UIForm(32).Show();
            };
            f1.Controls.Add(b);

            f2.Show();*/
            new WindowMain().Open();

            UIManager.SpawnUIUpdateThread();
            //Application.Run(f1);
            Application.Run();

            bool yes = true;
            if (yes) return;

            //
            XAudio2 audio = new XAudio2();
            WaveFormat format = new WaveFormat(44100, 32, 2);
            MasteringVoice mvoice = new MasteringVoice(audio);
            SourceVoice voice = new SourceVoice(audio, format);

            int bufferSize = format.ConvertLatencyToByteSize(500);

            DataStream stream = new DataStream(bufferSize, true, true);

            int samples = bufferSize / format.BlockAlign;
            for (int i = 0; i < samples; i++) {
                float val = (float)(Math.Sin(2*Math.PI*500*i/format.SampleRate));// * (0.5 + Math.Sin(2*Math.PI*2.2*i/format.SampleRate)*0.5));
                //if (val == 0) val = 1;
                //val = val / Math.Abs(val);
                for (int j = 0; j < 3; j++) val = val * val;
                stream.Write(val);
                stream.Write(val);
                //stream.Write(val * (float)(0.5 + Math.Sin(2 * Math.PI * 2.2 * i / format.SampleRate) * 0.5));
                //stream.Write(val * (float)(0.5 + Math.Cos(2 * Math.PI * 2.2 * i / format.SampleRate) * 0.5));
            }

            stream.Position = 0;

            AudioBuffer buffer = new AudioBuffer { Stream = stream, Flags = BufferFlags.EndOfStream, AudioBytes = bufferSize };
            //buffer.LoopCount = AudioBuffer.LoopInfinite;
            voice.SubmitSourceBuffer(buffer, null);
            voice.SubmitSourceBuffer(buffer, null);
            voice.SubmitSourceBuffer(buffer, null);
            voice.SubmitSourceBuffer(buffer, null);
            voice.SubmitSourceBuffer(buffer, null);
            voice.SubmitSourceBuffer(buffer, null);
            voice.SubmitSourceBuffer(buffer, null);
            voice.SubmitSourceBuffer(buffer, null);
            voice.SubmitSourceBuffer(buffer, null);
            voice.SubmitSourceBuffer(buffer, null);
            voice.SubmitSourceBuffer(buffer, null);
            voice.SubmitSourceBuffer(buffer, null);
            voice.SubmitSourceBuffer(buffer, null);
            voice.SubmitSourceBuffer(buffer, null);

            voice.Start();
            Thread.Sleep(3000);
            long pos = stream.Position;
            stream.Position = 0;
            for (int i = 0; i < samples; i++) {
                float val = (float)(Math.Sin(2 * Math.PI * 500 * i / format.SampleRate));// * (0.5 + Math.Sin(2*Math.PI*2.2*i/format.SampleRate)*0.5));
                //if (val == 0) val = 1;
                //val = val / Math.Abs(val);
                //for (int j = 0; j < 8; j++) val = val * val;
                stream.Write(val);
                stream.Write(val);
                //stream.Write(val * (float)(0.5 + Math.Sin(2 * Math.PI * 2.2 * i / format.SampleRate) * 0.5));
                //stream.Write(val * (float)(0.5 + Math.Cos(2 * Math.PI * 2.2 * i / format.SampleRate) * 0.5));
            }
            //stream.Position = pos;
            //voice.State.p
            while (voice.State.BuffersQueued > 0) Thread.Sleep(100);
            //Thread.Sleep(6000);
        }