在C#中播放基于xml的声音文件

时间:2014-02-05 17:41:38

标签: c# xml xna mp3 wav

我正在制作音乐打字游戏的一部分,虽然我已经创建了一些代码,可以播放已经加载到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播放声音?

1 个答案:

答案 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);
    }