Here's one way to adapt the MRSS template to play mp3 audio files. This was tested using the old 1.1.1 MRSS template rather than the one in the 4.1 SDK which seems to be buggy (several duplicate functions defined).
Step 1, edit the config.opml file to include a feed that contains mp3 audio. For example, I added the Tech Report podcast feed at the end:
<?xml version="1.0" encoding="ISO-8859-1"?>
<opml version="1.0">
<body
backgroundColor="#444444"
leftBreadcrumbColor="#00EE00"
rightBreadcrumbColor="#0000EE"
posterScreenTitleColor="#EEEE00"
posterScreenSubtitleColor="#00EE00"
posterScreenSynopsisColor="#EEEEEE"
springboardScreenTitleColor="#00EE00"
springboardScreenSynopsisColor="#EEEEEE"
springboardScreenActorColor="#EEEE00"
springboardScreenDirectorColor="#EEEE00"
springboardScreenDateColor="#EEEE00">
<outline title="TED Talks" subtitle="Ideas worth spreading" img="http://ted.streamguys.net/TEDTalksvideo_tile_144.jpg" url="http://feeds.feedburner.com/tedtalks_video" />
<outline title="Loaded" subtitle="powered by CNET.com" img="http://www.cnet.com/i/pod/images/podcastsHD_loaded_300x300.jpg" url="http://loadedhdpodcast.cnettv.com" />
<outline title="Engadget" subtitle="" img="http://www.blogsmithmedia.com/www.engadget.com/media/engadgetshow_logo.png" url="http://www.engadget.com/engadgetshow_hd.xml" />
<outline title="Tech Report" subtitle="Audio Feed" img="http://techreport.com/r.x/podcast/trpodcastfeature5.png" url="http://techreport.com/podcast_mp3.rss" />
</body>
</opml>
Step 2, Edit NWM_MRSS.brs to add code to parse for mp3 files and set the correct stream format. The file should end with the following code:
else if item.enclosure.Count() > 0
' we didn't find any media:content tags, try the enclosure tag
url = ValidStr(item.enclosure@url)
if item.enclosure@type = "audio/mpeg" or LCase (Right (url, 4)) = ".mp3"
newItem.streamFormat = "mp3"
newItem.url = url
else
newStream = {
url: ValidStr(item.enclosure@url)
}
newItem.streams.Push(newStream)
endif
'PrintAA(newItem)
result.Push(newItem)
end if
next
end if
return result
end function
Step 3, Change SpringboardScreen.brs to add code to display an audio springboard screen if the content is an mp3 stream. Add an 'if' statement after the function declaration:
function ShowSpringboardScreen(episodes, selectedEpisode, leftBread, rightBread)
if episodes [selectedEpisode].streamFormat = "mp3"
return ShowAudioScreen(episodes, selectedEpisode, leftBread, rightBread)
endif
Step 4, Change the code in EpisodeScreen.brs to display the audio screen for audio content:
else if msg.isRemoteKeyPressed()
if msg.GetIndex() = 13
if content[selectedEpisode].streamFormat = "mp3"
ShowAudioScreen(content, selectedEpisode, leftBread, "")
else
ShowVideoScreen(content[selectedEpisode])
endif
end if
Step 5, Create a new file, ShowAudioScreen.brs for the springboard screen and audio player code to handle mp3 files:
function ShowAudioScreen(episodes, selectedEpisode, leftBread, rightBread)
' Use a common message port for the audio player and springboard screen
port = CreateObject("roMessagePort")
' Set up the audio player
audio = CreateObject("roAudioPlayer")
audio.SetMessagePort(port)
audio.AddContent({Url: episodes[selectedEpisode].url, StreamFormat: episodes[selectedEpisode].streamFormat})
audio.SetLoop(0)
audio.SetNext(0)
' Set up the springboard screen
screen = CreateObject("roSpringboardScreen")
screen.SetMessagePort(port)
screen.SetBreadcrumbText(leftBread, rightBread)
screen.SetStaticRatingEnabled(false)
screen.AddButton(1, "Play")
screen.SetContent(episodes[selectedEpisode])
screen.Show()
while true
msg = wait(0, port)
if type (msg) = "roSpringboardScreenEvent"
if msg.isScreenClosed()
exit while
else if msg.isButtonPressed()
button = msg.GetIndex ()
if button = 1 ' Play Button
audio.Play()
screen.ClearButtons()
screen.AddButton(2, "Pause")
screen.AddButton(4, "Stop")
else if button = 2 ' Pause Button
audio.Pause()
screen.ClearButtons()
screen.AddButton(3, "Resume")
screen.AddButton(4, "Stop")
else if button = 3 ' Resume Button
audio.Resume()
screen.ClearButtons()
screen.AddButton(2, "Pause")
screen.AddButton(4, "Stop")
else if button = 4 ' Stop Button
audio.Stop()
screen.ClearButtons()
screen.AddButton(1, "Play")
endif
else if msg.isRemoteKeyPressed()
if msg.GetIndex() = 4 ' < LEFT
screen.ClearButtons()
audio.Stop()
audio.ClearContent()
if selectedEpisode = 0
selectedEpisode = episodes.Count() - 1
else
selectedEpisode = selectedEpisode - 1
end if
audio.AddContent({Url: episodes[selectedEpisode].url, StreamFormat: episodes[selectedEpisode].streamFormat})
screen.SetContent(episodes[selectedEpisode])
screen.AddButton(1, "Play")
else if msg.GetIndex() = 5 ' > RIGHT
screen.ClearButtons()
audio.Stop()
audio.ClearContent()
if selectedEpisode = episodes.Count() - 1
selectedEpisode = 0
else
selectedEpisode = selectedEpisode + 1
end if
audio.AddContent({Url: episodes[selectedEpisode].url, StreamFormat: episodes[selectedEpisode].streamFormat})
screen.SetContent(episodes[selectedEpisode])
screen.AddButton(1, "Play")
end if
end if
else if type (msg) = "roAudioPlayerEvent"
' Do nothing
end if
end while
return selectedEpisode
end function