Exemple #1
0
        private AudioNodeEmitter GetEmitter(PlaybackOptions options)
        {
            if (options.Position == null)
            {
                return(null);
            }

            var shape = AudioNodeEmitterShape.CreateOmnidirectional();
            var decay = AudioNodeEmitterDecayModel.CreateNatural(0.1, 1.0, 10, 100);

            var emitter = new AudioNodeEmitter(shape, decay, AudioNodeEmitterSettings.None);

            emitter.SpatialAudioModel = SpatialAudioModel.ObjectBased;
            AdjustEmitter(emitter, options);
            return(emitter);
        }
        public async Task CreateFileInputNodeWithEmitter()
        {
            if (audioGraph == null)
            {
                return;
            }

            FileOpenPicker filePicker = new FileOpenPicker();

            filePicker.SuggestedStartLocation = PickerLocationId.MusicLibrary;
            filePicker.FileTypeFilter.Add(".mp3");
            filePicker.FileTypeFilter.Add(".wav");
            filePicker.FileTypeFilter.Add(".wma");
            filePicker.FileTypeFilter.Add(".m4a");
            filePicker.ViewMode = PickerViewMode.Thumbnail;
            StorageFile file = await filePicker.PickSingleFileAsync();

            // File can be null if cancel is hit in the file picker
            if (file == null)
            {
                return;
            }

            //<SnippetCreateEmitter>
            var emitterShape = AudioNodeEmitterShape.CreateOmnidirectional();
            var decayModel   = AudioNodeEmitterDecayModel.CreateNatural(.1, 1, 10, 100);
            var settings     = AudioNodeEmitterSettings.None;

            var emitter = new AudioNodeEmitter(emitterShape, decayModel, settings);

            emitter.Position = new System.Numerics.Vector3(10, 0, 5);

            CreateAudioFileInputNodeResult result = await audioGraph.CreateFileInputNodeAsync(file, emitter);

            if (result.Status != AudioFileNodeCreationStatus.Success)
            {
                ShowErrorMessage(result.Status.ToString());
            }

            fileInputNode = result.FileInputNode;
            //</SnippetCreateEmitter>
        }
Exemple #3
0
 /// <summary>
 /// Returns a new AudioNodeEmitterDecayModel with Natural decay.
 /// Same defaults as XAudio2
 /// </summary>
 /// <returns></returns>
 public static AudioNodeEmitterDecayModel CreateNatural()
 {
     return(AudioNodeEmitterDecayModel.CreateNatural(1.5848931924e-5, 3.98d, 1, float.MaxValue));
 }
Exemple #4
0
        /// <summary>
        /// Loads audio file.
        /// </summary>
        /// <param name="PlayPosition"></param>
        /// <returns></returns>
        private async Task LoadAudioFile(TimeSpan PlayPosition)
        {
            if (soundFile != null)
            {
                ClearErrorMessage();
                StartButtonEnabled = false;
                StopButtonEnabled  = false;
                FileName           = "";

                try
                {
                    await BuildAudioGraph();
                }
                catch (Exception ex)
                {
                    ShowErrorMessage(ex.Message);
                    return;
                }
                emitter          = new AudioNodeEmitter(AudioNodeEmitterShape.CreateOmnidirectional(), AudioNodeEmitterDecayModel.CreateCustom(0.1, 1), AudioNodeEmitterSettings.None);
                emitter.Position = new Vector3((float)X, (float)Z, (float)-Y);

                CreateAudioFileInputNodeResult inCreateResult = await graph.CreateFileInputNodeAsync(soundFile, emitter);

                switch (inCreateResult.Status)
                {
                case AudioFileNodeCreationStatus.FormatNotSupported:
                case AudioFileNodeCreationStatus.InvalidFileType:
                    ShowErrorMessage(String.Format("Could not load {0}. \n\nPlease choose a different file - For Windows Spatial Sound processing, audio files must be Mono 48kHz PCM Wav.", soundFile.Name));
                    return;

                case AudioFileNodeCreationStatus.UnknownFailure:
                case AudioFileNodeCreationStatus.FileNotFound:
                    ShowErrorMessage(String.Format("Audio file load error: {0}", inCreateResult.Status.ToString()));
                    return;
                }


                //Dispose of previous input node.
                if (currentAudioFileInputNode != null)
                {
                    try
                    {
                        currentAudioFileInputNode.Dispose();
                    }
                    catch (ObjectDisposedException)
                    {
                        //Do nothing
                    }
                }
                currentAudioFileInputNode = inCreateResult.FileInputNode;
                currentAudioFileInputNode.AddOutgoingConnection(deviceOutput);
                currentAudioFileInputNode.FileCompleted += CurrentAudioFileInputNode_FileCompleted;
                FileName = currentAudioFileInputNode.SourceFile.Name;

                if (PlayPosition != TimeSpan.Zero)
                {
                    currentAudioFileInputNode.Seek(PlayPosition);
                    graph.Start();
                    StopButtonEnabled = true;
                }
                else
                {
                    StartButtonEnabled = true;
                }
            }
        }