トップ回答者
wavファイルを範囲指定して再生する方法

質問
-
Visual Studio上でwavフィアルを再生する方法で、SoundPlayerクラスを使用する手段が多く紹介されていますが、
これだと単純にwavを再生、停止の方法しか見つかりませんでした。
今回、wavの範囲を指定して再生する(10秒のwavファイルの内、2秒~3秒の間を再生する)方法を探しております。
この場合、SoundPlayerクラスではなく、別のライブラリを導入するべきでしょうか?
そもそもその方法がどこにもドキュメントとして残っておらず、どこから手を付けたら良いかわかりません・・・
具体的に実現する方法、もしくはそのようなドキュメントがどこかに残っていれば、ぜひご教授お願いします。
回答
-
こんにちは。
以下を参考に試してみているところです。
http://dobon.net/vb/dotnet/programing/playwavfile.htmlWindows Media Player Controlを使用する方法では開始時間を指定できたので
厳密なシークは難しいかもしれませんが、時間を計測して止めれば疑似的に範囲指定した再生が出来るかもしれません。private void WMPLib_Call(string wavFilePath) { WMPLib.WindowsMediaPlayer mediaPlayer = new WMPLib.WindowsMediaPlayer(); mediaPlayer.URL = wavFilePath; mediaPlayer.controls.currentPosition = 2; mediaPlayer.controls.play(); }
ほかの方法は調査中…。
-
WPFのMediaElementを使ってもいいなら一応は範囲指定して再生はできます
<Window x:Class="MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="MainWindow" Height="350" Width="525"> <DockPanel Background="Black"> <Button Click="Button_Click" DockPanel.Dock="Bottom" > <TextBlock Text="▲"> <TextBlock.LayoutTransform> <RotateTransform Angle="90"/> </TextBlock.LayoutTransform> </TextBlock> </Button> <MediaElement x:Name="mediaElement1" /> </DockPanel> </Window>
Class MainWindow Private _StoryBoard As New System.Windows.Media.Animation.Storyboard() Private _TimeLine As New System.Windows.Media.MediaTimeline() Sub New() InitializeComponent() _StoryBoard.Children.Add(_TimeLine) System.Windows.Media.Animation.Storyboard.SetTarget(_TimeLine, mediaElement1) End Sub Private Sub Button_Click(sender As Object, e As RoutedEventArgs) Dim dlg As New Microsoft.Win32.OpenFileDialog() dlg.Filter = "*.wav|*.wav" If (dlg.ShowDialog() = True) Then _TimeLine.Source = New Uri(dlg.FileName, System.UriKind.Absolute) _TimeLine.Duration = New Duration(TimeSpan.FromSeconds(3)) _StoryBoard.Begin() _StoryBoard.Seek(TimeSpan.FromSeconds(2)) End If End Sub End Class
個別に明示されていない限りgekkaがフォーラムに投稿したコードにはフォーラム使用条件に基づき「MICROSOFT LIMITED PUBLIC LICENSE」が適用されます。(かなり自由に使ってOK!)
すべての返信
-
こんにちは。
以下を参考に試してみているところです。
http://dobon.net/vb/dotnet/programing/playwavfile.htmlWindows Media Player Controlを使用する方法では開始時間を指定できたので
厳密なシークは難しいかもしれませんが、時間を計測して止めれば疑似的に範囲指定した再生が出来るかもしれません。private void WMPLib_Call(string wavFilePath) { WMPLib.WindowsMediaPlayer mediaPlayer = new WMPLib.WindowsMediaPlayer(); mediaPlayer.URL = wavFilePath; mediaPlayer.controls.currentPosition = 2; mediaPlayer.controls.play(); }
ほかの方法は調査中…。
-
WPFのMediaElementを使ってもいいなら一応は範囲指定して再生はできます
<Window x:Class="MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="MainWindow" Height="350" Width="525"> <DockPanel Background="Black"> <Button Click="Button_Click" DockPanel.Dock="Bottom" > <TextBlock Text="▲"> <TextBlock.LayoutTransform> <RotateTransform Angle="90"/> </TextBlock.LayoutTransform> </TextBlock> </Button> <MediaElement x:Name="mediaElement1" /> </DockPanel> </Window>
Class MainWindow Private _StoryBoard As New System.Windows.Media.Animation.Storyboard() Private _TimeLine As New System.Windows.Media.MediaTimeline() Sub New() InitializeComponent() _StoryBoard.Children.Add(_TimeLine) System.Windows.Media.Animation.Storyboard.SetTarget(_TimeLine, mediaElement1) End Sub Private Sub Button_Click(sender As Object, e As RoutedEventArgs) Dim dlg As New Microsoft.Win32.OpenFileDialog() dlg.Filter = "*.wav|*.wav" If (dlg.ShowDialog() = True) Then _TimeLine.Source = New Uri(dlg.FileName, System.UriKind.Absolute) _TimeLine.Duration = New Duration(TimeSpan.FromSeconds(3)) _StoryBoard.Begin() _StoryBoard.Seek(TimeSpan.FromSeconds(2)) End If End Sub End Class
個別に明示されていない限りgekkaがフォーラムに投稿したコードにはフォーラム使用条件に基づき「MICROSOFT LIMITED PUBLIC LICENSE」が適用されます。(かなり自由に使ってOK!)