【问题标题】:playing sound files based on xml in C#在 C# 中播放基于 xml 的声音文件
【发布时间】:2014-02-05 17:41:38
【问题描述】:

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

【问题讨论】:

    标签: c# xml xna mp3 wav


    【解决方案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);
        }
    

    【讨论】:

    • 感谢您抽出宝贵时间回答,非常感谢。你能解释一下这个例子的作用吗?我不知道使用 XDocument 和 XElement。
    • 构造函数将 XML 文档解析到封装在 XDocument 类型对象中的内存中。当调用playsong() 时,LINQ 查询会搜索XML(通过XDocument)来寻找匹配的歌曲名称。如果找到,它会将与歌曲名称关联的名称文件传递给您的原始代码。不知道你存储什么来识别一首歌曲,这有点做作 - 但它只是让你了解它是如何工作的。如果你想知道如何使用 Linq,google 101 linq samples - 如果你想学习使用 XDocument - 你应该在 MSDN 上查找它。
    • 再次感谢您。这将是一个很大的帮助!
    • 没问题。如果您对此答案感到满意,请不要忘记将其标记为已接受的答案。祝你好运!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多