我正在用MediaElement构建一个UWP应用程序。
我希望能够改变MediaElement的音量和播放速度,但是我的代码不能正常工作。
如果我在第一次演奏之前设定了音量和速度,但是如果我改变了。播放后的音量不会改变音量。
我的代码:
Private mElement As MediaElement
Private Async Sub MainPage_Loaded(sender As Object, e As RoutedEventArgs) Handles Me.Loaded
mElement = New MediaElement
AddHandler mElement.MediaEnded, AddressOf OnMediaEnded
End Sub
Async Function SayAsync(ByVal text As String) As Task
If Synth Is Nothing Then
Dim chosenVoice = SpeechSynthesizer.AllVoices.First(Function(v) v.DisplayName.Contains(cboVoice.SelectedItem.ToString))
Synth = New SpeechSynthesizer() With {.Voice = chosenVoice}
End If
currentStream = Await Synth.SynthesizeTextToStreamAsync(text)
mElement.Volume = SpeechVol / 100
mElement.PlaybackRate = SpeechSpeed / 100
mElement.SetSource(currentStream, String.Empty)
mElement.Play()
End Function
Private Sub OnMediaEnded(ByVal sender As Object, ByVal e As RoutedEventArgs)
currentStream?.Dispose()
currentStream = Nothing
End Sub发布于 2018-04-27 06:10:36
通过在我这边的测试,当音频播放时,Volume可以被正确地改变。由于您的代码片段只是整体的一部分,下面是一个完整的演示程序,可以在我这边很好地工作:
XAML
<Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}" x:Name="rootgrid">
<Button x:Name="btnstart" Click="btnstart_Click" Content="start play"></Button>
<Button x:Name="btnchangevolume" Click="btnchangevolume_Click" Content="change volume to 50" Margin="100"></Button>
</Grid>代码背后
Inherits Page
Private mElement As MediaElement
Private Synth As SpeechSynthesizer
Private currentStream As SpeechSynthesisStream
Private Async Sub MainPage_Loaded(sender As Object, e As RoutedEventArgs) Handles Me.Loaded
mElement = New MediaElement
rootgrid.Children.Add(mElement)
End Sub
Async Function SayAsync(ByVal text As String) As Task
Synth = New SpeechSynthesizer
currentStream = Await Synth.SynthesizeTextToStreamAsync(text)
mElement.Volume = 10 / 100
mElement.PlaybackRate = 50 / 100
mElement.SetSource(currentStream, String.Empty)
End Function
Private Async Sub btnstart_Click(sender As Object, e As RoutedEventArgs)
Await SayAsync("The privacy statement was declined." +
"Go to Settings -> Privacy -> Speech, inking and typing, and ensure you" +
"have viewed the privacy policy, and 'Get To Know You' is enabled.")
End Sub
Private Sub btnchangevolume_Click(sender As Object, e As RoutedEventArgs)
mElement.Volume = 50 / 100
End Sub可能的原因可能是在XAML后面创建代码之后,没有将MediaElement添加到XAML中。如果你仍然有问题,请提供一个最小的复制项目。
顺便说一句,在Windows 10中,构建1607或更高版本,我们建议您使用MediaPlayerElement代替MediaElement。
https://stackoverflow.com/questions/50044829
复制相似问题