2014-02-11 37 views
0

在我的C#项目中,我想播放指定开始和结束时间的声音。如何在.Net中播放已定义开始和结束时间的声音

我使用System.Media.SoundPlayer.Play()函数。但有了这个功能,我只能播放整个声音文件,或者可以在计算运行时间后中止播放。

事实上,我想说的是,给定的声音文件应该在时间1m:25s:30ms开始,并且应该在时间1m:50s:00ms处结束,或者在10s左右的时间之后结束。

有没有人知道他的问题的简单解决方案?

感谢4帮助。

+1

看看这个:http://stackoverflow.com/questions/8531789/how-to-play-a-music-file-for-a-specified-amount-of时间 – John

+0

好吧,这是我上面写的,我可以做到这一点。但是,我怎么能说声音不应该从一开始就开始,而是例如在开始几秒钟之后呢? –

回答

1

不是一个真正的答案,但这个问题让我想,如果你可以做这样的事情:

long startPositionInBytes = 512; 
long endPositionInBytes = 2048; 

using (var audioStream = File.OpenRead(@"audio.wav")) 
{ 
    audioStream.Position = startPositionInBytes; 

    using (var player = new SoundPlayer(audioStream)) 
    { 
     player.Play(); 

     do 
     { 
      Thread.Sleep(1); 
     } while (audioStream.Position <= endPositionInBytes); 

     player.Stop(); 
    } 
} 
+0

可以工作。但是你有没有想法,我怎样才能估计出时代的字节位置?它们受到采样率和压缩率的影响。 。 –

+1

不是没有编写可以解释波形格式的代码,在这一点上,您可以继续并自己实现音频回放。 –

1

如果你要玩一个背景媒体播放器(用于例如,音频文件),它会从一个特定的时间开始,将工作了一定时间,那么这段代码片段也可能是有用的:

StorageFile mediaFile = await KnownFolders.VideosLibrary.GetFileAsync(fileName);//the path 
BackgroundMediaPlayer.Current.SetFileSource(mediaFile); 
BackgroundMediaPlayer.Current.Position = TimeSpan.FromMilliseconds(3000/*enter the start time here*/); 
BackgroundMediaPlayer.Current.Play(); 
await Task.Delay(TimeSpan.FromMilliseconds(10000/*for how long you want to play*/)); 
BackgroundMediaPlayer.Shutdown();//stops the player 

**但是,这只适用于Windows 8.1及以上版本。 欲了解更多信息,请单击here ...

相关问题