2016-04-15 7 views
0

多くのmp3ファイルを見てmediaElementを使ってnaturalDurationプロパティを取得するループを作成する必要があります。問題は、mediaElementがすべての単一のファイルをロードするのに時間が必要で、.sourceプロパティがasyncプロセスのように動作することです(私は思う)。なぜなら、naturalDurationプロパティを取得する場合、以下のコードを2回クリックする必要があるからです。私はちょうど00:00:00の値を持っている最初のクリック、2番目のクリックは私に本当の価値を与えます。media要素にnaturalDuration情報があるまで待ちます

.Source命令を待つと、アプリケーションはループを続けます。

Private Sub button_Click(sender As Object, e As RoutedEventArgs) Handles button.Click 

    mediaElement.Source = New Uri("\\Mac\Home\Desktop\NOVEDADES01\AbrahamMateo-OldSchool.mp3") 
    Do 
    Loop Until mediaElement.NaturalDuration.TimeSpan.TotalSeconds > 0 
    textBlock.Text = mediaElement.NaturalDuration.ToString 

End Sub 

私も非同期プロセスを通じて.SOURCE設定とmediaOpenendイベントを待ちますが、最初のクリックが

を終了するまでmediaElementoのように見える、それは私がnaturalDurationの真の価値を得ることができるどのように終了することはできません試してみますファイルを再生せずに.sourceプロパティを設定した直後に、単一のプロセスまたは関数の内部にある? ありがとうございました!

答えて

0

これは遅くてエレガントではないかもしれませんが、これはmp3ファイルの継続時間を取得するための私のソリューションでした。私はMusicPropertiesクラスを使用しました。文字列

Dim salida As String = "" 
    Dim miTask = Task.Run(Async Function() As Task(Of String) 
           Dim musicFile As StorageFile = Await StorageFile.GetFileFromPathAsync(elfichero) 
           Dim FileProperties As StorageItemContentProperties = musicFile.Properties 
           Dim musicFileProperties As MusicProperties = Await FileProperties.GetMusicPropertiesAsync() 
           Dim tiempo = musicFileProperties.Duration 
           Dim horas As String 
           If tiempo.Hours < 10 Then 
            horas = "0" & tiempo.Hours.ToString 
           Else 
            horas = tiempo.Hours.ToString 
           End If 
           Dim minutos As String 
           If tiempo.Minutes < 10 Then 
            minutos = "0" & tiempo.Minutes.ToString 
           Else 
            minutos = tiempo.Minutes.ToString 
           End If 
           Dim segundos As String 
           If tiempo.Seconds < 10 Then 
            segundos = "0" & tiempo.Seconds.ToString 
           Else 
            segundos = tiempo.Seconds.ToString 
           End If 
           Dim autor = musicFileProperties.Artist 
           Dim titulo = musicFileProperties.Title 

           Dim presalida As String = "[" & horas & ":" & minutos & ":" & segundos & "];[" & titulo & "];[" & autor & "] " & elfichero 
           Return presalida 
          End Function) 
    miTask.Wait() 
    salida = miTask.Result 
    Return salida 

End Function 

として(elfichero文字列として)

公開機能infoMP3が後のWindows 10上のファイルへのアクセスを取得するには、ファイル/フォルダのアクセス許可を保存する必要があります。選択するときにこれを行います。 rutaSはSotorageFolderオブジェクトである

...薄暗いlistToken = Windows.Storage.AccessCache.StorageApplicationPermissions.FutureAccessList.Add(rutaS) ...

関連する問題