gpt4 book ai didi

c# - 如何在不播放或存储的情况下获取 mp3 文件的持续时间

转载 作者:太空狗 更新时间:2023-10-29 21:57:57 26 4
gpt4 key购买 nike

我正在构建一个 wp8 应用程序,它可以逐行播放显示在列表框中的诗歌。

假设我有 20 行诗在列表框中显示为 20 个项目。我有 20 个 mp3 文件(每行一个),我使用 BackgroundAudioPlayer 播放单个文件并在列表框中选择每个项目(诗歌)。在播放这些mp3文件的过程中,有1-3秒的延迟,所以我找到了这些mp3文件的完整版(20个文件合并为一个),逐行朗读。

我正在使用 BackgroundAudioPlayer 播放这个 mp3 文件。作为一个文件播放,我无法选择列表框中的每个项目,因为我不知道播放一个 mp3 文件的行号。

现在我想要的是秒级存储20个文件的时长,不存储不播放。这些文件位于一个链接中 (http:123.com/1.mp3,/2.mp3, ...)

我使用了带绝对路径的 AudioTrack,然后使用了 duration 属性,但它总是返回零。如何在不播放 mp3 文件的情况下获取它们的持续时间?

已编辑:在我做的后台代理中:

protected override void OnPlayStateChanged(BackgroundAudioPlayer player, AudioTrack track, PlayState playState)
{
switch (playState)
{
case PlayState.TrackReady:
TrackDuration tr = DataSource.Connection.Table<TrackDuration>().SingleOrDefault();
if (tr.IsGetTrackDuration)
{
if (player.Track != null)
{
player.Position = TimeSpan.FromSeconds(player.Track.Duration.TotalSeconds);
Recitation r = DataSource.Connection.Query<Recitation>("select * from Recitation where ID = " + player.Track.Title).SingleOrDefault();
r.AyaDuration = player.Track.Duration.TotalSeconds;
DataSource.saveRecitionDownloaded(r);
PlayNextTrack(player);
}
}
break;
}
NotifyComplete();
}

protected override void OnUserAction(BackgroundAudioPlayer player, AudioTrack track, UserAction action, object param)
{
switch (action)
{
case UserAction.Play:
PlayTrack(player);
break;
case UserAction.Seek:
if (null!=player.Track)
player.Position = (TimeSpan)param;
break;
}
NotifyComplete();
}

private void PlayNextTrack(BackgroundAudioPlayer player)
{
if (++currentTrackNumber >= audioTrack.Count)
return;
PlayTrack(player);
}

private void PlayTrack(BackgroundAudioPlayer player)
{
//If No Track then load Track
if (audioTrack.Count == 0)
{
//Load Tracks and Add them into Track Play List
}
if ((player.Track == null) || (player.Track.Title != audioTrack[currentTrackNumber].Title))
player.Track = audioTrack[currentTrackNumber];

if ((player.Track != null) && (player.PlayerState != PlayState.Playing))
player.Play();
}

问题是它播放了一些我不想要的文件。 (tr.IsGetTrackDuration) 始终为真,但我不知道它为什么播放一些?

最佳答案

MusicProperties类在持续时间内有一个属性

 MusicProperties musicProperties = await file.Properties.GetMusicPropertiesAsync();
outputText.AppendLine("Duration: " + musicProperties.Duration);

关于c# - 如何在不播放或存储的情况下获取 mp3 文件的持续时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21465980/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com