RadioFreeMonkey 1.2
-
- Posts: 109
- Joined: Fri Jul 28, 2006 1:07 am
A question?
I really like the script but I do have one question, and I may have missed the way to select this, but I have a external hard drive for my laptop which has about 40% of my music on it. Is there a way when I am just using my C: drive, and not the external drive that the script would not pull in songs that are not accessable?
Thanks/Jeff
Thanks/Jeff
Hey,
I really want to try out this script, seems like something I'd be using a lot. However, I'm a bit confused about which version to install.
The original by Risser?
The update by popper?
The update to the update by ElGringo? I would simply use this one if it were not for popper's post where he says
I really want to try out this script, seems like something I'd be using a lot. However, I'm a bit confused about which version to install.
The original by Risser?
The update by popper?
The update to the update by ElGringo? I would simply use this one if it were not for popper's post where he says
So, who's right, popper or ElGringo?I am not so sure about this one. Please correct me if I am wrong, but the ratings are stored in the database using numbers from 0 (or -1) to 100. So to calculate the number of stars from a rating in the database, you have to divide by 20, and not by ten.
RadioFreeMonkey v1.6.1
Damn, it seems the automatic notification on changes in this topic does not work properly (or perhaps it got lost in my spam filter?). I did not get any notice that you all have been answering to this post!
So sorry for the long delay.
@TJOHO:
I haven't heard from ElGringo since, so I still don't really know if this was my mistake or his
All I can give you right now is the fix that I have done to put this issue right (well, right from my point of view):
So sorry for the long delay.
@TJOHO:
I haven't heard from ElGringo since, so I still don't really know if this was my mistake or his

Code: Select all
' RadioFreeMonkey
' Version 1.61
' A script to create a "radio station" for you based on your song ratings.
' #####################
' Version 1.2 by Risser
' This script creates a root node in the tree, beneath the library node, called "RadioFreeMonkey".
' Under this node, you have a Radio List node, a Done node and a Weightings node.
' - The Radio List node lists 20 songs, in random order. These are weighted, so songs
' with a higher weighting have a higher chance of getting selected.
' - If you have selected a sorting column, even though the songs are selected randomly, the
' radio list will be sorted based on that column. To return the list to "random" sorting, click
' on any playlist (Now Playing works nicely). When you visit the Radio List node, the songs will
' be unsorted, in true random order.
' - The Done list shows you which songs aren't going to be played. This includes songs that have
' passed their maximum playcount, or anything within MinDaysRepeat.
' - The Weighting node shows all tunes, sorted by their calculated weights. This can help you
' determine what the optimal weighting choices are for you. Plus, it's just nice to see what's
' more likely to be played.
' Songs are weighted as follows:
' Rating * 2 (5 stars = 10, 3.5 stars = 7, 0 stars = 0)
' - Number of Plays (if Reduce if Played is TRUE)
' + Days since added to library / DayFactor (always rounded down)
' However, the weighting can't be more than the original rating (* 2).
' TO DO: At some point, I'd like to make the main 'list' node a PlayList instead of a regular
' list of tracks, but I'm not sure how to do this.
'
' This script can be freely used and modified.
' This is an early release and there may be bugs. If it's causing you problems, simply delete
' it or move it out of the scripts\auto folder.
'
' The script does not modify the database, registry or INI file.
' #####################
' Version 1.5 by popper
' - added possibility to boost songs that have been added to the DB recently
' - added possibility to define the genres that should be played
' - redesign of the mechanism that selects the actual songs to be played (because I did not
' really understand what was going on in the existing algorithm ;-), with the goal of making
' it easier to influence what will be played (e.g. 30% of songs with a weighting of 8-10 and
' 70% with a weighting of 5-7))
' #####################
' Version 1.6 by ElGringo
' - Fixes to the algorithm
' - 1. There was always a song that had nothing to do in my playlists, investigated
' and saw the error in FillGoodLeaf
' - 2. There is an error in the calculation of the dateboost formula, the
' dateboostcutoff*20 should be dateboostcutoff*10. There were a couple of places wrong
' - 3. By adding, the BoostNewSongsModifier, the actual weight calculated, could go higher
' than 10, but the algorithm was never picking songs with a weight higher than 10. So,
' i fixed a couple of places in the script, so that calculated weight higher than 10,
' are now fixed at 10.
' - 4.There was a bug, when the BoostNewSongsModifier is set to 0... fixed it.
'
'
'
' #####################
' Version 1.6.1 by popper
' - In my opinion, the dateboostcutoff*20 (point 2. from ElGringo's list above) was correct
' ("Please correct me if I am wrong, but the ratings are stored in the database using
' numbers from 0 (or -1) to 100. So to calculate the number of stars from a rating in
' the database, you have to divide by 20, and not by ten.")
' So I changed it back in this release.
' No other modifications made. ElGringo was right in all other points ;-)
'
'
'
'
' Disclaimer:
' Use at your own risk. Back up your data before using.
' Changing some of the values might lead to endless loops that can only be solved by
' killing the MediaMonkey process, so take care when modifying anything!
'%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
' Global Variables and Declarations
'%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
Option Explicit
' %%% The caption for the root node.
Const RootNodeCaption = "Radio FreeMonkey 1.6.1"
' %%% Add 1 to weighting for each X days since added to library
Const DayFactor = 150
' %%% Anything rated this or below will not receive the 'date boost'
Const DateBoostCutoff = 1.5
' %%% The minimum number of days that must pass before a song is repeated. Zero means, go ahead
' and repeat it right away.
Const MinDaysRepeat = 5
' %%% Reduce the weighting by the number of times played. This means, as songs are played more often,
' they are less likely to be played again
Const ReduceIfPlayed = True
' %%% Boost Songs that have been added during the last n days (MinDaysRepeat does still apply for these)
Const BoostNewSongsDays = 75
' %%% The boost modifier for new songs (Zero means, don't boost):
' Add x to the weighting of these songs
Const BoostNewSongsModifier = 3
' %%% Anything rated this or below will not receive the 'new song boost'
Const BoostNewSongsCutoff = 1.5
' %%% Genres that should not be played. Leave empty (Const PlayGenres = "") to ignore.
' "-1, 13, 17, 20, 24" means "empty genre field, Pop, Rock, Alternative, Soundtrack"
' Look up the other genre Ids in the database by using MS Access
Const PlayGenres = "-1, 11, 13, 14, 17, 20, 24, 131, 132, 86, 80, 81, 7, 10"
' %%% Number of Songs in list
Const NumberOfSongs = 50
' %%% Influence which songs will be played. You have three sets that you can use
' Example:
' Const Set1Weight = 8.5 ' Basic weight for this set is 8.5
' Const Set1Boundary = 1.5 ' with a variation of 1.5, which means that songs between 7 and 10 will be chosen
' Const Set1Percentage = 60 ' this is how big the part of this set should be in the overall contents
Const Set1Weight = 8.5
Const Set1Boundary = 1.5
Const Set1Percentage = 60 ' make sure all 3 percentages sum up to 100!
Const Set2Weight = 6.0
Const Set2Boundary = 1
Const Set2Percentage = 40 ' make sure all 3 percentages sum up to 100!
Const Set3Weight = 2.0 ' Right now, it is not possible to choose songs with a weight < 1, so unfortunately you cannot add unrated songs
Const Set3Boundary = 1
'Const Set3Percentage = 20 ' This is not needed because it just takes what is missing to 100%
'%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
' The Meat. Don't change anything under here.
'%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
' the text of the formulas to be used throughout
Dim weightedRatingFormula, dateBoostFormula, ratingFormula, weightedPlayCountFormula, boostNewSongsFormula
If BoostNewSongsModifier <> 0 Then
dateBoostFormula = "IIF(Songs.rating <= " & (BoostNewSongsCutoff *10) & " OR FIX(DateDiff('d',Songs.DateAdded,Now) <= " & BoostNewSongsDays & "), 0, FIX(DateDiff('d',Songs.DateAdded,Now) / " & DayFactor & "))"
Else
dateBoostFormula = "IIF(Songs.rating <= " & (DateBoostCutoff*10) & ", 0, FIX(DateDiff('d',Songs.DateAdded,Now) / " & DayFactor & "))"
End If
ratingFormula = "(IIF(Songs.rating < 0, 0, Songs.rating) / 10)"
If ReduceIfPlayed Then
weightedPlayCountFormula = "(Songs.PlayCounter - " & dateBoostFormula & ")"
Else
weightedPlayCountFormula = "0"
End If
If BoostNewSongsModifier <> 0 Then
boostNewSongsFormula = "IIF(Songs.rating <= " & (BoostNewSongsCutoff*10) & ", 0, (IIF(FIX(DateDiff('d',Songs.DateAdded,Now) > " & BoostNewSongsDays & "), 0, " & BoostNewSongsModifier & ")))"
End If
weightedRatingFormula = ratingFormula & " - IIF(" & weightedPlayCountFormula & " < 0, 0, " & weightedPlayCountFormula & ") "
if boostNewSongsFormula <> "" then weightedRatingFormula = weightedRatingFormula & "+ " & boostNewSongsFormula
Sub FillStandardProperties(parentNode, childNode)
With childNode
.CustomNodeId = parentNode.CustomNodeId
.CustomDataId = parentNode.CustomDataId + 1
.UseScript = Script.ScriptPath
End With
End Sub
Sub FillGoodLeaf(Node)
Randomize
Dim Tracks
Dim SQLStatement
Dim SELECT_Clause, FROM_Clause, WHERE_Clause, ORDER_Clause
Dim Iter, res, i, total, sum, index
Dim weight, minweight, maxweight
Dim hold, weights, average, start, baseweight, boundary
Dim R, max : max = NumberOfSongs
Dim inStr : inStr = ""
Set hold = CreateObject("Scripting.Dictionary") ' define an associative array or "hash array" to hold the songs
Set weights = CreateObject("Scripting.Dictionary") ' define an associative array or "hash array" to hold the weightings
SELECT_Clause = " SELECT Songs.Id, IIF(" & weightedRatingFormula & ">10,10," & weightedRatingFormula & ") "
FROM_Clause = " FROM Songs "
WHERE_Clause = " WHERE " & weightedPlayCountFormula &" < " & ratingFormula & " AND DateDiff('d',Songs.LastTimePlayed, Now) > " & MinDaysRepeat
If PlayGenres <> "" then
WHERE_Clause = WHERE_Clause & " AND Songs.Genre IN (" & PlayGenres & ")"
End If
ORDER_Clause = " ORDER BY Rnd((1000*Songs.ID)*Now())" ' This is important because otherwise they will all come as they are stored in the DB
SQLStatement = SELECT_Clause & FROM_Clause & WHERE_Clause & ORDER_Clause
'res = InputBox("SQL Statement: ", "debugging", SQLStatement) ' For debugging
Set Iter = SDB.Database.OpenSQL(SQLStatement) ' holds all songs that are collected by the SQL formula
total=0 ' initialise total amount of songs that can be used for the playlist (=all songs with weights from 1 to 10 minus "done" songs)
sum = 0 ' initialise sum of all weightings
maxweight = 0 ' initialise maximum weight in this iteration
minweight = 9 ' initialise minimum weight in this iteration
While (Not Iter.EOF)
hold.add total,Iter.StringByIndex(0)
weight = Iter.StringByIndex(1)
weights.add total,weight
total = total + 1
sum = sum + weight
If minweight > cdbl(weight) then
minweight = cdbl(weight)
End if
if maxweight < cdbl(weight) then
maxweight = cdbl(weight)
End if
Iter.Next
Wend
' some overflow checks
if total <= 0 or sum <= 0 then
SDB.MessageBox "Something is wrong with your ratings. Do you have any rated songs at all?", mtInformation, Array(mbOk)
Exit Sub
end if
If Set1Weight < minweight or Set2Weight < minweight or Set3Weight < minweight or Set1Weight > maxweight or Set2Weight > maxweight or Set3Weight > maxweight then
SDB.MessageBox "Something is wrong with your SetXWeight constants. They are either too high or too low.", mtInformation, Array(mbOk)
Exit Sub
end if
If (total < max) Then
max = total
End If
Set Tracks = SDB.MainTracksWindow
start = 0
While i < max ' do this until the max number of songs for the playlist is reached
If i < max * Set1Percentage / 100 then ' put in Set1Percentage percent of higher-rated songs
baseweight = Set1Weight
boundary = Set1Boundary
elseif i < max * (Set1Percentage + Set2Percentage) / 100 then ' put in Set2Percentage percent of lower-rated songs
baseweight = Set2Weight
boundary = Set2Boundary
elseif i <= max then ' and also put in some really lowly-rated songs
baseweight = Set3Weight
boundary = Set3Boundary
end if
For index = start to total ' go through all of the songs that could potentially become part of the radio node, starting where we left off last time
weight = cdbl(weights.item(index)) ' weight of the song that is being looked at right now
if weight >= (baseweight - boundary) and weight <= (baseweight + boundary) then
' This song is inside the weighting borders that are defined above
' so let's see if it is also lucky
R = rnd(1) ' this song's lucky number
if R > 0.8 then
' so let's leave this for-next loop and add it to the list!
Exit For
end if
end if
Next
start = index + 1 ' We don't want to go through the same songs again, so next time we start from here
if start > total then
if inStr = "" then
SDB.MessageBox "There does not seem to be enough stuff to work on. Try to use criteria that are easier to meet.", mtInformation, Array(mbOk)
Exit Sub
else
start = 0 ' start over again
end if
else
' We've got a winner! The song with the hash index "index" will now be added to the radio node
' This is done by collecting all songs in inStr, separating them by commas, and afterwards collecting their song.ids via SQL
If i = 0 Then
inStr = hold.item(index)
Else
inStr = inStr & ", " & hold.item(index)
End If
i = i + 1
end if
Wend
If inStr <> "" then
Tracks.AddTracksFromQuery("AND Songs.ID IN (" & inStr & ") ORDER BY Rnd((1000*Songs.ID)*Now())")
Tracks.FinishAdding
End If
End Sub
Sub FillWeightNode(Node)
Dim Tree, newNode
Dim SQLStatement ' SQL query to the database
Dim Iter ' SDBD Iterator obtained by running the SQL query to get the nodes
Set Tree = SDB.MainTree
Node.HasChildren = false ' To delete all old children
SQLStatement = "SELECT DISTINCT IIF(" & weightedRatingFormula & ">10,10," & weightedRatingFormula & ") from Songs "
'res = InputBox("SQL Statement: ", SQLStatement, SQLStatement) ' For debugging
Set Iter = SDB.Database.OpenSQL(SQLStatement)
While Not Iter.EOF
Set newNode = Tree.CreateNode
NewNode.Caption = Iter.StringByIndex(0)
NewNode.iconIndex = 32
newNode.CustomData = Iter.StringByIndex(0)
FillStandardProperties node,newNode
newNode.onFillTracksFunct = "FillWeightLeaf"
newNode.hasChildren = False
Tree.AddNode Node, NewNode, 3
Iter.Next
Wend
End Sub
Sub FillWeightLeaf(Node)
Dim Weight
Dim Tracks
Dim SELECT_Clause, FROM_Clause, WHERE_Clause
Weight = Node.CustomData
SELECT_Clause = " SELECT Songs.Id "
FROM_Clause = " FROM Songs "
WHERE_Clause = " WHERE IIF(" & weightedRatingFormula & ">10,10," & weightedRatingFormula & ") = " & Weight & " AND DateDiff('d',Songs.LastTimePlayed, Now) > " & MinDaysRepeat
If PlayGenres <> "" then
WHERE_Clause = WHERE_Clause & " AND Songs.Genre IN (" & PlayGenres & ")"
End If
'res = InputBox("SQL Statement: ", "Debugging", SELECT_Clause & FROM_Clause & WHERE_Clause) ' For debugging
Set Tracks = SDB.MainTracksWindow
Tracks.AddTracksFromQuery("AND Songs.ID IN (" & SELECT_Clause & FROM_Clause & WHERE_Clause & ")")
Tracks.FinishAdding
End Sub
Sub FillDoneLeaf(Node)
Dim Tracks
Dim SELECT_Clause, FROM_Clause, WHERE_Clause
SELECT_Clause = " SELECT Songs.Id "
FROM_Clause = " FROM Songs "
WHERE_Clause = " WHERE "& weightedPlayCountFormula &" >= " & ratingFormula & " OR DateDiff('d',Songs.LastTimePlayed, Now) <= " & MinDaysRepeat
If PlayGenres <> "" then
WHERE_Clause = WHERE_Clause & " OR Songs.Genre NOT IN (" & PlayGenres & ")"
End If
Set Tracks = SDB.MainTracksWindow
Tracks.AddTracksFromQuery("AND Songs.ID IN (" & SELECT_Clause & FROM_Clause & WHERE_Clause & ")")
Tracks.FinishAdding
End Sub
'%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
' Startup Function
'%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
Sub onStartUp
Dim Tree, RadioFreeMonkeyRoot
Dim RadioMonkeyGood, RadioMonkeyBad, RadioMonkeyWeight
Set Tree = Sdb.MainTree
Set RadioFreeMonkeyRoot = Tree.createNode
RadioFreeMonkeyRoot.Caption = RootNodeCaption
RadioFreeMonkeyRoot.IconIndex = 14
RadioFreeMonkeyRoot.UseScript = Script.ScriptPath
RadioFreeMonkeyRoot.hasChildren = True
Tree.AddNode Tree.Node_Library, RadioFreeMonkeyRoot, 1
SDB.Objects("RadioFreeMonkeyRoot") = RadioFreeMonkeyRoot
Set RadioMonkeyGood = Tree.createNode
RadioMonkeyGood.Caption = "Radio List"
RadioMonkeyGood.IconIndex = 14
RadioMonkeyGood.UseScript = Script.ScriptPath
RadioMonkeyGood.hasChildren = False
RadioMonkeyGood.onFillTracksFunct = "FillGoodLeaf"
Tree.AddNode RadioFreeMonkeyRoot, RadioMonkeyGood, 2
SDB.Objects("RadioMonkeyGood") = RadioMonkeyGood
Set RadioMonkeyWeight = Tree.createNode
RadioMonkeyWeight.Caption = "Weightings"
RadioMonkeyWeight.IconIndex = 32
RadioMonkeyWeight.UseScript = Script.ScriptPath
RadioMonkeyWeight.hasChildren = True
RadioMonkeyWeight.onFillTracksFunct = "FillWeightNode"
Tree.AddNode RadioFreeMonkeyRoot, RadioMonkeyWeight, 3
SDB.Objects("RadioMonkeyWeight") = RadioMonkeyWeight
Set RadioMonkeyBad = Tree.createNode
RadioMonkeyBad.Caption = "Done"
RadioMonkeyBad.IconIndex = 15
RadioMonkeyBad.UseScript = Script.ScriptPath
RadioMonkeyBad.hasChildren = False
RadioMonkeyBad.onFillTracksFunct = "FillDoneLeaf"
Tree.AddNode RadioFreeMonkeyRoot, RadioMonkeyBad, 3
SDB.Objects("RadioMonkeyBad") = RadioMonkeyBad
End Sub
Re: A question?
Hm, as I always have all my music on my internal hard drive, I have not come across this problem and don't really know how to distinguish programmatically between music that is accessible and music that isn't.kazadharri wrote:I really like the script but I do have one question, and I may have missed the way to select this, but I have a external hard drive for my laptop which has about 40% of my music on it. Is there a way when I am just using my C: drive, and not the external drive that the script would not pull in songs that are not accessable?
But when that question is answered by someone here in the forum, it is quite easy to extend the script to do just that. That would be another if-clause in the code right before we declare "We've got a winner!".
Have you tried to modify your Set1Weight and Set2Weight in the "Global Variables and Declarations" section of the code? You will probably have to play around with them a little bit to get a result that makes sense for your music collection.Spazz wrote:When I try to run any version over 1.2 I get this error. Something is wrong with your setxweight constants. They are either too high or too low. Love the script, but I would love to use the newer versions even more what with the new song boost.
You could try the following:
That should give you all songs in your collection. If that works, you can start from there. Good luck and let me know how it goes.Const Set1Weight = 5
Const Set1Boundary = 5
Const Set1Percentage = 100
...
Const Set2Percentage = 0
Ah, yes, of course. This is something that should probably be switched off in the default version (the one we're publishing here) so that people don't have these problems with getting started. (It can be tedious getting someone else's script to run on your own installation)Spazz wrote:Actually, it was the genre setting. I deleted the don't play genre's and it worked fine.
-
- Posts: 109
- Joined: Fri Jul 28, 2006 1:07 am
I reallly do like this script. On my question I actually have now more than 70% of my music on removable drives. I know that when you do an autoplay list one of the selection criteria is if the track is accessable. But not being a scriptor, (yet) I don't know all the ins and outs of MM.
On another subject I noticed that genres can deselected. Is there a way that the selection of genres or maybe playlists can be selected through options. That way I could have my top 40 station, classic rock station, etc.. Maybe based on playlists. Because while playlists are nice, I really like the weighting that this script provides.
Thanks, Jeff
On another subject I noticed that genres can deselected. Is there a way that the selection of genres or maybe playlists can be selected through options. That way I could have my top 40 station, classic rock station, etc.. Maybe based on playlists. Because while playlists are nice, I really like the weighting that this script provides.
Thanks, Jeff
I have a similar problem and think there should be a solution. As I am not a scriptor either, I have no idea of how to implement it. Basically, the source for the radio script to collect songs shouldn't be the entire database, but the "accessible tracks" playlist. Like you can set a playlist as source for auto dj, there should be a way to set this playlist as a source for the radio script.kazadharri wrote:On my question I actually have now more than 70% of my music on removable drives. I know that when you do an autoplay list one of the selection criteria is if the track is accessable. But not being a scriptor, (yet) I don't know all the ins and outs of MM.
Thx,
locu.
-
- Posts: 109
- Joined: Fri Jul 28, 2006 1:07 am
List of Genre's- don't have access
I do not have MS access, and a section of your code/setting you make mention of the genres
>>>
"
' %%% Genres that should not be played. Leave empty (Const PlayGenres = "") to ignore.
' "-1, 13, 17, 20, 24" means "empty genre field, Pop, Rock, Alternative, Soundtrack"
' Look up the other genre Ids in the database by using MS Access
Const PlayGenres = "-1, 11, 13, 14, 17, 20, 24, 131, 132, 86, 80, 81, 7, 10"
<<<<
Do you know where there might be a list of Genres in a non access form so I can know what to select in or out?
Thanks,
Jeff
>>>
"
' %%% Genres that should not be played. Leave empty (Const PlayGenres = "") to ignore.
' "-1, 13, 17, 20, 24" means "empty genre field, Pop, Rock, Alternative, Soundtrack"
' Look up the other genre Ids in the database by using MS Access
Const PlayGenres = "-1, 11, 13, 14, 17, 20, 24, 131, 132, 86, 80, 81, 7, 10"
<<<<
Do you know where there might be a list of Genres in a non access form so I can know what to select in or out?
Thanks,
Jeff
hi! i am currently also having the problem with the setxweight constants.popper wrote:Have you tried to modify your Set1Weight and Set2Weight in the "Global Variables and Declarations" section of the code? You will probably have to play around with them a little bit to get a result that makes sense for your music collection.Spazz wrote:When I try to run any version over 1.2 I get this error. Something is wrong with your setxweight constants. They are either too high or too low. Love the script, but I would love to use the newer versions even more what with the new song boost.
You could try the following:
That should give you all songs in your collection. If that works, you can start from there. Good luck and let me know how it goes.Const Set1Weight = 5
Const Set1Boundary = 5
Const Set1Percentage = 100
...
Const Set2Percentage = 0
I debugged it a bit and found out that minweight is 7 for me and maxweight is 9.5. But in the Node for Weighting the min value appears to be -7.1. I don't know what to change...
I'm also using non standard ratings as a result of autorateaccurate script. I also have a node that says the weight is 0.800000001 of a song. Should i use a round() somewhere in the script? Or might the problem be the cdbl(weigth) in line 219-224? I also cecked the Genres clearing all restrictions.
Thx for any help.
Red
Re: List of Genre's- don't have access
Standard genres:kazadharri wrote:I do not have MS access, and a section of your code/setting you make mention of the genres
>>>
"
' %%% Genres that should not be played. Leave empty (Const PlayGenres = "") to ignore.
' "-1, 13, 17, 20, 24" means "empty genre field, Pop, Rock, Alternative, Soundtrack"
' Look up the other genre Ids in the database by using MS Access
Const PlayGenres = "-1, 11, 13, 14, 17, 20, 24, 131, 132, 86, 80, 81, 7, 10"
<<<<
Do you know where there might be a list of Genres in a non access form so I can know what to select in or out?
Thanks,
Jeff
IDGenre GenreName
-1
0 Blues
1 Classic Rock
2 Country
3 Dance
4 Disco
5 Funk
6 Grunge
7 Hip-Hop
8 Jazz
9 Metal
10 New Age
11 Oldies
12 Other
13 Pop
14 R&B
15 Rap
16 Reggae
17 Rock
18 Techno
19 Industrial
20 Alternative
21 Ska
22 Death Metal
23 Pranks
24 Soundtrack
25 Euro-Techno
26 Ambient
27 Trip-Hop
28 Vocal
29 Jazz+Funk
30 Fusion
31 Trance
32 Classical
33 Instrumental
34 Acid
35 House
36 Game
37 Sound Clip
38 Gospel
39 Noise
40 AlternRock
41 Bass
42 Soul
43 Punk
44 Space
45 Meditative
46 Instrumental Pop
47 Instrumental Rock
48 Ethnic
49 Gothic
50 Darkwave
51 Techno-Industrial
52 Electronic
53 Pop-Folk
54 Eurodance
55 Dream
56 Southern Rock
57 Comedy
58 Cult
59 Gangsta Rap
60 Top 40
61 Christian Rap
62 Pop/Funk
63 Jungle
64 Native American
65 Cabaret
66 New Wave
67 Psychedelic
68 Rave
69 Showtunes
70 Trailer
71 Lo-Fi
72 Tribal
73 Acid Punk
74 Acid Jazz
75 Polka
76 Retro
77 Musical
78 Rock & Roll
79 Hard Rock
80 Folk
81 Folk/Rock
82 National Folk
83 Swing
84 Fast-Fusion
85 Bebob
86 Latin
87 Revival
88 Celtic
89 Bluegrass
90 Avantgarde
91 Gothic Rock
92 Progressive Rock
93 Psychedelic Rock
94 Symphonic Rock
95 Slow Rock
96 Big Band
97 Chorus
98 Easy Listening
99 Acoustic
100 Humour
101 Speech
102 Chanson
103 Opera
104 Chamber Music
105 Sonata
106 Symphony
107 Booty Brass
108 Primus
109 Porn Groove
110 Satire
111 Slow Jam
112 Club
113 Tango
114 Samba
115 Folklore
116 Ballad
117 Power Ballad
118 Rhythmic Soul
119 Freestyle
120 Duet
121 Punk Rock
122 Drum Solo
123 A Cappella
124 Euro-House
125 Dance Hall
126 Goa
127 Drum & Bass
128 Club-House
129 Hardcore
130 Terror
131 Indie
132 BritPop
133 Negerpunk
134 Polsk Punk
135 Beat
136 Christian Gangsta Rap
137 Heavy Metal
138 Black Metal
139 Crossover
140 Contemporary Christian
141 Christian Rock
142 Merengue
143 Salsa
144 Thrash Metal
145 Anime
146 JPop
147 Synthpop
These are also defined by WINAMP all other have codes like 10XXX and are the ones u defined urself