gpt4 book ai didi

c# - 使用Windows Media Player库无法播放两个音频剪辑

转载 作者:行者123 更新时间:2023-12-03 00:34:02 24 4
gpt4 key购买 nike

这可能真的很容易解决,但对于我的一生,我无法弄清楚。

我想做的是在我的C#项目中连续播放两个音频剪辑。但是,我不希望在播放第一个剪辑之前播放下一个剪辑。

总而言之,这就是我正在做的(旧代码):

public static void PlayAudioClip(string path)
{
Console.WriteLine(path) // Just so we know which file is playing.
wplayer.controls.stop();
wplayer.URL = path;
wplayer.controls.play();
}

public static void CharacterTalking()
{
PlayAudioClip(@"C:\Game\Audio\Hello world.mp3");
PlayAudioClip(@"C:\Game\Audio\How are you today.mp3");
}

现在,两个片段都没有播放,而没有一个片段播放。我一直无法弄清楚为什么。

我更愿意使用Windows Media Player库,但是如果您有其他建议,请随时分享。我不需要为此使用Windows Media Player。

here发布了一个类似的问题,解释了如何循环文件,但这不是我想要的。这有助于说明我可以使用事件处理程序来检查文件的状态,但这对本解决方案没有帮助。也许有,但我只是想得太多。

编辑:它发生在我之前,我没有解释。道歉。假定我给出的这两个音频文件不是程序最终仅有的两个文件。我想让我的PlayAudioClip()函数始终等待上一个剪辑结束播放。

////////////////////////////////////////

编辑2:这是一种非常复杂的绕行方式,但这是我的新尝试,使用了我学习的 here信息。

新代码:
public static List<String> Playlist = new List<string>();
public static void AddToPlaylist(string path)
{
Playlist.Add(path);
Console.WriteLine("Queued " + path);
}

public static void RunPlaylist()
{
PlayAudioClip(Playlist.First());
}

private void Wplayer_PlayStateChange(int NewState)
{
switch (NewState)
{
case 0:
WriteFancyConsoleLine("PlayState = wmppsUndefined", ConsoleColor.DarkGray);
break;
case 1:
WriteFancyConsoleLine("PlayState = wmppsStopped", ConsoleColor.Red);
try
{
Playlist.Remove(Playlist.First());
try
{
PlayAudioClip(Playlist.First());
}
catch
{
WriteFancyConsoleLine("Playlist is now empty!", ConsoleColor.DarkRed);
}
}
catch
{
WriteFancyConsoleLine("Playlist already empty!", ConsoleColor.DarkRed);
}
break;
case 2:
WriteFancyConsoleLine("PlayState = wmppsPaused", ConsoleColor.Yellow);
break;
case 3:
WriteFancyConsoleLine("PlayState = wmppsPlaying", ConsoleColor.Green);
break;
case 4:
WriteFancyConsoleLine("PlayState = wmppsScanForward", ConsoleColor.DarkMagenta);
break;
case 5:
WriteFancyConsoleLine("PlayState = wmppsScanReverse", ConsoleColor.Magenta);
break;
case 6:
WriteFancyConsoleLine("PlayState = wmppsBuffering", ConsoleColor.Gray);
break;
case 7:
WriteFancyConsoleLine("PlayState = wmppsWaiting", ConsoleColor.DarkYellow);
break;
case 8:
WriteFancyConsoleLine("PlayState = wmppsMediaEnded", ConsoleColor.DarkRed);
break;
case 9:
WriteFancyConsoleLine("PlayState = wmppsTransitioning", ConsoleColor.DarkGray);
break;
case 10:
WriteFancyConsoleLine("PlayState = wmppsReady", ConsoleColor.Magenta);
break;
case 11:
WriteFancyConsoleLine("PlayState = wmppsReconnecting", ConsoleColor.Magenta);
break;
case 12:
WriteFancyConsoleLine("PlayState = wmppsLast", ConsoleColor.DarkBlue);
break;
}
}

public static void PlayAudioClip(string path)
{
WriteFancyConsoleLine("Playing " + path, ConsoleColor.Gray);
wplayer.controls.stop();
wplayer.URL = path;
wplayer.controls.play();
}

private void CharacterTalking() // This is where the magic happens.
{
AddToPlaylist(@"C:\Game\Audio\Hello world.mp3");
AddToPlaylist(@"C:\Game\Audio\How are you today.mp3");
RunPlaylist();
}

但是,第二个音频片段仍然无法播放。在控制台中,出现wmppsStopped后,它说它尝试播放下一个剪辑,但随后只是在wmppsTransitioning和wmppsReady之间跳了几次。

最佳答案

创建一个播放列表,添加您的歌曲,然后播放列表:

WMPLib.IWMPPlaylist Playlist = wplayer.newPlaylist("MyPlayList", "");  
Playlist.appendItem(wplayer.newMedia(@"C:\Game\Audio\Hello world.mp3"));
Playlist.appendItem(wplayer.newMedia(@"C:\Game\Audio\How are you today.mp3"));
wplayer.currentPlaylist = Playlist;
wplayer.controls.play();

关于c# - 使用Windows Media Player库无法播放两个音频剪辑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44295265/

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