INTERACT FORUM
Windows => Third Party Plug-ins, Programs, and Skins => Topic started by: gappie on November 15, 2008, 04:15:18 am
-
dappadappa asked me (http://yabb.jriver.com/interact/index.php?topic=49205.msg337084#msg337084) if i could explain how to make the view that is on the first picture in the pix01 gallery http://pix01.com/zV@gLaL.
it involves user library fields, a plugin in vb 2005.net and a few playlists.
first of all, Besides calculating the relative number plays and the average number plays for the album, the plugin communicates with girder (telling girder if the file is an image or video or audio), creates a playlist with the whole album from the song that is playing now (for when i play a mixed list and want to hear the whole album), and makes a form which shows all kind of information from the file playing and the volume (I use that with Theater View).
I tried to clean up the code for those things.
First there are several custom library fields I use
Np Album, Gives the average numberplays of the album, Data type is decimal and it can not be edited
Np Album Rel, same as above but then the average of the relative number playes
Np rel , number plays relative, also decimal and cant be edited
Np rel upd, is an integer that gives the last time the file is updated.
Np Contr, also integer, gives the number plays but then written by the plugin. Important to see what file has not been done yet.
Np sel, a calculated field checking the file that has to be done code: if(isequal([number plays,0],[np contr],2),G,F)
The code will be in the next post...
-
i wrote the code using Mr ChriZ his template: http://yabb.jriver.com/interact/index.php?topic=34294.0
i do not know to much about the naming convention for programming, and a lot of names i use are dutch.. im sorry about that
first there is catching the event sended by mc when a track changes. if that happens there is a search string defined (zoekA) which looks to the calculated field 'Np Sel' and picks one album. this search is sended to MaakNpAlbum
Private Sub MJEvent(ByVal s1 As String, ByVal s2 As String, ByVal s3 As String) Handles mediaCenterRef.FireMJEvent
Dim zoekA As String
If s2 = "MCC: NOTIFY_TRACK_CHANGE" Then
zoekA = "[Media Type]=[Audio] [NP Sel]=[F] ~limit=1,1,[Album],[Album Artist (auto)] ~a"
MaakNPAlbum(zoekA, True)
End If
End Sub
MaakNpAlbum raises the np relative with 1 and calculates the averages of the number plays and number plays relative for that album. at the end it makes the np cont the same as number plays. besides that, it will restart the MaakNpAlbum one time (NogEenKeer and ZoekWeer) to see if there is maybe an other file played but not calculeted yet. and it will start the recalculation of one album (BerNpRel).
Private Sub MaakNPAlbum(ByVal zoek As String, ByVal NogEenKeer As Boolean)
Dim lijst As MediaCenter.IMJFilesAutomation
Dim Liedje As MediaCenter.IMJFileAutomation
Dim aantal, t1, t2, NP, NPC As Integer
Dim NPA, NPI, NPR, NPRA, NPAN, NPRAN, a As Decimal
Dim ZoekNPR As String
NPA = 0
NPRA = 0
lijst = mediaCenterRef.Search(zoek)
aantal = lijst.GetNumberFiles()
If aantal = 0 Then
Exit Sub
End If
For t1 = 0 To aantal - 1
Liedje = lijst.GetFile(t1)
If Liedje.Get("NP Rel", False) = "" Or Liedje.Get("NP Rel", False) = "0" Then
NPR = 0
Else
NPR = Liedje.Get("NP Rel", False)
End If
If Liedje.Get("Number Plays", False) = "" Then
NP = 0
Else
NP = Liedje.Get("Number Plays", False)
End If
NPA = NPA + NP
If Liedje.Get("NP Contr", False) = "" Then
NPC = 0
Else
NPC = Liedje.Get("NP Contr", False)
End If
If Liedje.Get("NP sel", False) = "F" Then
NPR = NPR + NP - NPC
lijst.Set(t1, "NP Rel", NPR)
End If
NPRA = NPRA + NPR
Next
a = Convert.ToDecimal(aantal)
NPAN = Math.Round(NPA / a, 4)
NPRAN = Math.Round(NPRA / a, 4)
For t2 = 0 To aantal - 1
Liedje = lijst.GetFile(t2)
If Liedje.Get("Number Plays", False) = "" Then
NPI = 0
Else
NPI = Liedje.Get("Number Plays", False)
End If
lijst.Set(t2, "NP Album Rel", NPRAN)
lijst.Set(t2, "NP Album", NPAN)
lijst.Set(t2, "NP Contr", NPI)
Next
ZoekNPR = "[Media Type]=[Audio] ~sort=[NP Rel Upd],[Last Played] ~limit=1,1,[Album],[Album Artist (auto)] ~a"
BerNpRel(ZoekNPR)
If NogEenKeer = True Then
Zoekweer()
End If
End Sub
Sub Zoekweer()
Dim zoekB As String
zoekB = "[Media Type]=[Audio] [NP Sel]=[F] ~limit=1,1,[Album],[Album Artist (auto)] ~a"
MaakNPAlbum(zoekB, False)
End Sub
every time a song has been played, (number plays has changed) one album is picked and the relative number plays is multiplied with 0.95 (factor, this can be changed of cource). to make sure this happens in more or less the same order, and every record is done there is a value written to 'Np Rel Upd' as yyyyMMdd (today 20081115).
Sub BerNpRel(ByVal zoek As String)
Dim Factor As Decimal
Dim UpdRel As String
Dim lijst As MediaCenter.IMJFilesAutomation
Dim Liedje As MediaCenter.IMJFileAutomation
Dim t1, t2, aantal, Teller As Integer
Dim NPAT, NP, NPN, a As Decimal
Factor = 0.95
Teller = 0
aantal = 1
'UpdRel = Month(Now) & Year(Now) & Day(Now)
UpdRel = Now.ToString("yyyyMMdd")
'MsgBox(UpdRel)
NPAT = 0
lijst = mediaCenterRef.Search(zoek)
aantal = lijst.GetNumberFiles()
If aantal = 0 Then
Exit Sub
End If
For t1 = 0 To aantal - 1
Liedje = lijst.GetFile(t1)
If Liedje.Get("NP Rel", False) = "" Then
NPN = 0
ElseIf Liedje.Get("NP Rel", False) = "0" Then
NPN = 0
Else
NP = Liedje.Get("NP Rel", False)
NPN = NP * Factor
End If
NPAT = NPAT + NPN
Next
a = Convert.ToDecimal(aantal)
NPAT = Math.Round(NPAT / a, 4)
For t2 = 0 To aantal - 1
Dim Nrel, rel As Decimal
Liedje = lijst.GetFile(t2)
If Liedje.Get("NP Rel", False) = "" Then
Nrel = 0
ElseIf Liedje.Get("NP Rel", False) = "0" Then
Nrel = 0
Else
rel = Liedje.Get("NP Rel", False)
Nrel = Math.Round(rel * Factor, 4)
End If
lijst.Set(t2, "NP Rel", Nrel)
lijst.Set(t2, "NP Rel Upd", UpdRel)
lijst.Set(t2, "NP Album Rel", NPAT)
Teller = Teller + 1
Next
End Sub
well this is for the calculations in the library. i also have a ticker that is used one time (cant remember why i used a ticker and not on open, guess it worked better:
Private Sub EenKeer_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles EenKeer.Tick
EenKeer.Enabled = False
Dim zoekA As String
zoekA = "[Media Type]=[Audio] [NP Sel]=[F] ~limit=1,1,[Album],[Album Artist (auto)] ~a"
MaakNPAlbum(zoekA, True)
End Sub
playlists next post
-
i made several smartlists:
top: [Media Type]=[Audio] ~limit=-1,1,[album],[album artist (auto)] ~sort=[NP Album Rel]-d,[Last Played]-d ~%=5 ~a
95% :[Media Type]=[Audio] ~limit=-1,1,[album],[album artist (auto)] ~sort=[NP Album Rel]-d,[Last Played]-d ~%=10 ~a
90% :[Media Type]=[Audio] ~limit=-1,1,[album],[album artist (auto)] ~sort=[NP Album Rel]-d,[Last Played]-d ~%=20 ~a
same for 80, 70, 50 and 25 %
now i make a view (the one on the picture) with search lists:
top is playlist top
95% is playlist 95% and not playlist top
90% is playlist 90% and not playlist 95%
etc
i made a same list for absolute number plays also
that is it
:)
hope it helps
gab
-
Thankyou Very Much
i really appreciate you going thru all that trouble
have a gud day :)
DappaDappa