如何在 C# 中暂停和恢复音频
Posted
技术标签:
【中文标题】如何在 C# 中暂停和恢复音频【英文标题】:how to pause and resume audio in c# 【发布时间】:2015-08-11 14:27:32 【问题描述】:我正在开发 wpf 应用程序。我想暂停和恢复音频,但歌曲从头开始播放。
//c# code
System.Media.SoundPlayer sp = new System.Media.SoundPlayer(@"D:\Intro.wav");
private void play_Click(object sender, EventArgs e)
sp.Play();
play_btn.Enabled = false;
stop_btn.Enabled = true;
private void stop_Click(object sender, EventArgs e)
sp.Stop();
stop_btn.Enabled = false;
play_btn.Enabled = true;
【问题讨论】:
被问到before。 但是没有得到满意的回答,所以还需要回答。 @goobering,已回答,但回答根本不被接受(经常发生)。我的评论是说“使用搜索”的一种外交方式。 SoundPlayer API 不支持暂停。您是否尝试过操作 Stream 对象?如果您不能选择使用 MediaElement,请将其添加到问题中。现在问题的格式是重复的,因为链接的问题确实有一个使用不同 API 的答案。 【参考方案1】:使用System.Windows.Controls.MediaElement
而不是System.Media.SoundPlayer
。它有一个Pause
函数。
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="320*"/>
<RowDefinition Height="50*"/>
</Grid.RowDefinitions>
<MediaElement x:Name="MediaPlayer" Grid.RowSpan="1" LoadedBehavior="Manual"/>
<StackPanel Orientation="Horizontal" Grid.Row="1" HorizontalAlignment="Center">
<Button x:Name="btnPlay" Content="Play" Click="btnPlay_Click" Width="50" Height="25" Margin="5"/>
<Button x:Name="btnStop" Content="Stop" Click="btnStop_Click" Width="50" Height="25" Margin="5"/>
<Button x:Name="btnMoveBack" Content="Back" Click="btnMoveBack_Click" Width="50" Height="25" Margin="5"/>
<Button x:Name="btnMoveForward" Content="Forward" Click="btnMoveForward_Click" Width="50" Height="25" Margin="5"/>
</StackPanel>
</Grid>
private void IsPlaying(bool flag)
btnPlay.IsEnabled = flag;
btnStop.IsEnabled = flag;
btnMoveBack.IsEnabled = flag;
btnMoveForward.IsEnabled = flag;
private void btnPlay_Click(object sender, RoutedEventArgs e)
IsPlaying(true);
if (btnPlay.Content.ToString() == "Play")
MediaPlayer.Play();
btnPlay.Content = "Pause";
else
MediaPlayer.Pause();
btnPlay.Content = "Play";
private void btnStop_Click(object sender, RoutedEventArgs e)
MediaPlayer.Pause();
btnPlay.Content = "Play";
IsPlaying(false);
btnPlay.IsEnabled = true;
private void btnMoveBack_Click(object sender, RoutedEventArgs e)
MediaPlayer.Position -= TimeSpan.FromSeconds(10);
private void btnMoveForward_Click(object sender, RoutedEventArgs e)
MediaPlayer.Position += TimeSpan.FromSeconds(10);
【讨论】:
代码更可能取自here。【参考方案2】:Soundplayer 不支持暂停和恢复。您可以改用 WPF MediaElement。
如果您必须使用 Soundplayer,您可以每秒使用静音歌曲启动一个新线程。之后,您必须在暂停方法中将响亮的静音。在 Resume Method 中,您必须检查哪个线程处于最佳时间。
但我认为这将是最可怕的解决方案。
干杯
【讨论】:
那将是一个可怕的解决方案。如果音轨是 10 分钟长,你最终会得到 36000 个线程!以上是关于如何在 C# 中暂停和恢复音频的主要内容,如果未能解决你的问题,请参考以下文章