2013-07-29 22 views
0

我正嘗試使用'system.windows.media.mediaplayer'媒體播放器播放聲音文件列表,但是我遇到問題媒體播放器知道何時播放下一個聲音文件。powershell'system.windows.media.mediaplayer'Register-ObjectEvent

我試圖使用'MediaEnded'事件句柄來解決聲音文件何時結束,然後移動到下一個聲音文件。但是我無法得到事件句柄來正確啓動,請問有人會告訴我哪裏出錯了?這是我正在使用的代碼:

Add-Type -AssemblyName presentationCore 
$mediaplayer=New-Object system.windows.media.mediaplayer 
Register-ObjectEvent -InputObject $mediaplayer -SourceIdentifier media -EventName BufferingStarted -Action {write-host "media stopped"} 
$mediaPlayer.Open('C:\Windows\Media\chimes.wav') 
$mediaplayer.Play() 
sleep 3 
$mediaPlayer.Open('C:\Windows\Media\chimes.wav') 
$mediaplayer.Play() 

我只是在播放任何聲音文件以嘗試獲取事件句柄來觸發。

請幫幫我!

回答

1
Add-Type -AssemblyName PresentationCore 
$_MediaPlayer = New-Object System.Windows.Media.MediaPlayer 
$_MusicFolder = 'C:\Users\Making JESUS Proud\Music' 
$_MusicFiles = Get-ChildItem -path $_MusicFolder -include *.mp3 -recurse 
$duration = $null 
foreach($_file in $_MusicFiles){ 
    "Playing $($_file.BaseName)" 
    [uri]$_song = $_file.FullName 
    do { 
     $_MediaPlayer.Open($_song) 
     $_songDuration = $_MediaPlayer.NaturalDuration.TimeSpan.TotalMilliseconds 
    } 
    until ($_songDuration) 
    $_MediaPlayer.Volume = 1 
    $_MediaPlayer.Play() 
    Start-Sleep -Milliseconds $_songDuration 
    $_MediaPlayer.Stop() 
    $_MediaPlayer.Close() 
} 
+1

請解釋你的答案,而不是隻給它。這將有助於教導人們,並對有相似但稍有不同問題的人有用。 – ArtB

+0

WFM - 爲我工作。作爲一個hebe我得說你的代碼聞起來像一個goyim。儘管如此,你的例子是不言自明的,也就是所謂的IOTTMCO--對於最偶然的觀察者來說,這很直觀。格拉西亞斯阿米戈。 –