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> }
/// <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)); }
/// <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; } } }