powershell ‘system.windows.media.mediaplayer’ Register-ObjectEvent

#powershell #media

#powershell #дескриптор #soundplayer

Вопрос:

Я пытаюсь использовать медиаплеер ‘system.windows.media.mediaplayer’ для воспроизведения списка звуковых файлов, однако у меня возникают проблемы с тем, чтобы медиаплеер знал, когда воспроизводить следующий звуковой файл.

Я пытаюсь использовать дескриптор события ‘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:WindowsMediachimes.wav')
$mediaplayer.Play()
sleep 3
$mediaPlayer.Open('C:WindowsMediachimes.wav')
$mediaplayer.Play()
 

В данный момент я просто проигрываю любой звуковой файл, чтобы попытаться запустить дескриптор события.

Пожалуйста, помогите мне!

Ответ №1:

 Add-Type -AssemblyName PresentationCore 
$_MediaPlayer = New-Object System.Windows.Media.MediaPlayer 
$_MusicFolder = 'C:UsersMaking JESUS ProudMusic'
$_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. Пожалуйста, объясните свой ответ, а не просто дайте его. Это поможет обучить людей и будет полезно для людей с похожими, но немного отличающимися проблемами.