2014-02-11 60 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 ...

相關問題