2014-02-05 3 views
1

Я занимаюсь музыкальной типизацией, и, хотя я создал код, который будет воспроизводить песни, которые уже загружены в XNA Content Manager, я пытаюсь создать то, что может воспроизводить MP3 и WAV на основе XML-файлов. Это то, что я для «жесткого закодированных» песни:Воспроизведение звуковых файлов на основе xml в C#

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

Вы не можете использовать 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, и когда ваши запросы приложений, которые вы играете «Сонг», вы можете поиск этой песни в вашем XDocument и воспроизведите связанный музыкальный файл.

Это позволяет изменить поведение приложения через конфигурацию, а не все жестко закодированные.

Edit: Грубый пример кода, так что вы получите идею ...

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); 
    } 
+0

Спасибо, что нашли время, чтобы ответить, я ценю это. Не могли бы вы подробнее рассказать о том, что делает этот пример? Я понятия не имею об использовании XDocument и XElement. – MajorKola

+0

Конструктор анализирует XML-документ в памяти, инкапсулированной в объект типа XDocument. Когда выполняется вызов playong(), запрос LINQ ищет XML (через XDocument) для соответствующего имени песни. Если он найден, он передает файл имени, связанный с именем песни, в исходный код. Не зная, что вы храните, чтобы идентифицировать песню, это немного надуманно - но это просто, чтобы вы поняли, как это работает. Если вы хотите знать, как использовать Linq, образцы 101 linq для Google - если вы хотите научиться использовать XDocument, вам, вероятно, стоит посмотреть его на MSDN. – Jay

+0

Еще раз большое спасибо. Это будет большой помощью! – MajorKola

Смежные вопросы