[JS] Alle albums uit media player

Pagina: 1
Acties:
  • 115 views sinds 30-01-2008
  • Reageer

Acties:
  • 0 Henk 'm!

  • k0ewl
  • Registratie: December 2003
  • Laatst online: 18-08-2023
Ik ben dus bezig met een update voor mijn sidebar gadget voor Windows Vista. Nu is het zo dat die gadgets gewoon kleine webpagina's zijn.

Zo kun je natuurlijk ook gebruik maken van de Media Player object van Microsoft.
Hier meer info

Op deze manier heb ik het volgende al voor elkaar:
- Haal alle muziek items op
- Haal alle playlists op excl de standaard playlists met sterren etc
- Haal alle artiesten op
- Haal alle liedjes van die artiest op

Wat moet nog:
- Filter uit de liedjes alle albums
- Zet alle liedjes in die albums
- geef de albums terug en geef ze weer op je scherm (het makkelijke gedeelte :P)

Maar nu moet ik dus met die informatie een lijst met albums bouwen en daaronder de juiste liedjes stoppen. Opzich helemaal geen moeilijke taak meer, maar op de een of andere manier kom ik in een loop terecht etc. Ik zie gewoon even door de bomen het bos niet meer.

JavaScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
function get_playlists()
{
    var playlists      = new Array();
    var all_audio      = Player.mediaCollection.getByAttribute("MediaType", "Audio");
    var temp_playlists = Player.MediaCollection.getByAttribute("MediaType", "playlist");

    playlists[0] = all_audio;
    for (i = 0; i < temp_playlists.count; i++)
      {
        var current_playlist = temp_playlists.item(i).getItemInfo("WM/MediaClassSecondaryID");
        var auto_playlist    = '{EB0BAFB6-3C4F-4C31-AA39-95C7B8D7831D}';

        if (current_playlist != auto_playlist)
          playlists[playlists.length] = temp_playlists.item(i);
      }

    return playlists;
}

function get_library()
{
    var library = new Array();
    var artists = get_artists();
    
    for (i = 1; i < artists.count; i++)
      library[library.length] = new Array(artists.item(i), get_albums(artists.item(i)));

    for (i = 0; i < library.length; i++)
      document.write(library[i][0]);
}

function get_artists()
{
    return Player.mediaCollection.getAttributeStringCollection("Author", "Audio");
}

function get_albums(artist)
{
    var albums = new Array();
    var songs  = Player.mediaCollection.getByAuthor(artist);
    
    alert(songs.count);
    /*
    for (i = 0; i < songs.count; i++)
      {
        var album = songs.item(i).getItemInfo("WM/AlbumTitle");

        if (!in_array(album, albums))
          albums[albums.length][0] = album;
      }

    for (i = 0; i < albums.length; i++)
      albums[i][1] = Player.mediaCollection.getByAlbum(albums[i][0]);
      }
      */

    return albums;
}

function play_playlist(playlist)
{

}

function play_album(album)
{

}

function play_song(song)
{

}

function in_array(needle, haystack)
{
    for (i = 0; i < haystack.length; i++)
      {
        if (haystack[i] == needle)
          return true;
      }

    return false;
}


Het stuk wat commented is geeft de fout. Ik denk dat mijn processor gewoon flink op zijn kop krijgt als javascript voor 183 artiesten alle liedjes op moet gaan zoeken, maar ik kan dit niet met zekerheid zeggen.

Ziet iemand wat er fout aan is, of wat nog geoptimaliseerd kan worden om tijd te besparen?

A byte walks into a bar and orders a pint. Bartender asks him "What's wrong?" Byte says "Parity error." Bartender nods and says "Yeah, I thought you looked a bit off."


Acties:
  • 0 Henk 'm!

  • moozzuzz
  • Registratie: Januari 2005
  • Niet online
  • Welke fout wordt er gegeven?
  • Er mist een { maar dat zal wel een typfout zijn?

Acties:
  • 0 Henk 'm!

  • k0ewl
  • Registratie: December 2003
  • Laatst online: 18-08-2023
Leek toch aan dat haakje te liggen. Heb ik dus gewoon de hele dag overheen gekeken.

Maarja, nu laad het script, maar neemt hij meer als 400 mb aan geheugen alleen omdat mijn library uit 2500 liedjes bestaat. Denk dat ik maar af moet stappen van het idee en hoogstens alle artiesten moet nemen ipv alle albums per artiest.

A byte walks into a bar and orders a pint. Bartender asks him "What's wrong?" Byte says "Parity error." Bartender nods and says "Yeah, I thought you looked a bit off."


Acties:
  • 0 Henk 'm!

  • Juup
  • Registratie: Februari 2000
  • Niet online
k0ewl schreef op vrijdag 09 maart 2007 @ 15:19:
Maarja, nu laadt het script, maar neemt hij meer als 400 mb aan geheugen alleen omdat mijn library uit 2500 liedjes bestaat. Denk dat ik maar af moet stappen van het idee en hoogstens alle artiesten moet nemen ipv alle albums per artiest.
Of je stop niet teveel informatie in je "albums" hash. In plaats van hele ItemInfo d'r in te stoppen (ik neem aan dat dat een groot object is), stop je alleen de strings die je nodig hebt er in.

Een wappie is iemand die gevallen is voor de (jarenlange) Russische desinformatiecampagnes.
Wantrouwen en confirmation bias doen de rest.


Acties:
  • 0 Henk 'm!

  • k0ewl
  • Registratie: December 2003
  • Laatst online: 18-08-2023
Mhh, er gaat toch nog iets niet helemaal lekker.

Ik haal wel alle liedjes op van de artiest, dit aantal klopt met het aantal liedjes dat de artiest heeft in de media player, maar na 20 items vertikt hij het om de song informatie op te halen?

Heb al lopen zoeken in de SDK naar een uitleg, maar kan er geen vinden.

JavaScript:
1
2
3
4
5
6
7
8
9
10
get_albums('ACDC');

function get_albums(artist)
{
    var albums = new Array();
    var songs  = Player.mediaCollection.getByAuthor(artist);

    for (i = 0; i < songs.count; i++)
      document.write(i + ' - ' + songs.item(i).getItemInfo("WM/AlbumTitle") + ' - ' + songs.item(i).getItemInfo("SourceUrl") + '<br>');
}


output:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
0 - Back In Black - E:\Documents\Music\ACDC\ACDC - Back In Black\01 - Hells Bells.mp3
1 - Back In Black - E:\Documents\Music\ACDC\ACDC - Back In Black\02 - Shoot To Thrill.mp3
2 - Back In Black - E:\Documents\Music\ACDC\ACDC - Back In Black\03 - What Do You Do For Money Honey.mp3
3 - Back In Black - E:\Documents\Music\ACDC\ACDC - Back In Black\04 - Given The Dog A Bone.mp3
4 - Back In Black - E:\Documents\Music\ACDC\ACDC - Back In Black\05 - Let Me Put My Love Into You.mp3
5 - Back In Black - E:\Documents\Music\ACDC\ACDC - Back In Black\06 - Back In Black.mp3
6 - Back In Black - E:\Documents\Music\ACDC\ACDC - Back In Black\07 - You Shook Me All Night Long.mp3
7 - Back In Black - E:\Documents\Music\ACDC\ACDC - Back In Black\08 - Have A Drink On Me.mp3
8 - Back In Black - E:\Documents\Music\ACDC\ACDC - Back In Black\09 - Shake A Leg.mp3
9 - Back In Black - E:\Documents\Music\ACDC\ACDC - Back In Black\10 - Rock And Roll Ain't Noise Pollution.mp3
10 - Ballbreaker - E:\Documents\Music\ACDC\ACDC - Ballbreaker\ACDC - 01 - Hard As A Rock.mp3
11 - Ballbreaker - E:\Documents\Music\ACDC\ACDC - Ballbreaker\ACDC - 02 - Cover You In Oil.mp3
12 - Ballbreaker - E:\Documents\Music\ACDC\ACDC - Ballbreaker\ACDC - 03 - The Furor.mp3
13 - Ballbreaker - E:\Documents\Music\ACDC\ACDC - Ballbreaker\ACDC - 04 - Boogie Man.mp3
14 - Ballbreaker - E:\Documents\Music\ACDC\ACDC - Ballbreaker\ACDC - 05 - The Honey Roll.mp3
15 - Ballbreaker - E:\Documents\Music\ACDC\ACDC - Ballbreaker\ACDC - 06 - Burnin' Alive.mp3
16 - Ballbreaker - E:\Documents\Music\ACDC\ACDC - Ballbreaker\ACDC - 07 - Hail Ceaser.mp3
17 - Ballbreaker - E:\Documents\Music\ACDC\ACDC - Ballbreaker\ACDC - 08 - Love bomb.mp3
18 - Ballbreaker - E:\Documents\Music\ACDC\ACDC - Ballbreaker\ACDC - 09 - Caught With Your Pants Down.mp3
19 - Ballbreaker - E:\Documents\Music\ACDC\ACDC - Ballbreaker\ACDC - 10 - Whiskey on the rocks.mp3
20 - - 
...
...
...
168 - -

A byte walks into a bar and orders a pint. Bartender asks him "What's wrong?" Byte says "Parity error." Bartender nods and says "Yeah, I thought you looked a bit off."