
squirreltown
Roku Guru
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
07-09-2013
09:16 AM
Array index
Trying to get a value from an array of audio tracks. I cant use the index from AudioplayerEvent because it always starts at O even if you decide to start playing from track 3 so I've put an index value in the array, an integer, to identify the track so the screen can be accurate.
Num:"0"
When i try to access the value i get the debugger error "non-numeric array index not allowed" code excerpted below, which i dont understand, can someone explain?
thanks
Num:"0"
When i try to access the value i get the debugger error "non-numeric array index not allowed" code excerpted below, which i dont understand, can someone explain?
thanks
item=[
{
Url: "http://www.xxx.com/roku/songs/song.mp3",
....other parameters
Num:"0"
},
{
.....other tracks
}]
if type (msg) = "roAudioPlayerEvent"
if msg.isListItemSelected()
m.song = msg.GetIndex()
end if
if msg.isStatusMessage() then
if msg.getmessage() = "start of play"
m.song = item["Num"]
scr.SetContent(item[m.song])
end if
end if
231: End Function
Attempt to use a non-numeric array index not allowed. (runtime error &he8) in ...c/pkg:/source/audioscreen.brs(219)
219: m.song = item["Num"]
Kinetics Screensavers
20 REPLIES 20

RokuJoel
Binge Watcher
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
07-09-2013
10:00 AM
Re: Array index
if you put quotes around a number, it becomes a string, if you want to use a string variable, you'll have to use the toint() function to convert to integer when you use it as an array index.
-Joel
-Joel

squirreltown
Roku Guru
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
07-09-2013
10:02 AM
Re: Array index
Thanks Joel, I'll do that - It didn't work without the quotes , I guess that is because the array format is only allowing strings?
Kinetics Screensavers

squirreltown
Roku Guru
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
07-09-2013
10:42 AM
Re: Array index
If this information were available some where else i would be able to find it and not have to ask basic questions like this.
m.song = item["Num"]
what is the syntax for converting "num" in this context with toInt()?
all the examples of toInt() I've found are like - Playstart.ToInt() a variable with a dot operator
So I've tried a bunch of things that dont work Like this:
var = item["Num"]
m.song = var.toInt()
scr.SetContent(item[m.song])
I keep getting the "non-numeric index" error on the first line.
What am i doing wrong?
m.song = item["Num"]
what is the syntax for converting "num" in this context with toInt()?
all the examples of toInt() I've found are like - Playstart.ToInt() a variable with a dot operator
So I've tried a bunch of things that dont work Like this:
var = item["Num"]
m.song = var.toInt()
scr.SetContent(item[m.song])
I keep getting the "non-numeric index" error on the first line.
What am i doing wrong?
Kinetics Screensavers

RokuJoel
Binge Watcher
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
07-09-2013
11:00 AM
Re: Array index
Ok, looking at your code. Item is an array of associative arrays each containing the information to play one song. The first song in that array would be item[0], the next song in the array would item[1] etc. You probably don't need to store the array index with the song in the array, since the song is already at that index value in the array.
if you wanted for some reason to get the value of a variable within one of the songs in your array, lets say the second song, you would need to do something like this:
You might want to track your position in the song array with a variable that you increment yourself, for example a variable called songindex:
- Joel
if you wanted for some reason to get the value of a variable within one of the songs in your array, lets say the second song, you would need to do something like this:
m.song=item[1]["num"]
or
m.song=item[1].num
You might want to track your position in the song array with a variable that you increment yourself, for example a variable called songindex:
else if msg.getmessage()="end of stream" then
if songindex < item.count() -1 then
songindex=songindex+1
scr.setcontent(item[songindex])
end if
- Joel

squirreltown
Roku Guru
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
07-09-2013
11:29 AM
Re: Array index
Thank you very much Joel, syntax is everything.
You are absolutely correct. I really dont need to do that. Except that I dont know the syntax for getting the current position of an array and believe me I've looked for it everywhere. If i knew that i wouldn't be doing it this silly way. It has to be something like
item.index
return item.index
But then "something like" just gets me hours of errors so I'm going with the only thing i can think of. I'd love to use your very helpful "songindex" code, but i cant without defining "songindex" as the current array position first right?
thats the problem i have here, i dont know the index - I need to ask the array where its at. Th audio is playing in the background and all is fine until the track advances and then my screens are off.
edit - this is happening in a slideshow, you turn the music on, leave the springboard for the slideshow, and i want to have the correct track showing when you return to it . The audio part goes along just fine its getting the screen to track what the audio is doing is my issue.
Thanks again for your help.
"RokuJoel" wrote:
You probably don't need to store the array index with the song in the array, since the song is already at that index value in the array.
You are absolutely correct. I really dont need to do that. Except that I dont know the syntax for getting the current position of an array and believe me I've looked for it everywhere. If i knew that i wouldn't be doing it this silly way. It has to be something like
item.index
return item.index
But then "something like" just gets me hours of errors so I'm going with the only thing i can think of. I'd love to use your very helpful "songindex" code, but i cant without defining "songindex" as the current array position first right?
thats the problem i have here, i dont know the index - I need to ask the array where its at. Th audio is playing in the background and all is fine until the track advances and then my screens are off.
edit - this is happening in a slideshow, you turn the music on, leave the springboard for the slideshow, and i want to have the correct track showing when you return to it . The audio part goes along just fine its getting the screen to track what the audio is doing is my issue.
Thanks again for your help.
Kinetics Screensavers

RokuJoel
Binge Watcher
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
07-09-2013
11:41 AM
Re: Array index
you have to track it manually so to speak:
if the current playing song has ended then check if index is less than the maximum number of items, if so then increment index:
- Joel
index=0
currentsong=item[index]
screen.setcontent(currentsong)
if the current playing song has ended then check if index is less than the maximum number of items, if so then increment index:
if index < item.count() - 1 then index=index+1
currentsong=item[index]
screen.setcontent(currentsong)
- Joel

squirreltown
Roku Guru
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
07-09-2013
12:04 PM
Re: Array index
Ok i probably could have saved you a bunch of time by asking the correct question, as I am already doing what you've described - tracking it manually.
Opening the springboard screen sets the index variable (m.song in my case) at 0 if the music is not playing.
You either start the music then or select another track. If you start from another track, the m.song variable gets set manually the way you said.
Now close the screen and open the slideshow. Now pause the slideshow and open the springboard screen again.
Because of the m. in the index variable the springboard screen remembers the track you chose to start from and shows it, so everything so far works just fine until:
the audio advances to the next song.
Here is the correct question i should have asked: How do i ask the array - not the audio player, where its currently at?
If i could get that info, I could come back to the right screen info from anywhere and i could make the screen update on track change when its open.
I'm sorry i didn't ask this right away, theres a lot of running in circles when you dont know what your doing.
Opening the springboard screen sets the index variable (m.song in my case) at 0 if the music is not playing.
You either start the music then or select another track. If you start from another track, the m.song variable gets set manually the way you said.
Now close the screen and open the slideshow. Now pause the slideshow and open the springboard screen again.
Because of the m. in the index variable the springboard screen remembers the track you chose to start from and shows it, so everything so far works just fine until:
the audio advances to the next song.
Here is the correct question i should have asked: How do i ask the array - not the audio player, where its currently at?
If i could get that info, I could come back to the right screen info from anywhere and i could make the screen update on track change when its open.
I'm sorry i didn't ask this right away, theres a lot of running in circles when you dont know what your doing.
Kinetics Screensavers

squirreltown
Roku Guru
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
07-09-2013
12:57 PM
Re: Array index
This advances the screen info to match the audio when the springboard is open so thats one problem solved. Hopefully, since the m. causes the variable to be saved when the springboard closes and re-opens, i can add this to the other message loops and it will increment then too. Hope to edit this post after with positive results.
Edit - Nope that doesnt work in the background. Still think my "index in the array" scheme will work if i can figure out the item["Num"].toInt() syntax.
if type (msg) = "roAudioPlayerEvent"
if msg.isListItemSelected()
m.song = msg.GetIndex()
end if
if msg.isStatusMessage() then
if msg.getmessage() = "start of play"
scr.SetContent(item[m.song])
end if
end if
Edit - Nope that doesnt work in the background. Still think my "index in the array" scheme will work if i can figure out the item["Num"].toInt() syntax.
Kinetics Screensavers

RokuJoel
Binge Watcher
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
07-09-2013
02:45 PM
Re: Array index
You need to increment the index when the track ends. If you are calling a slideshow, you need to pass the index to the slideshow, and return the index back to the springboard function when the slideshow ends:
and your slideshow:
index=slideshow(item,index)
and your slideshow:
function slideshow(item as object, index as integer) as integer
.....
return index
end function