Thanks for posting your xml. I wouldn't have understood what was happening without being able to see your commands.
I've made some revisions to your command group. Within each command, I've added a description to try to explain what is happening.
If you copy the command group into your tree, you can open up each command to read the explanation.
I recommend that you delete your current command group before trying to use this new version, because otherwise you'll have two groups in your tree that use the same command phrases and VC will get confused. If you want to revert back to your original commands, you can simply grab them again from this thread.
You'll also need to download the attached payload xml file and place it in your "net radio payloads" folder.
<?xml version="1.0" encoding="utf-16"?>
<!--VoxCommando 2.1.0.3-->
<commandGroup open="True" name="New Net Radios" enabled="True" prefix="" priority="0" requiredProcess="" description="">
<command id="393" name="Listen to Net Radios" enabled="true" alwaysOn="False" confirm="False" requiredConfidence="0" loop="False" loopDelay="0" loopMax="0" description="">
<action>
<cmdType>TTS.Speak</cmdType>
<params>
<param>Which radio station would like to to listen to?|What station did you have in mind?|Sure, I can turn on the radio. What station should I tune to?</param>
</params>
<cmdRepeat>1</cmdRepeat>
</action>
<phrase>Listen to net radios</phrase>
</command>
<command id="367" name="What are my options?" enabled="true" alwaysOn="False" confirm="False" requiredConfidence="0" loop="False" loopDelay="0" loopMax="0" description="This reads (scrapes) your payload xml file with all the radio station names. It finds the first phrase for each station name (because the file includes different ways to say the same station name -- e.g. "Smooth Jazz Florida" or just "Smooth Jazz"). It then creates a list of all the stations by concatenating (joining together) all of the stations it has matched. {CR} is a carriage return. It makes sure that each match found is listed on its own line.

This is more complicated than you need for your simple list of 2 stations. But if you eventually want to add different ways to say the same station name then this solution should be more robust.">
<action>
<cmdType>File.Read</cmdType>
<params>
<param>net radio payloads\internet radio stations.xml</param>
</params>
<cmdRepeat>1</cmdRepeat>
</action>
<action>
<cmdType>Results.RegEx</cmdType>
<params>
<param><phrase>(.*?)[,|<]</param>
</params>
<cmdRepeat>1</cmdRepeat>
</action>
<action>
<cmdType>Results.MatchConcat</cmdType>
<params>
<param>{CR}</param>
<param>20</param>
</params>
<cmdRepeat>1</cmdRepeat>
</action>
<action>
<cmdType>OSD.ShowText</cmdType>
<params>
<param>{LastResult}</param>
</params>
<cmdRepeat>1</cmdRepeat>
</action>
<action>
<cmdType>TTS.Speak</cmdType>
<params>
<param>{LastResult}</param>
</params>
<cmdRepeat>1</cmdRepeat>
</action>
<phrase>What are my options?</phrase>
</command>
<command id="217" name="Play shoutcast radio station" enabled="true" alwaysOn="False" confirm="False" requiredConfidence="0" loop="False" loopDelay="0" loopMax="0" description="Since both of your radio stations (Smooth Jazz & The Source) are Shoutcast stations, you don't need to have so many separate commands. Payloads allow you to re-use command structures when they follow all the same rules.

For these Shoutcast stations, you need just one single payload xml file. Each radio station has a phrase -> value pair of "radio station name" -> "URL". When you ask VC to play a radio station, it looks for the station name and finds the associated URL in the payload XML file. The syntax {1} refers to the payload value. In this command, when you ask for a specific station, it will consult the payload XML station, find the associated URL, and then use that URL in all 3 actions that you can see above.

Previously, you had 2 payload XML files, but you weren't actually passing the payload values to the command. Instead, you had hard-coded the URL in each command. VC was looking in those files for the radio station name, but it did nothing at all with the URL (payload value).">
<action>
<cmdType>Sound.PlayStream</cmdType>
<params>
<param>{1}</param>
</params>
<cmdRepeat>1</cmdRepeat>
</action>
<action>
<cmdType>Results.SetVar</cmdType>
<params>
<param>nowplaying</param>
<param>{1}</param>
</params>
<cmdRepeat>1</cmdRepeat>
</action>
<action>
<cmdType>PayloadXML.GetPhrase</cmdType>
<params>
<param>net radio payloads\internet radio stations.xml</param>
<param>{1}</param>
<param>Random</param>
</params>
<cmdRepeat>1</cmdRepeat>
</action>
<action>
<cmdType>OSD.ShowText</cmdType>
<params>
<param>Now playing {LastResult}</param>
<param>30000</param>
</params>
<cmdRepeat>1</cmdRepeat>
</action>
<action>
<cmdType>TTS.Speak</cmdType>
<params>
<param>Now playing {LastResult}</param>
</params>
<cmdRepeat>1</cmdRepeat>
</action>
<phrase>play </phrase>
<payloadFromXML phraseOnly="False" use2partPhrase="False" phraseConnector="by" Phrase2wildcard="anyone" optional="False">net radio payloads\internet radio stations.xml</payloadFromXML>
</command>
<command id="268" name="stop the stream" enabled="true" alwaysOn="False" confirm="False" requiredConfidence="0" loop="False" loopDelay="0" loopMax="0" description="">
<action>
<cmdType>Sound.StopStream</cmdType>
<params />
<cmdRepeat>1</cmdRepeat>
</action>
<action>
<cmdType>Results.SetVar</cmdType>
<params>
<param>nowplaying</param>
<param>no radio</param>
</params>
<cmdRepeat>1</cmdRepeat>
</action>
<phrase>stop the stream, stop playing</phrase>
</command>
<command id="453" name="get song info" enabled="true" alwaysOn="False" confirm="False" requiredConfidence="0" loop="False" loopDelay="0" loopMax="0" description="In your "play [radio station x]" command, I added an action that stores the radio station URL as a variable called "nowplaying". This allows VC to "know" what station is currently playing. Then we can use that variable in other commands. Here we are using it to tell VC which radio station URL to scrape to find out what song is playing.

If you stop the internet radio stream, the "nowplaying" variable is set to "no radio". (See the "stop the stream" command.) Here in this command, I tell VC that if the "nowplaying" variable contains the words "no radio" it should do nothing at all (exit this macro). Otherwise, it should look up the currently playing song info at the URL provided.">
<if ifBlockDisabled="False" ifNot="False">
<ifType>(A)Contains(B)</ifType>
<ifParams>{var.nowplaying}&&no radio</ifParams>
<then>
<action>
<cmdType>VC.StopMacro</cmdType>
<params />
<cmdRepeat>1</cmdRepeat>
</action>
</then>
<else>
<action>
<cmdType>Scrape.UserAgent</cmdType>
<params>
<param>{var.nowplaying}</param>
<param>Mozilla</param>
</params>
<cmdRepeat>1</cmdRepeat>
</action>
<action>
<cmdType>System.SetClipboardText</cmdType>
<params>
<param>{LastResult}</param>
</params>
<cmdRepeat>1</cmdRepeat>
</action>
<action>
<cmdType>Results.RegEx</cmdType>
<params>
<param>Current.Song:.*?<b>(.*?).-.(.*?)</b></param>
</params>
<cmdRepeat>1</cmdRepeat>
</action>
<action>
<cmdType>OSD.ShowText</cmdType>
<params>
<param>Artist: {Match.1.1}{cr}Song: {Match.1.2}</param>
</params>
<cmdRepeat>1</cmdRepeat>
</action>
<action>
<cmdType>TTS.Speak</cmdType>
<params>
<param>This is the song {Match.1.2}, by the artist {Match.1.1}.</param>
</params>
<cmdRepeat>1</cmdRepeat>
</action>
</else>
</if>
<phrase>song info, what song is this, what's playing right now</phrase>
</command>
<command id="247" name="What station is this" enabled="true" alwaysOn="False" confirm="False" requiredConfidence="0" loop="False" loopDelay="0" loopMax="0" description="In your "play [radio station x]" command, I added an action that stores the radio station URL as a variable called "nowplaying". This allows VC to "know" what station is currently playing. Then we can use that variable in other commands -- to scrape the correct station to find out what song is playing, and here, we use the now playing variable to look up the associated radio station name from your"internet radio stations" payload XML file.">
<action>
<cmdType>PayloadXML.GetPhrase</cmdType>
<params>
<param>net radio payloads\internet radio stations.xml</param>
<param>{var.nowplaying}</param>
<param>Random</param>
</params>
<cmdRepeat>1</cmdRepeat>
</action>
<action>
<cmdType>OSD.ShowText</cmdType>
<params>
<param>This is {LastResult}</param>
</params>
<cmdRepeat>1</cmdRepeat>
</action>
<action>
<cmdType>TTS.Speak</cmdType>
<params>
<param>This is {LastResult}</param>
</params>
<cmdRepeat>1</cmdRepeat>
</action>
<phrase>What station is this, Name this station</phrase>
</command>
</commandGroup>
If you haven't yet done so, I highly recommend that you watch the 2 "Editing & Building Commands" video tutorials.
http://voxcommando.com/mediawiki/index.php?title=Video_Tutorials#Core_ConceptsOr if you've already watched those, perhaps re-watch them after reviewing my comments in the attached commands. Payloads are powerful and important tools in VoxCommando -- central to how it functions. It's important to genuinely understand how they work.