我正在制作音乐打字游戏的一部分,虽然我已经创建了一些代码,可以播放已经加载到XNA内容管理器中的歌曲,但我正在尝试创建可以播放基于MP3和WAV的内容在XML文件上。 这就是我对“硬编码”歌曲的看法:
Song music;
SoundEffect effect;
Dictionary<string, SoundEffect> effectlist = new Dictionary<string, SoundEffect>();
Dictionary<string, Song> songlist = new Dictionary<string, Song>();
public Audio()
{
}
public void playSong(string songName)
{
songlist.TryGetValue(songName, out music);
MediaPlayer.Play(music);
}
public void playEffect(string eftName)
{
effectlist.TryGetValue(eftName, out effect);
effect.Play();
}
public void addSong(string aKey, Song aSong)
{
songlist.Add(aKey, aSong);
}
public void addEffect(string iKey, SoundEffect anEffect)
{
effectlist.Add(iKey, anEffect);
}
我只了解XML的基础知识,比如在控制台应用程序中显示XML文件中的文本。如何使用XML播放声音?
答案 0 :(得分:1)
您无法使用XML播放声音,您可以使用XML来驱动应用程序,以便您可以根据xml文件的内容播放声音。
例如,假设您有类似
的内容<songs>
<song name="songA" file="1.mp3" />
<song name="songB" file="2.mp3" />
<song name="songC" file="3.mp3" />
</songs>
您可以将xml读取为类似xDocument的内容,当您的应用程序请求您播放“songA”时,您可以在xDocument中查找该歌曲并播放相关的音乐文件。
这使您可以通过配置更改应用程序的行为,而不是将所有内容都硬编码。
编辑:粗略的代码示例,以便您了解...
private XDocument m_Songs;
public Audio()
{
m_Songs = XDocument.Load("My XML Source");
}
public void playSong(string songName)
{
XElement match = m_Songs.Descendants()
.Where(x => x.Name.LocalName == "song")
.FirstOrDefault(x => x.Attribute("name").Value == "songName");
if (match == null)
return;
songlist.TryGetValue(match.Attribute("file").Value, out music);
MediaPlayer.Play(music);
}