// will be called when speaking has finished private async void _fileInputNode_FileCompleted(AudioFileInputNode sender, object args) { if (_fileInputNode.LoopCount > 0) { return; // track the loop count down and wait until the end -murks MS will get here twice with 0 when the loopCount is used } _fileInputNode.Stop( ); await EndOfSound( ); }
private async void MainGraph_QuantumProcessed(AudioGraph sender, object args) { try { this.Position = mainInputNode.Position; if (NextJump != null) { if (NextJump != null && Position >= NextJump.Origin - NextJump.CrossFade && Position <= NextJump.Origin && !IsFading && NextJump.Song == mainSong) { IsFading = true; subInputNode = mainInputNode; subSong = mainSong; mainSong = NextJump.TargetSong ?? NextJump.Song; mainInputNode = await mainSong.Song.CreateNode(graph); mainInputNode.AddOutgoingConnection(outputNode); mainInputNode.StartTime = NextJump.TargetTime - (NextJump.Origin - subInputNode.Position); mainInputNode.OutgoingGain = 0; mainInputNode.Start(); } if (IsFading && subInputNode != null) { var fadePosition = (NextJump.Origin - subInputNode.Position); var fadeTime = NextJump.CrossFade; var percentage = Math.Min(1.0, Math.Max(0.0, fadePosition.TotalSeconds / fadeTime.TotalSeconds)); subInputNode.OutgoingGain = percentage; mainInputNode.OutgoingGain = 1.0 - percentage; } if (Position > NextJump.Origin && IsFading && subInputNode != null) { mainInputNode.OutgoingGain = 1.0; subInputNode.Stop(); subInputNode.RemoveOutgoingConnection(outputNode); subInputNode.Dispose(); subInputNode = null; subSong = null; NextJump = NextJump.NextDefaultJump; IsFading = false; } } } catch (Exception e) { App.Log(e); Recover(); } }
private void MainPage_FileCompleted(AudioFileInputNode sender, object args) { sender.Stop(); }