# [OT] - 321GtK

## xchris

Se i moderatori reputano questo thread troppo OT datemi una zappata sui piedi e chiudetelo pure. (e mi scuso)

Il motivo per cui posto e' perche' magari a qc interessa collaborare alla costruzione del mio player mp3 (e solo mp3)

Cosa e' e che funzioni ha?

1 - E' un mp3 player alla rhytmbox con ricerche e cose simili basato sul mitico mpg321

2 - Supporta diversi tipi di visualizzazione

3 - E' abbastanza "verboso" sugli mp3 che passano

4 - Supporta alcune funzioni per ispezioni veloci ma approfondite di cartelle di  mp3 (con DragNDrop)

5 - Puo' scrivere/leggere il database su diversi file

6 - Ha una comoda e personalizzabile funzione di sorting (In Sviluppo)

7 - Ha una semplice playlist riorganizzabile(In Sviluppo)

8 - Supporta archivi compressi (In Sviluppo)

9 - NON ha editing TAG (per ora  :Wink:  )

10 - NON supporta ogg :S (colpa di mpg321)

Perche' lo sto scrivendo?

1 - Perche' devo provare un po' GTK (pyGTK per essere precisi)

2 - Perche' non amo nessun player in particolare sotto Linux (e al momento non mi piace neanche il mio... per par-condicio)

3 - Perche' questa estate mi sono preso una spina sotto il piede che mi ha costretto a stare un po' fermo e non potevo continuare Auntmary

4 - Mi diverto cosi' (bhe non solo..)

A che punto siamo?

- e' in fase veramente ALFA... ma veramente!

- ha molti bug e mi farebbe comodo scovarli con dei volenterosi alfa-tester (si... ALFA!)

- devo riscrivere le routine di Resync (e' lenta ora)

- devo fare la sezione di modifica TAG con musicbrainz

- tanto tanto altro

il Nome

dai... almeno questo passatemelo!

ScreenShots

Vi mostro qualche screenshot (aggiornati alla 0.1a)

http://www.xchris.net/download.php?file=screenshots/321GtK-new-1.png

http://www.xchris.net/download.php?file=screenshots/321GtK-new-2.png

http://www.xchris.net/download.php?file=screenshots/321GtK-new-3.png

http://www.xchris.net/download.php?file=screenshots/321GtK-new-4.png

http://www.xchris.net/download.php?file=screenshots/321GtK-new-5.png

http://www.xchris.net/download.php?file=screenshots/321GtK-new-6.png

Versione in sviuppo

http://www.xchris.net/download.php?file=screenshots/321GtK-new-7.png

Dipendenze

-mpg321

-eyeD3-0.6.8

-pyGTK

-python.. (bhe)

FAQ

Mi paciuga da qualche parte il sistema?

-nella vostra home .321GtK/

-in /tmp mette una immagine (devo riscrivere la routine per l'immagine... al momento la scrivo e la leggo :S)

Feedback

ci sono ancora un po' di bug! (alcuni noti...)

Mandatemi un PM quando li trovate per favore... oppure una mail. (ancora meglio)

Bhe ma dove sta?

http://www.xchris.net/download.php?file=files/321GtK/321GtK-eyeD3-foroverlay.tar.bz2

```

wget  http://www.xchris.net/download.php?file=files/321GtK/321GtK-eyeD3-foroverlay.tar.bz2 -O 321GtK-eyeD3-foroverlay.tar.bz2

```

Andate nella vostra dir di overlay,starrate e eliminate il file.

(il tar contiene l'ebuild per 321GtK e per eyeD3 aggiornato)

Spero non ci siano pb con l'ebuild.

Per assurdo pur avendoci lavorato molto con Unclepine non ne ho mai scritto uno. :S

Feedback,SUGGERIMENTI,insulti e quanto altro sempre ben accetti.

Un grazie in anticipo a chi lo prova.

----------

## Ic3M4n

adesso me lo scarico e preparati ad essere inondato di richieste di ogni tipo... 

intanto... grazie!

----------

## xchris

vedrai che piu' che altro saranno bug report...

anche se decisamente alfa ho preferito postare perche' n-tester sono meglio di uno  :Wink: 

(bhe almeno siamo in 2  :Very Happy: )

ciao e grazie

----------

## federico

Hai valutato per caso l'idea di sfruttare un player in python piuttosto che mpg321? Cosa ti ha fatto pendere per questa soluzione?

Ti posto inoltre quello di cui ti avevo accennato in privato, si tratta di una classe per leggere gli id di qualsiasi versione (per quanto sono riuscito a provare) di ID3 , il codice è un po' sporcato da cose che non vengono utilizzate nella classe ma solo nel resto del programma, ma se ti sembera' interessante posso anche vedere di sistemarlo. Purtroppo non sono del tutto sicuro che la stringa di normalizzazione dei nomi venga letta correttamente nel forum phpBB, per sicurezza uppo il file anche su www.sideralis.net/blackman/philips.py

Come dipendenza ha mad e id3reader, l'indirizzo e' nei commenti.

Allego anche il normalizer.py per la normalizzazione dei nomi qualora intendessi utilizzare questo codice.

```

#!/usr/bin/env python

# -*- coding: iso-8859-1 -*-

# Code from Federico Galli <fede@sideralis.net>

# Many bugs solved by Riccardo Galli <riquito@sideralis.net>

# Developed for Sideralis Programs - http://www.sideralis.net

# Write songs on Philips HDD <100 (60,65,70 ...)

# Thanks to http://nedbatchelder.com/ for the id3reader module 

# and to http://dhat.webpark.cz/ for his sourcecode.

# Beta Version -First time full running : mon 10 jan 2005

# jan 11 2005 code cleand and more power to the parser

import os,sys,re, shutil

import sqlite

import mad,id3reader

from normalizer import fix_unicode

from time import time

MOUNT_POINT='/mnt/philipsMp3_1'

HDD_DIR='_system/media/audio'

#MOUNT_POINT='tmp'

#HDD_DIR=''

MAX_QUERY="\

SELECT cSongTitle,cArtistName,cAlbumTitle,iTrackNr,iTrackLength,iNrPlayed,\

        cFilename,iDirId,iYear,cGenreName,iBitRate,iSampleRate,iFileSize,iMediaType \

FROM SongTable \

  INNER JOIN GenreTable ON SongTable.iGenreId=GenreTable.iGenreId \

  INNER JOIN ArtistTable ON SongTable.iArtistId=ArtistTable.iArtistId \

  INNER JOIN AlbumTable ON SongTable.iAlbumId=AlbumTable.iAlbumId\

"

verbose=1

#This is for normalizing names

noaccents="""\x00\x01\x02\x03\x04\x05\x06\x07\x08\t\n\x0b\x0c\r\x0e\x0f\x10\x11\x12\x13\

\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f !"#$%&'()*+,-./0123456789\

:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~\x7f\

\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f\x90\x91\x92\

\x93\x94\x95\x96\x97\x98\x99\x9a\x9b\x9c\x9d\x9e\x9f\xa0¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ\

¶·¸¹º»¼½¾¿AAAAAA\xc6CEEEEIIII\xd0NOOOOO\xd7\xd8UUUUY\xde\xdfaaaaaa\xe6ceeeeiiii\

\xf0nooooo\xf7\xf8uuuuy\xfey"""

#Regular Ex about music genres

reGenre=re.compile('\((?P<idIfName>\d+)\)\s?(?P<nameIfId>.+)|\((?P<idNoName>\d+)\)|(?P<nameNoId>.+)')

class MP3(object):

    __slots__=['Artist','Album','Title','FileName','TrackNum','Genre',

               'Year','Bitrate','Samplerate','Length','Size','MediaType']

    def __str__(self):

        text=[]

        for i in MP3.__slots__:

            value=getattr(self,i)

            if i in ('Year','TrackNum','Length','Size','Samplerate','Bitrate','MediaType'):

                text.append(('%s: %s' % (i,value)).encode('ascii','replace'))

            else:

                if isinstance(value,unicode):

                    text.append('%s: %s' % (i,value.encode('iso-8859-1','replace')))

                else:

                    text.append('%s: %s' % (i,value.decode('iso-8859-1','replace').encode('iso-8859-1','replace')))

        try:

            bau='\n'.join(text)

        except UnicodeDecodeError,e:

            for line in text:

                sys.stdout.write(repr(line))

                print

            raise e

        return bau

    

    def __cmp__(self,other):

        if isinstance(other,MP3):

            for i in MP3.__slots__:

                if cmp(getattr(self,i),getattr(other,i))!=0:

                    return cmp(getattr(self,i),getattr(other,i))

            return 0

        else:

            return cmp(self,other)

def debug(text):

    global verbose

    if verbose:

        print text

RISCHIOOO=[]

def read_id3(dirname,filename):

    #

    # STRONG AND POWERFUL PARSER 

    #

    

    #debug('Dirname: '+dirname) #Strippare a 260 caratteri

    

    pathToFile=os.path.join(dirname,filename)

    mp3File=MP3()

    now=time()

    print 'ID3 READER'

    id3r = id3reader.Reader(pathToFile)

    tot=time()-now

    print ' ',tot

    if tot>2:

        global RISCHIOOO

        RISCHIOOO.append(pathToFile)

    

    #mp3File.FileName=filename[:100].translate(noaccents)

    mp3File.FileName=fix_unicode(filename[:100].decode(sys.getfilesystemencoding()))

    

    mp3File.Album=(id3r.getValue('album') or 'No Album Found').lower().strip()

    if isinstance(mp3File.Album,str):

        mp3File.Album=mp3File.Album.translate(noaccents)

    else:

        mp3File.Album=mp3File.Album.encode('latin-1').translate(noaccents)

        

    mp3File.Artist=(id3r.getValue('performer') or 'No Artist Found').lower().strip()

    if isinstance(mp3File.Artist,str):

        mp3File.Artist=mp3File.Artist.translate(noaccents)

    else:

        mp3File.Artist=mp3File.Artist.encode('latin-1').translate(noaccents)

    

    # Se 'No Title Found' Il nome del titolo è strippato a 100 caratteri, lo strip a 4 toglie l'estensione.

    # Qui mettiamo il file name per rendere migliore la lettura

    mp3File.Title=(id3r.getValue('title') or filename[:-4][:100]).lower().strip()

    if isinstance(mp3File.Title,str):

        mp3File.Title=mp3File.Title.translate(noaccents)

    else:

        mp3File.Title=mp3File.Title.encode('latin-1').translate(noaccents)

        

    # Procedura per "tuplare" le tracce :) Il secondo dato, la traccia finale, qualora presente,

    # viene perso durante la procedura. Il software del lettore utilizza solo il primo campo.

    mp3File.TrackNum=id3r.getValue('track')

    if mp3File.TrackNum:

        track = mp3File.TrackNum.split('/')

        if int(track[0])=='0': # La traccia 0 è un po' stupida :)

            #debug('Porto la traccia 0 a 1')

            track[0]=1

        mp3File.TrackNum=int(track[0])

    else:

        mp3File.TrackNum=1

    

    year=id3r.getValue('year')

    if year:

        try: 

            year+1

        except TypeError: 

            year=year.strip()

            if not year: year=0

            else: 

                try: year=int(year)

                except ValueError:

                    year=0

    else:

        year=0

            

    mp3File.Year=year #Se non presente il lettore accetta 0

    

    # Parsing del genere

    mp3File.Genre=id3r.getValue('genre') or '(255)' #No Genre Found

    tmpGenre=reGenre.findall(mp3File.Genre)[0]

    if tmpGenre[1]: 

        mp3File.Genre=tmpGenre[1]

    elif tmpGenre[2]:

        if tmpGenre[2]=='255':

            mp3File.Genre='No Genre Found'

        else:

            tmpGenreIso=int(tmpGenre[2].encode('iso-8859-1','replace'))

            mp3File.Genre=id3reader._genres[tmpGenreIso]

    elif tmpGenre[3]:

        mp3File.Genre=tmpGenre[3]

    # Formattazione lower strip e translate del genere

    mp3File.Genre=mp3File.Genre.lower().strip()

    if isinstance(mp3File.Genre,str):

        mp3File.Genre=mp3File.Genre.translate(noaccents)

    else:

        mp3File.Genre=mp3File.Genre.encode('latin-1').translate(noaccents)

    

    now=time()

    print 'MAD'

    madr = mad.MadFile(pathToFile)

    mp3File.Bitrate=madr.bitrate()/1000

    mp3File.Samplerate=madr.samplerate()

    mp3File.Length=madr.total_time()/1000

    print ' ',time()-now

    mp3File.Size=os.path.getsize(pathToFile)/1024

    mp3File.MediaType=1 # 1=MP3, 0=WMA. Attualmente e probabilmente anche in futuro supporterò solo mp3.

    

    return mp3File

```

normalizer.py

```

#code found in the Python CoockBook. It's a comment in the recipe

#http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/251871

#wrote by Andrew Dalke

# If the character doesn't exist in the dictionary, add it as None

# and also return None.  This tells the translate to delete the character

# and makes the next lookup for that character faster.

class XLate(dict):

    def __getitem__(self, c):

        try:

            return dict.__getitem__(self, c)

        except KeyError:

            self[c] = None

            return None

# Define the translation table.  I needed to hammer unicode going to

# NCBI's web services (for Biopython's EUtils package) so I used the

# table defined at

#  http://www.nlm.nih.gov/databases/dtd/medline_character_database.utf8

# This is not as extensive as the original conversion set.

class XLate(dict):

    def __getitem__(self, c):

        try:

            return dict.__getitem__(self, c)

        except KeyError:

            self[c] = None

            return None

# Convert these unicode characters into ASCII

xlate = XLate({

    # The note at the bottom of the page says "the inverted question

    # mark represents a questionable character found as a result of

    # NLM's conversion from its legacy extended EBCDIC character set

    # to UNICODE UTF-8."  I do not use it but leave it here for

    # completeness.

    ord(u"\N{INVERTED QUESTION MARK}"): None,

    ord(u"\N{LATIN CAPITAL LETTER O WITH STROKE}"): u"O",

    ord(u"\N{LATIN SMALL LETTER A WITH GRAVE}"): u"a",

    ord(u"\N{LATIN SMALL LETTER A WITH ACUTE}"): u"a",

    ord(u"\N{LATIN SMALL LETTER A WITH CIRCUMFLEX}"): u"a",

    ord(u"\N{LATIN SMALL LETTER A WITH TILDE}"): u"a",

    ord(u"\N{LATIN SMALL LETTER A WITH DIAERESIS}"): u"a",

    ord(u"\N{LATIN SMALL LETTER A WITH RING ABOVE}"): u"a",

    ord(u"\N{LATIN SMALL LETTER C WITH CEDILLA}"): u"c",

    ord(u"\N{LATIN SMALL LETTER E WITH GRAVE}"): u"e",

    ord(u"\N{LATIN SMALL LETTER E WITH ACUTE}"): u"e",

    ord(u"\N{LATIN SMALL LETTER E WITH CIRCUMFLEX}"): u"e",

    ord(u"\N{LATIN SMALL LETTER E WITH DIAERESIS}"): u"e",

    ord(u"\N{LATIN SMALL LETTER I WITH GRAVE}"): u"i",

    ord(u"\N{LATIN SMALL LETTER I WITH ACUTE}"): u"i",

    ord(u"\N{LATIN SMALL LETTER I WITH CIRCUMFLEX}"): u"i",

    ord(u"\N{LATIN SMALL LETTER I WITH DIAERESIS}"): u"i",

    ord(u"\N{LATIN SMALL LETTER N WITH TILDE}"): u"n",

    ord(u"\N{LATIN SMALL LETTER O WITH GRAVE}"): u"o",

    ord(u"\N{LATIN SMALL LETTER O WITH ACUTE}"): u"o",

    ord(u"\N{LATIN SMALL LETTER O WITH CIRCUMFLEX}"): u"o",

    ord(u"\N{LATIN SMALL LETTER O WITH TILDE}"): u"o",

    ord(u"\N{LATIN SMALL LETTER O WITH DIAERESIS}"): u"o",

    ord(u"\N{LATIN SMALL LETTER O WITH STROKE}"): u"o",

    ord(u"\N{LATIN SMALL LETTER U WITH GRAVE}"): u"u",

    ord(u"\N{LATIN SMALL LETTER U WITH ACUTE}"): u"u",

    ord(u"\N{LATIN SMALL LETTER U WITH CIRCUMFLEX}"): u"u",

    ord(u"\N{LATIN SMALL LETTER U WITH DIAERESIS}"): u"u",

    ord(u"\N{LATIN SMALL LETTER Y WITH ACUTE}"): u"y",

    ord(u"\N{LATIN SMALL LETTER Y WITH DIAERESIS}"): u"y",

    ord(u"\N{LATIN SMALL LETTER A WITH MACRON}"): u"a",

    ord(u"\N{LATIN SMALL LETTER A WITH BREVE}"): u"a",

    ord(u"\N{LATIN SMALL LETTER C WITH ACUTE}"): u"c",

    ord(u"\N{LATIN SMALL LETTER C WITH CIRCUMFLEX}"): u"c",

    ord(u"\N{LATIN SMALL LETTER E WITH MACRON}"): u"e",

    ord(u"\N{LATIN SMALL LETTER E WITH BREVE}"): u"e",

    ord(u"\N{LATIN SMALL LETTER G WITH CIRCUMFLEX}"): u"g",

    ord(u"\N{LATIN SMALL LETTER G WITH BREVE}"): u"g",

    ord(u"\N{LATIN SMALL LETTER G WITH CEDILLA}"): u"g",

    ord(u"\N{LATIN SMALL LETTER H WITH CIRCUMFLEX}"): u"h",

    ord(u"\N{LATIN SMALL LETTER I WITH TILDE}"): u"i",

    ord(u"\N{LATIN SMALL LETTER I WITH MACRON}"): u"i",

    ord(u"\N{LATIN SMALL LETTER I WITH BREVE}"): u"i",

    ord(u"\N{LATIN SMALL LETTER J WITH CIRCUMFLEX}"): u"j",

    ord(u"\N{LATIN SMALL LETTER K WITH CEDILLA}"): u"k",

    ord(u"\N{LATIN SMALL LETTER L WITH ACUTE}"): u"l",

    ord(u"\N{LATIN SMALL LETTER L WITH CEDILLA}"): u"l",

    ord(u"\N{LATIN CAPITAL LETTER L WITH STROKE}"): u"L",

    ord(u"\N{LATIN SMALL LETTER L WITH STROKE}"): u"l",

    ord(u"\N{LATIN SMALL LETTER N WITH ACUTE}"): u"n",

    ord(u"\N{LATIN SMALL LETTER N WITH CEDILLA}"): u"n",

    ord(u"\N{LATIN SMALL LETTER O WITH MACRON}"): u"o",

    ord(u"\N{LATIN SMALL LETTER O WITH BREVE}"): u"o",

    ord(u"\N{LATIN SMALL LETTER R WITH ACUTE}"): u"r",

    ord(u"\N{LATIN SMALL LETTER R WITH CEDILLA}"): u"r",

    ord(u"\N{LATIN SMALL LETTER S WITH ACUTE}"): u"s",

    ord(u"\N{LATIN SMALL LETTER S WITH CIRCUMFLEX}"): u"s",

    ord(u"\N{LATIN SMALL LETTER S WITH CEDILLA}"): u"s",

    ord(u"\N{LATIN SMALL LETTER T WITH CEDILLA}"): u"t",

    ord(u"\N{LATIN SMALL LETTER U WITH TILDE}"): u"u",

    ord(u"\N{LATIN SMALL LETTER U WITH MACRON}"): u"u",

    ord(u"\N{LATIN SMALL LETTER U WITH BREVE}"): u"u",

    ord(u"\N{LATIN SMALL LETTER U WITH RING ABOVE}"): u"u",

    ord(u"\N{LATIN SMALL LETTER W WITH CIRCUMFLEX}"): u"w",

    ord(u"\N{LATIN SMALL LETTER Y WITH CIRCUMFLEX}"): u"y",

    ord(u"\N{LATIN SMALL LETTER Z WITH ACUTE}"): u"z",

    ord(u"\N{LATIN SMALL LETTER W WITH GRAVE}"): u"w",

    ord(u"\N{LATIN SMALL LETTER W WITH ACUTE}"): u"w",

    ord(u"\N{LATIN SMALL LETTER W WITH DIAERESIS}"): u"w",

    ord(u"\N{LATIN SMALL LETTER Y WITH GRAVE}"): u"y",

    })

# These are the ASCII characters NCBI knows about.  Note that I'm

# building one unicode string here, and not a tuple of unicode

# characters.

for c in (u"\N{SPACE}"

          u"\N{EXCLAMATION MARK}"

          u"\N{QUOTATION MARK}"

          u"\N{NUMBER SIGN}"

          u"\N{DOLLAR SIGN}"

          u"\N{PERCENT SIGN}"

          u"\N{AMPERSAND}"

          u"\N{APOSTROPHE}"

          u"\N{LEFT PARENTHESIS}"

          u"\N{RIGHT PARENTHESIS}"

          u"\N{ASTERISK}"

          u"\N{PLUS SIGN}"

          u"\N{COMMA}"

          u"\N{HYPHEN-MINUS}"

          u"\N{FULL STOP}"

          u"\N{SOLIDUS}"

          u"\N{DIGIT ZERO}"

          u"\N{DIGIT ONE}"

          u"\N{DIGIT TWO}"

          u"\N{DIGIT THREE}"

          u"\N{DIGIT FOUR}"

          u"\N{DIGIT FIVE}"

          u"\N{DIGIT SIX}"

          u"\N{DIGIT SEVEN}"

          u"\N{DIGIT EIGHT}"

          u"\N{DIGIT NINE}"

          u"\N{COLON}"

          u"\N{SEMICOLON}"

          u"\N{LESS-THAN SIGN}"

          u"\N{EQUALS SIGN}"

          u"\N{GREATER-THAN SIGN}"

          u"\N{QUESTION MARK}"

          u"\N{COMMERCIAL AT}"

          u"\N{LATIN CAPITAL LETTER A}"

          u"\N{LATIN CAPITAL LETTER B}"

          u"\N{LATIN CAPITAL LETTER C}"

          u"\N{LATIN CAPITAL LETTER D}"

          u"\N{LATIN CAPITAL LETTER E}"

          u"\N{LATIN CAPITAL LETTER F}"

          u"\N{LATIN CAPITAL LETTER G}"

          u"\N{LATIN CAPITAL LETTER H}"

          u"\N{LATIN CAPITAL LETTER I}"

          u"\N{LATIN CAPITAL LETTER J}"

          u"\N{LATIN CAPITAL LETTER K}"

          u"\N{LATIN CAPITAL LETTER L}"

          u"\N{LATIN CAPITAL LETTER M}"

          u"\N{LATIN CAPITAL LETTER N}"

          u"\N{LATIN CAPITAL LETTER O}"

          u"\N{LATIN CAPITAL LETTER P}"

          u"\N{LATIN CAPITAL LETTER Q}"

          u"\N{LATIN CAPITAL LETTER R}"

          u"\N{LATIN CAPITAL LETTER S}"

          u"\N{LATIN CAPITAL LETTER T}"

          u"\N{LATIN CAPITAL LETTER U}"

          u"\N{LATIN CAPITAL LETTER V}"

          u"\N{LATIN CAPITAL LETTER W}"

          u"\N{LATIN CAPITAL LETTER X}"

          u"\N{LATIN CAPITAL LETTER Y}"

          u"\N{LATIN CAPITAL LETTER Z}"

          u"\N{LEFT SQUARE BRACKET}"

          u"\N{REVERSE SOLIDUS}"

          u"\N{RIGHT SQUARE BRACKET}"

          u"\N{LOW LINE}"

          u"\N{LATIN SMALL LETTER A}"

          u"\N{LATIN SMALL LETTER B}"

          u"\N{LATIN SMALL LETTER C}"

          u"\N{LATIN SMALL LETTER D}"

          u"\N{LATIN SMALL LETTER E}"

          u"\N{LATIN SMALL LETTER F}"

          u"\N{LATIN SMALL LETTER G}"

          u"\N{LATIN SMALL LETTER H}"

          u"\N{LATIN SMALL LETTER I}"

          u"\N{LATIN SMALL LETTER J}"

          u"\N{LATIN SMALL LETTER K}"

          u"\N{LATIN SMALL LETTER L}"

          u"\N{LATIN SMALL LETTER M}"

          u"\N{LATIN SMALL LETTER N}"

          u"\N{LATIN SMALL LETTER O}"

          u"\N{LATIN SMALL LETTER P}"

          u"\N{LATIN SMALL LETTER Q}"

          u"\N{LATIN SMALL LETTER R}"

          u"\N{LATIN SMALL LETTER S}"

          u"\N{LATIN SMALL LETTER T}"

          u"\N{LATIN SMALL LETTER U}"

          u"\N{LATIN SMALL LETTER V}"

          u"\N{LATIN SMALL LETTER W}"

          u"\N{LATIN SMALL LETTER X}"

          u"\N{LATIN SMALL LETTER Y}"

          u"\N{LATIN SMALL LETTER Z}"

          u"\N{VERTICAL LINE}"

          u"\N{TILDE}"):

    xlate[ord(c)] = c

    

def fix_unicode(s):

    return str(s.translate(xlate))

```

----------

## Ic3M4n

beh, diciamo allora che iniziamo domani... perchè adesso ho da:

```
[ebuild     U ] x11-libs/gtk+-2.8.3-r1 [2.6.8]

[ebuild  N    ] media-libs/libao-0.8.5

[ebuild  N    ] media-sound/mpg321-0.2.10-r2

[ebuild  N    ] dev-python/eyeD3-0.6.2

[ebuild  N    ] dev-python/pycairo-0.9.0

[ebuild     U ] dev-python/pygtk-2.7.4 [2.6.1]

[ebuild  N    ] media-sound/321GtK-0.1
```

emergere queste simpatiche cosette... cmq una cosa: solitamente programmi in alfa ci si aspetterebbe anche un ~x86 come minimo, invece me lo fa emergere senza aggiungerlo all /etc/portage/package.keywords. così è più comodo, di sicuro, però di solito li si mette masked no?

----------

## xchris

ho usato come player mpg321 perche':

1 - generalmente funziona bene

2 - supporta diversi sound-system

3 - ha un modo di funzionamento REMOTE fatto apposta

4 - un po' cosi'...  :Smile: 

id3reader me lo avevi consigliato ma ha un problema a mio avviso.

Legge solo i tag e non puo' scriverli.

Siccome in futuro li scrivero' penso che rimarro' su eyeD3.

Ho contattato lo sviluppatore di eyeD3 e mi ha detto che supportera i 2.2 in lettura.

Visto che i 2.2 sono deprecati penso che li leggero' e li riscrivero' nella versione + appropriata.

Se dovessi aver casini con eyeD3 e' un attimo cambiare (il tutto e' principalmente in 4 file: gui,mpg321_lib (creata ad hoc),aux_class (un po' di roba),321gtk (la principale)

Grazie mille!

Christian

----------

## federico

Chi e' che usa pycairo tra quei programmi li ?

----------

## xchris

 *Ic3M4n wrote:*   

> 
> 
> emergere queste simpatiche cosette... cmq una cosa: solitamente programmi in alfa ci si aspetterebbe anche un ~x86 come minimo, invece me lo fa emergere senza aggiungerlo all /etc/portage/package.keywords. così è più comodo, di sicuro, però di solito li si mette masked no?

 

hai pienamente ragione.

Pero' considerato il fatto che al momento e' un pacchetto decisamente "sotto controllo" (da parte di chi lo installa) e non e' distribuito in modo ampio l'ho lasciato x86 per non sporcarvi il sistema. (io spesso mi rompo le palle se per provare un ebuild devo andare a sminchiare 3000 cose)

pycairo & co sono dovuti al nuovo pygtk credo...

io non lo uso perche' sono fermo a quello prima.

Mi auguro non ci siano pb...

----------

## federico

Chi ha pygtk e gtk nuove (per intenderci quelle derivanti dall'utilizzo dell'ultimo gnome) dovrebbe verde al limite un po' di warning, voci mi han gia' detto che su sidesms per esempio saltano fuori una paccata di warning ma che continua a funzionare tutto.

Per il resto, ho emerso il programma senza problemi e mi e' partito pure, ora lo provo un po' e vediamo se riesco a schiantarlo  :Smile: 

Fede

----------

## xchris

 *federico wrote:*   

> 
> 
> Per il resto, ho emerso il programma senza problemi e mi e' partito pure, ora lo provo un po' e vediamo se riesco a schiantarlo 
> 
> Fede

 

di sicuro riuscirai...

alcuni bug li conosco pure io..  :Wink: 

ma ho preferito iniziare a renderlo pub per raccoglieri abbastanza in fretta.

Spero non vi offendiate se vi sfrutto un pochino   :Surprised: 

Grazie Mille!!!!

----------

## federico

Anche io amo sfruttare  :Smile:  la gente di questo forum perche' sono tutti ottimi tester .)

Dunque, PENSO di aver configurato correttamente il programma prima dell'utilizzo, e poi sono passato ad un sync del database. 

Inesorabilmente ad un certo punto, sempre lo stesso il programma inizia a consumare il 100% di cpu e buonanotte al secchio. Ecco un po' di debug:

```

utf8 problems with /home/blackman/share/mp3/HardCore/HARDCORE - Gabber - Neophyte - Antimix.mp3

utf8 problems with /home/blackman/share/mp3/HardCore/Rotterdam Terror Corps - Motherfuckers.mp3

--> stop

--> quit

User Abort Request!

Cannot retrive file info: /home/blackman/share/mp3/HardCore/Rotterdam terror corps - Industrial life 2040.mp3

--> stop

--> quit

```

(Cavoli se passo per tabbozzo, questa e' la dir della festa  :Smile:  )

Ho provato a passare quella canzone al mio macinatore postato sopra e la prende correttamente, forse c'e' un qualche tipo di errore di parsing nel codice?

----------

## xchris

credo di no...

a parte i warning su utf8.

Ho idea che eyeD3 si blocchi su un mp3 specifico.

magari prova a modificare /usr/local/share/321GtK/aux_class.py

e in linea 68 metti (sotto def retrieve)

print self.file

cosi' vediamo che mp3 e'... e poi se me lo passi vedo cosa c'e' che non va.

(e poi lo cancello signori della SIAE)

ciao e grazie

eventualmente prova quickscandir su altra dir... tanto per vederlo andare.

----------

## .:deadhead:.

Fede fede, secondo me il gtk321 dopo una sana infanzia a suon di rock [basta vedere gli screen di xchris per capire che è cresciuto bene], appena ha messo piede in quella cartella da girone infernale, s'è spaventato  :Very Happy:  Metti il solito, lascia stare la festa. Punk & Rock fanno bene al python   :Very Happy: 

----------

## federico

 *.:deadhead:. wrote:*   

> Fede fede, secondo me il gtk321 dopo una sana infanzia a suon di rock [basta vedere gli screen di xchris per capire che è cresciuto bene], appena ha messo piede in quella cartella da girone infernale, s'è spaventato 

 

Si, infatti ora gli ho dato in pasto i "Funeral for a friend" ( http://www.funeralforafriend.com/ ) un gruppo che ha una sonorita' punk melodico con qualche spruzzo di doppio pedale e growl alla black metal (li ho sentiti al rock in idro e mi strippano) e funziona il programma  :Smile:  Farei un po' di modifiche ma mi rendo conto che ci saranno prima altre priorita'  :Smile: 

Fede

----------

## codadilupo

per ora tutto bene  :Wink: 

per cui mi permetto la prima richiesta (nel caso, prenditela con randomaze, che me l'ha involontariamente suggerito  :Wink: ): che sarebbe possibile dare in pasto anche archivi ? tipo, io ho molte canzoni archiviate in tar.bz2, o zip, o tar,gz, (per risparmiare spazio, e per rendere le cose piu' semplici agl'EMuliani, e sarebbe comodo non dover decomprimere a mano quello che voglio sentire, ma, ad esempio, farglielo decomprimere al volo, magari in swap, o RAM.

Coda

----------

## .:deadhead:.

Ottima cosa! Bella idea coda! un po' come fà già su win foobar2000

----------

## xchris

@coda: la feature e' interessante anche se a dire il vero non so quanto possa interessare... (e' un po' di nicchia)

e poi quanto spazio salvi?? ok per emule...

earcar mi ha fatto notare un bug: non salva il db dopo il resync.E' una stupidata di bug.. domani posto una ver corretta. (ora basta pigiare save)

grazie a tutti  :Smile: 

ciao

----------

## Ic3M4n

una domanda... forse mi è sfuggito, ma è normale che tutti gli mp3 rimangano mischiati insieme? e soprattutto: è normale che me li elenchi in base al nome del file e non seguendo artista e titolo? più che altro mi sembra scomodo dover cercare in un elenco lunghissimo una canzone, contando anche che se utilizzo la funzione "cerca" non mi seleziona il file che vorrei sentire ma sembra non fare niente.

----------

## xchris

le colonne sono "sortabili" cliccando sul nome della colonna.

In alto poi puoi fare la ricerca secondo diversi criteri.

Ultimo tipo di ricerca...e' quella offerta da gtk stessa. (anche se devo ammettere che devo risolvere un bug stupido)

Ovvero...

Cambiando nella combobox su artista ad esempio e cliccando su un elemento della lista e iniziando a digitare...

fa il match dalla prima lettera.

(il bug e' che di default non lo fa subito sul titolo...dovete spostarlo su artist e rimetterlo su title... coreggo...)

Ciao

EDIT: in che senso la funzione ricerca non va? a me pare vada... altre esperienze in merito?

EDIT2: con eyeD3-0.6.8 (non presente in portage :S ... legge i tag 2.2)

----------

## earcar

Oltre a qualche buggetto di gioventù, 321GtK (cambia nome per favore!  :Wink: ) è un'app che promette bene! Poi considerando il tempo in cui è stata scritta...  :Very Happy: 

Per farla promettere anche meglio  :Wink:  mi piacerebbe che avesse un paio di funzionalità in più:

Avete presente la funzione "Tieni organizzata la cartella iTunes Music"?

```
<cartella musica>/<artista>/<album>/<numero della traccia> <titolo del brano>.mp3
```

In aggiunta a "Copia i file nella cartella iTunes Music quando vengono aggiunti alla libreria" IMHO diventa fondamentale x l'organizzazione della musica (specie se si ha qlcs com 3000 mp3) anche xkè è molto comodo fare doppio click (o drag n drop) sul brano e vederselo già copiato nella partizione dedicata alla musica, sotto la cartella giusta  :Wink:  (per non parlare del fatto che quando cambi un tag id3 come artista o album cambia anche la cartella....)

L'altra funzione che su linux trovo indispensabile è un'interfaccia con l'esterno stile dcop...

Ho una tastiera mutimediale e uso hotkeys configurato in maniera che quando premo un tasto tra quelli stop, play ecc. si avvia uno script che verifica quale player è attivo (uso amarok e mpd in genere) e lancia il comando apposito per quel programma.

Poi ho la mania di avere sotto controllo il mio sistema tramite torsmo e non può certo mancare il nome della canzone che sta suonando!  :Wink: 

Ultima cosa: l'icona nella taskbar! così clicchi e sparisce la finestra dal desktop  :Wink: 

Sono un pigrone eh?  :Very Happy: 

Ciauz

earcar  :Wink: 

----------

## neon

 *earcar wrote:*   

> Avete presente la funzione "Tieni organizzata la cartella iTunes Music"?
> 
> ```
> <cartella musica>/<artista>/<album>/<numero della traccia> <titolo del brano>.mp3
> ```
> ...

 

Si, sono delle funzioni molto comode ma vedendo che ultimamente si discute anche su come vengono implementate le playlist nei lettori mp3 e chi ne detiene il brevetto non vorrei che il povero xchris si vedesse accusato dalla mammina di itunes di scopiazzatura di idee o simili...

----------

## federico

Io tra le features che ho desiderato ieri utilizzandolo parecchio ci sarebbero:

-Maggiore funzionalita' dello skip

-Leggere il titolo della canzone nell'icona relativa alla finestra nella taskbar

MA SOPRATTUTTO

Vorrei che le canzoni con lo stesso album venissero caricate sortate in ordine di numero e non in ordine di nome  :Smile:  Questo sarebbe figo.

Fede

----------

## xchris

senza tener conto che io quella funzionalità la disabilito subito su Itunes...

 :Smile: 

l'idea dei tar.gz & co non e' male ma non la vedo come una priorita adesso. (potrei eventualmente fare una versione iniziale con lo scompattamento in /tmp (o dir personalizzata) e l'aggiunta delle song in modalita' quickscan e poi si eventualmente si fa pulizia alla chiusura/apertura del prg.

le priorita' sono:

- la stabilità di questa versione

- il corretto funzionamento dei tag

- eventualmente una trayicon (e la scelta di chiusura o minimizzazione su on_delete)

- l'editing dei tag con musicbrainz

DCOP se non sbaglio e' roba di kde... (quindi...)

eventualmente metto come opzione il salvataggio del brano corrente (e di tutte le info relative) in un file temporaneo in modo tale da essere recuperato in modo agevole per qualunque scopo.Per il controllo ci penso su..

----------

## xchris

 *federico wrote:*   

> Io tra le features che ho desiderato ieri utilizzandolo parecchio ci sarebbero:
> 
> -Maggiore funzionalita' dello skip
> 
> 

 

in che senso? (ah.. ho aggiustato la barra ballerina)

 *federico wrote:*   

> 
> 
> -Leggere il titolo della canzone nell'icona relativa alla finestra nella taskbar 
> 
> 

 

ok.. ci avevo gia' pensato.. ma me so' dimentica'

 *federico wrote:*   

> 
> 
> MA SOPRATTUTTO
> 
> Vorrei che le canzoni con lo stesso album venissero caricate sortate in ordine di numero e non in ordine di nome  Questo sarebbe figo.
> ...

 

questo e' sicuramente realizzabile ma richiede degli extra-cicli che mal si sposerebbero con delle prestazioni decenti.

Cmq ci penso su...

eventualmente chi si intende di GTK o pyGTK mi puo' dire come caspita faccio a salvare un ListStore di botto?

(ora io salvo un "dict" con shelve e ripristino da quello...ma non e' velocissimo e mi spiace... perche' prima di tutto vorrei favorire le prestazioni)

Ciauz e grazie

----------

## flocchini

provato ora... Direi che e' stabile, l'ho maltrattato un po' ma non crasha (amd64),  peccato per l'assenza di playlist (lo so che e' una scelta, ma te lo dico lo stesso  :Razz: ) ma risulta comodo comunque seppur essendo gtk non credo diventera' mai la mia scelta preferenziale. Ho anche io un po' di warning sui caratteri utf-8 ma alla fine si mangia tutto.

veniamo ai bachi:

 - problemi con l'ordinamento per titolo, stranamente per lui la "u" viene prima della "A".

 - problemi con i db: lo crea, dice di salvarlo all'uscita ma alla riapertura 

```
* Loading preferences

adjust redirect!!!

* Loading from /home/flocchini/.321GtK/database

!!! Problem reading Database

```

E mi chiedo anche cosa voglia dire "adjust redirect!"  :Smile: 

Il resto e' gia' stato detto  :Razz: 

Mi associo anche io a coloro che richiedono una funzione per gli albun zippati, e poi potresti trovare un nome piu' in linea alle tue consuetudini  :Wink: 

----------

## xchris

per la playlist ci penso...

effettivamente molti le usano. (non io  :Very Happy:  )

il baco del salvataggio e' noto.

E' stato un mio errorino.. chiaramente. (gia' risolto sulla mia...)

(dopo il resync non salva anche se impostato... al momento salva in manuale e risolvi)

Adjust Redirect e' un reminder per me..  :Smile: 

(riguarda la classe mpg321_lib che ho creato per interfacciarmi a mpg321)

Per i zippati vedremo che fare...

le estensioni gradite? zip,tar.gz,tar.bz2,arj e cosa altro?

grazie per i test!

edit: l'ordinamento e' fatto da gtk.. non da me.. uno screenshot? 10x  :Smile: 

----------

## Lestaat

Questo l'errore che mi da.

Ho appena riprovato sia da shell che dal launcher di gnome e l'errore è sempre lo stesso

```
[~]$ 321GtK

You need to install pyGTK or GTKv2  or set your PYTHONPATH correctly.

try: export PYTHONPATH= /usr/local/lib/python2.2/site-packages/

```

----------

## xchris

posta questo:

scrivi da shell "python"

e poi

```

import pygtk

import gtk

import gtk.glade

```

dovrebbe darti errore...

ciao

----------

## Lestaat

Vero, e come risolvo? o meglio, che errore è?

```
[~]$ python

Python 2.4.1 (#1, Aug 29 2005, 15:28:29)

[GCC 3.3.5-20050130 (Gentoo 3.3.5.20050130-r1, ssp-3.3.5.20050130-1, pie-8.7.7. on linux2

Type "help", "copyright", "credits" or "license" for more information.

>>> import pygtk

>>> import gtk

Traceback (most recent call last):

  File "<stdin>", line 1, in ?

  File "/usr/lib/python2.4/site-packages/gtk-2.0/gtk/__init__.py", line 37, in ?

    from _gtk import *

ImportError: No module named cairo

>>> import gtk.glade

Traceback (most recent call last):

  File "<stdin>", line 1, in ?

  File "/usr/lib/python2.4/site-packages/gtk-2.0/gtk/__init__.py", line 37, in ?

    from _gtk import *

ImportError: No module named cairo

```

----------

## xchris

strano che non ti abbia messo cairo se usi le gtk nuove..

```

emerge --oneshot pycairo

```

ciao

----------

## Lestaat

ehm....

```
* dev-python/pycairo

     Available versions:  0.1.4 0.9.0

     Installed:           0.9.0

     Homepage:            http://cairographics.org/pycairo

     Description:         Python wrapper for cairo vector graphics library

```

----------

## xchris

oh bella...

La tua installazione di pygtk ha qc problemino

prova a riemergere (con oneshot) pygtk pycairo...

qualcuno ha una idea?

----------

## Lestaat

okok ho risolto...riemerso le pygtk...mah!!!

mo testo , e so cXXXi tua.. :Razz: 

----------

## xchris

 *Lestaat wrote:*   

> okok ho risolto...riemerso le pygtk...mah!!!
> 
> mo testo , e so cXXXi tua..

 

sono solo contento  :Smile: 

denghiu!

----------

## federico

Ecco lo shot:

http://www.sideralis.net/blackman/321gtk.jpg

ci ho messo assieme un paio di tipelle cosi' il programma vende di piu'   :Cool: 

Dunque, in una situazione come questa avrei gradito che il programma caricasse le canzoni ordinate per numero, visto che ho caricato un album intero e quando ascolti un disco solitamente inizi dalla prima  :Smile:  Apparentemente pare random quel caricamento   :Rolling Eyes: 

Fede

EDIT:

Anche premendo il tab della lista delle canzoni viene fatto un ordinamento alfabetico e non numerico, cosi' otteniamo 1, 10, 12, 2, 21 e via discorrendo

----------

## xchris

il caricamento non e' random ma segue esattamente quanto riportato da os.path.walk..

quindi e' l'ordine esatto in cui vengono "scannati" da python.

Di default non do nessun ordine...anche se e' chiaramente fattibile.

Ho qualche news:

- i msg di ut8 non corretto sono "falsi".. e' un mio errore.

- eyeD3-0.6.8 di cui vi daro' l'ebuild assieme a 321GtK-0.1a legge (ma non scrive) i tag 2.2

- i vari utf8 pango vedo di risolverli appena posso (al momento non sono vitali)

- ho fixato il fatto che non salva dopo il resync

- ho fixato il fatto che non mostra la track num nel riepilogo in alto

- ho fixato il comportamento della barra (anche se devo fare qualche miglioria)

- ho messo il nome della track sulla main_wnd

devo fare ancora un po' di cosette e poi faccio uscire la 0.1a.

Purtroppo vi devo chiedere di mettere su eyeD3-0.6.8 (ma vi preparo il tutto da starrare in overlay.. perche' comprendo la rottura)

Qual'era il problema che dicevi fede? (skip..)

Hai per caso provato a vedere se hai altri mp3 indemoniati su cui eyeD3 si inchioda bellamente?

sempre grazie...  :Wink: 

P.S.: da sidesms sto vedendo come ciucciarti la trayicon  :Wink: 

EDIT: bruttine le tipe..   :Razz: 

----------

## federico

 *xchris wrote:*   

> 
> 
> Qual'era il problema che dicevi fede? (skip..)
> 
> Hai per caso provato a vedere se hai altri mp3 indemoniati su cui eyeD3 si inchioda bellamente?
> ...

 

Oggi non ho testa di fare nulla...

 *Quote:*   

> P.S.: da sidesms sto vedendo come ciucciarti la trayicon 

 

Ricorda solo che c'e' un unico problema, il fatto che quando la finestra viene minimizzata questa non scompare dalla taskbar. Ho pensato per un po' che fosse un problema della tryicon ma mi sono convinto definitivamente che e' relazionato a qualcos'altro, ci dev'essere un qualche sistema che non abbiamo trovato che permette di nascondere la finestra dalla taskbar, se ci riesci fammelo sapere che mi interessa molto.

Il modulo utilizzato se vuoi cercarne documentazione si chiama eggtrayicon che e' in gentoo una librerie che viene data con gnome-python-extras. E' una cosa un po' strana visto che non dipende in alcun modo da gnome, e da qualche parte nelle pygtk faq trovi come esternare questo modulo per utilizzarlo senza essere costretto ad installare mezzo gnome. In windows invece non funziona quello, e n'e' stato utilizzato uno diverso, nel codice dovresti trovare una parte relativa a linux e una relativa a windows.

EDIT: bruttine le tipe..   :Razz: [/quote]

----------

## xchris

non vorrei dire una stupidata ma da glade (uso solo quello) c'e' l'opzione skip_taskbar e skip_pager...

prova a vedere bene perche' mi pareva di averla provata con successo.

CIao   :Smile: 

----------

## flocchini

ecco gli errori di ordinamento (spero si riescano a vedere le immagini)...

http://img352.imageshack.us/my.php?image=xchris15fk.png

http://img387.imageshack.us/my.php?image=xchris23cg.png

ed ecco altri errori che ho notato ora nelle preferences, non vorrei fossero dati dai miei caratteri ma non ho settato nulla di esotico non usando quasi mai apps gtk

http://img333.imageshack.us/my.php?image=xchris39mw.png

good work   :Wink: 

----------

## federico

 *xchris wrote:*   

> non vorrei dire una stupidata ma da glade (uso solo quello) c'e' l'opzione skip_taskbar e skip_pager...
> 
> prova a vedere bene perche' mi pareva di averla provata con successo.
> 
> CIao  

 

"ni"

Il punto e' che quella funzione toglie si la finestra dalla task, ma ha l'effetto sul tema di far sparire anche l'iconcina che ne permette la riduzione ad icona. Potrei risolvermi verso una soluzione alla winamp/xmms/bmp se non trovassi nulla: eliminare la decorazione del wm e rifarmela per conto mio

----------

## xchris

@flocchini:

ma le hai ordinate le viste? cliccando sulla colonna?

di default non li ordina... eventualmente lo setto di default.

Per preferences devo dire che hai dei caratteri mastodontici... cmq vedo di correggere. tenchiu'

@fede:

provero' appena implemento la trayicon

ciao

----------

## flocchini

 *xchris wrote:*   

> @flocchini:
> 
> ma le hai ordinate le viste? cliccando sulla colonna?
> 
> di default non li ordina... eventualmente lo setto di default.
> ...

 

uhm... secondo te?   :Laughing:  Di fatto ha il problema solo con alcuni fileperche' come puoi vedere in una delle altre immagini poi l'elenco parte regolarmente ed e' ordinato. Per i caratteri ripeto, potrebbe essere anche un qsa di strano sulla mia macchina, non stare a diventarci matto   :Wink:  grazie a te  :Smile: 

----------

## xchris

devo cmq rivedere la codifica dei chars... quindi potrebbe essere anche quello.

Per le label.. non mi costa nulla allargare..  :Smile: 

grazie!

----------

## xchris

versione 321GtK-0.1a uscita

Changelog:

*321GtK-0.1a (13 Sep 2005)

  * bugfix on AutoSave after Resync not working

  * bugfix on TrackNum not displayed on Details expander

  * bugfix for gtk column search

  * bugfix on quickscan first directory

  * bugfix on skipto routine

  * bugfix on stop command

  * Corrected slider crazyness and added time on moving

  * Use of 0.6.8 eyeD3 for reading old tags

  * Changed image tag view

  * Changed back behaviour

  * Changed micro-view layout (handlebox)

  * Added title to main window title

  * Added preliminary TrayIcon with simple menu and wheel command

  * Added option of taskbar hide

  * Added preliminary shuffle support

  * Added DND for files

  * Added operation lock when loading/resyncing

A parte molti bug fix c'e' di molto carino a mio avviso il controllo dalla trayicon.

A parte il solito menu con il pulsante destro l'icona e' sensibile alla mouse-wheel.

Scrollando cambierete song (e il tooltip vi dira' quale) e premendo la rotello lo metterete in pause.

L'applicazione per il momento e' nascondibile dalla taskbar e "poppabile" con la trayicon.

Sotto xfce ha qc problema il "nascondimento" ma in quel caso basta non scegliere l'opzione.

Ho messo un supporto preliminare dello shuffle (funziona in avanti... mentre indietro funziona normalmente...devo fare una history)

Il Drag N Drop funziona anche con i file ora.

Una funzione che mi sono dimenticato di menzionare e' la seguente.

Quando avete una lista potete selezionare dalla combobox in alto un campo (ad es Artist),

poi cliccare sulla lista e iniziare a digitare per avere una ricerca esatta nella lista. (e' una funzione di GTK)

Cambiando la combobox scegliete voi il criterio.

Per funzionare correttamente serve una versione di eyeD3 non presente in portage.

Ho preparato un tar di nome foroverlay......tar.bz2

Portatevi nella vostra overlaydir e scompattate.

A quel punto avrete gli ebuild di 321GtK e quello di eyeD3. (e i digest & co)

Bhe se qc ha un po' di pazienza e curiosità lo provi  :Smile: 

Graditi sempre i feedback di ogni tipo.

----------

## Lestaat

Il riordino della lista a mano?

----------

## xchris

mmm  :Sad: 

mi sono scordato alla grande.

Ora vedo come implementarlo in 2 sec e eventualmente vi dico esattamente dove metter mano!

Il problema e' che in questi giorni non si puo' dire che utilizzi il player per ascoltare musica...(chi mi sta vicino si stressa abbastanza...)

nella prossima non sgarrero'!!! promesso.

ciao

EDIT: per chi non sopporta il non-sorting iniziale modifichi /usr/local/share/321GtK/321GtK.py

linea 307 era:

```

if settings.load_previous:self.set_buttons()

self.set_visible_column()

if settings.autoload:self.on_open1_activate(None)

```

diventa

```

if settings.load_previous:self.set_buttons()

self.set_visible_column()

self.title_col.clicked()                  <-----------------------------

if settings.autoload:self.on_open1_activate(None)

```

mi spiace averlo dimenticato :S

----------

## federico

In linea di massima per ora nell'utilizzo di tutti i giorni vedo due principali problemi, due o tre.

Uno e' il fatto che mi piacerebbe poter impostare una default directory dalla quale partire per le mie ricerche di musica, la seconda e' il fatto che ora si hai sistemato lo skip ma non funziona + uno skip lungo (se clicco in un certo punto della barra mi aspetterei di trovarmi a quel punto) e inoltre non posso avere le canzoni ordinate, non sono ancora riuscito ad ascoltare un album nel suo ordine originale  :Smile: 

(Noto ora che c'e' una qualche differenza a proposito dell'ultima cosa che ho scritto a seconda se utilizzo il quickscan o il sync - non uso il sync di solito perche' continua a piallarsi per quel famoso fatto la-)

Fede

----------

## Lestaat

Allora.

Non sembra avere bugs.

E già questo mi sembra ottimo.

E' carino.

Poter editare i tag direttamente lo rende fichissimo. 

Le varie piccole features sono funzionali.

L'ordinamento per numero traccia ha il solito problema del 1,10,11,12,2,3,4...ecc

Si potrebbe modificare automaticamente con la dicitura a doppia cifra nel momento dell'acquisizione delle canzoni nel db?

Sarebbe ottimo

Come ottimo sarebbe il poter visualizzare la lista delle canzoni o potendole raggruppare per tag o cmq il poteer visualizzare solo i tag scelti.....mi spiego:

poter vedere la lista degli album ad esempio, oppure la lista degli autori.

E poi oltre alla playlist che io tanto non userei poter riordinare anche la lista del db "a mano". col drag del mouse insomma.

Ottimissimo lavoro xchris, mi piace proprio.

----------

## xchris

 *federico wrote:*   

> In linea di massima per ora nell'utilizzo di tutti i giorni vedo due principali problemi, due o tre.

 

bhe grazie per il test stressante!Solo un utilizzo continuativo evidenzia i problemi e le limitazioni!

Grazie!

 *federico wrote:*   

> 
> 
> Uno e' il fatto che mi piacerebbe poter impostare una default directory dalla quale partire per le mie ricerche di musica,
> 
> 

 

Non ho capito  :Smile: 

Se fai un quickscan dalla dir di partenza?

credo di non aver capito.  :Smile: 

 *federico wrote:*   

> 
> 
>  la seconda e' il fatto che ora si hai sistemato lo skip ma non funziona + uno skip lungo (se clicco in un certo punto della barra mi aspetterei di trovarmi a quel punto) e inoltre non posso avere le canzoni ordinate, non sono ancora riuscito ad ascoltare un album nel suo ordine originale 
> 
> 

 

Non ci crederai mai la sistemazione della barra e' un gran casino.

Vengono generati n-mila eventi diversi per ogni tipo di azione (scroll,key click,mouse click...)

Pensavo di aver trovato una sol accettabile. 

Avevo trascurato questo aspetto..

(ci pensero' meglio)

Lo skip con mouse-wheel ti gusta? io lo trovo comodo poter skippare in modo ultraveloce senza aprire il player o il menu della Tray. (il wheel-click mette in pausa)

Se noti anche il comportamento del back ora e' decente e uguale a quello di ogni comune player.

Grazie ancora

Chris

----------

## xchris

 *Lestaat wrote:*   

> Allora.
> 
> Non sembra avere bugs.
> 
> 

 

eh magari... direi che sono nascosti (e a volte non troppo)

 *Leestat wrote:*   

> 
> 
> Poter editare i tag direttamente lo rende fichissimo. 
> 
> 

 

Ma cosa hai provato?  :Very Happy: 

In futuro lo implementero'.

Ma ora e' bene concentrarsi sul player nudo e crudo.

 *Leestat wrote:*   

> 
> 
> L'ordinamento per numero traccia ha il solito problema del 1,10,11,12,2,3,4...ecc
> 
> Si potrebbe modificare automaticamente con la dicitura a doppia cifra nel momento dell'acquisizione delle canzoni nel db?
> ...

 

todolist.append  :Smile: 

 *Leestat wrote:*   

> 
> 
> Come ottimo sarebbe il poter visualizzare la lista delle canzoni o potendole raggruppare per tag o cmq il poteer visualizzare solo i tag scelti.....mi spiego:
> 
> poter vedere la lista degli album ad esempio, oppure la lista degli autori.
> ...

 

Ora penso a come muovermi... non sarà banale ma e' doveroso.

(Anche perche' lo scopo e' quello di tenere 321GtK snello e non pesante come molti altri player in giro)

 *Leestat wrote:*   

> 
> 
> E poi oltre alla playlist che io tanto non userei poter riordinare anche la lista del db "a mano". col drag del mouse insomma.
> 
> 

 

xmms-style.. 

todolist.append()  :Wink: 

Sono contento che ti piaccia anche se in fase primordiale.

Grazie per i suggerimenti!

Chris

----------

## federico

Eh si, utilizzando un programma una volta sola non capisci se lo puoi usare continuativamente oppure no...

Per la storia bella barra ci credo che sia un casino, probabilmente hai davanti anche altre priorita'..

Per quello che riguarda la "dir iniziale" vorrei per dire che o il programma partisse sempre per il quickscan dall'ultima dir che ho visitato, oppure da una dir che imposto io, come per dire /home/share/mp3 nel mio caso, in modo da essere sempre alla radice di tutti gli album. La cosa che + mi interesserebbe tuttavia che le canzoni caricate seguissero un ordine album e non un ordine ospathwalk  :Wink: 

----------

## Giepi

ho lasciato perdere gli ultimi post perchè m'è parso di capire che la funzione che cerco io non l'abbia... (e anche perchè... guardate che ora è!) dico solo una cosa: Se hai intenzione di fare una roba alla Media Library di Winamp divento BetaTester!

Ti prego! è una funzione comodissima  che non trovo da nessuna parte su linux!

praticamente si scannerebbe una dir (può essere anche /... come dovrebbe essere di default) e tiene in un db dell'applicazioni le canzoni e i tag, e poi ti ripropone con un click di una playlist di un album, di un autore, di un genere etc etc... magari con la possibilità di fare tutto a sinistra veloce veloce e vedersi comparire la nuova playlist a destra... e magari una qualche maniera per fare le ricerche a manina tipo selezionando due check box "artist" e "year" e così via!

Dai una occhiata a winamp se hai win e prova sta media library! secondo me è la cura per ogni lagnusia (=lavatività)! E poi rende effettivamente utili in qualche maniera i tag anzichè usare il classico "$artist - $songname.mp3" senza tag -.-

----------

## xchris

 *Giepi wrote:*   

> 
> 
> Ti prego! è una funzione comodissima  

 

posso essere sincero?

non ho capito  :Smile: 

Vedro' di provare winamp.Che versione?

Cmq 321GtK permette di scannare una master dir e salvare il db oppure una modalità di quickscan per vedere al volo una dir (anche con drag Drop).

Le ricerche sui tag sono gia' possibili.

Spiegami magari un po' meglio questa peculiarità di winamp.

Ciao

----------

## .:deadhead:.

Finalmente provo il player!  :Very Happy:  Ecco la mia lista della spesa per render troppo il migliore 321gtk:

- tag mp3 nella finestra apposta, titolo della canzone e bitrate [in basso a dx] in nero, il grigio usato è un po' poco leggibile IMHO

- render di default la modalità ADD e mettergli un Tip un po' più esplicativo, oppure spostare questo comportamento dalla GUI a Preferences/player Option/playing Options

- rendere il comportamento della finestra fi 321gtk come quello di eMule: sempre presenti come Trayicon, se si clicca su riduci a icona, scompare dalla taskbar.

- Aggiungere il supporto a zip gz rar tar.gz tar.bz2 ace e renderlo funzionale [alla chiusura del player cancellare le dir temporanee, magari create sotto /tmp, non lasciarle lì che occupano spazio]

- gestione delle directory a-la-iTunes [cambio tags e mi riorganizza le strutture degli mp3 di conseguenza, magari supportando anche gli archivi, vedi punto sopra]

Troppo  :Very Happy:  ? Eh queste sono idee, vediamo cosa è fattibile...

----------

## xchris

 *.:deadhead:. wrote:*   

> per render troppo il migliore 321gtk:
> 
> 

 

se... va bhe ...  :Laughing: 

 *tu wrote:*   

> 
> 
> - tag mp3 nella finestra apposta, titolo della canzone subito sotto l
> 
> 

 

nu ho caput

 *tu wrote:*   

> 
> 
> - render di default la modalità ADD e mettergli un Tip un po' più esplicativo, oppure spostare questo comportamento dalla GUI a Preferences/player Option/playing Options
> 
> 

 

ne abbiamo parlato ma mi sono spiegato male.

Il fatto di avere ADDMODE (che serve in caso di DragNDrop o di quickscan per sommare i file/cartelle aggiunte) nella main window permette un utilizzo + immediato.Metterlo nelle preferences renderebbe + macchinoso questo sistema.Eventualmente posso lasciare tutto cosi' com'e' e renderlo attivo di default. (poi uno eventualmente lo disattiva e imposta in preferenze il salvataggio delle impostazioni Add/skipto/shuffle).Che ne dici?

 *tu wrote:*   

> 
> 
> - rendere il comportamento della finestra fi 321gtk come quello di eMule: sempre presenti come Trayicon, se si clicca su riduci a icona, scompare dalla taskbar.
> 
> 

 

Questo comportamento e' simulabile.Ne abbiamo parlato un po' io e Federico.Gia' il nuovo sideSms lo implementa.

Nella next release vedro' di metterlo.

 *tu wrote:*   

> 
> 
> - Aggiungere il supporto a zip gz rar tar.gz tar.bz2 ace e renderlo funzionale [alla chiusura del player cancellare le dir temporanee, magari create sotto /tmp, non lasciarle lì che occupano spazio]
> 
> 

 

e' gia' nella todo list!  :Smile: 

 *tu wrote:*   

> 
> 
> - gestione delle directory a-la-iTunes [cambio tags e mi riorganizza le strutture degli mp3 di conseguenza, magari supportando anche gli archivi, vedi punto sopra]
> 
> 

 

Suggerimento gia' avuto... ma il punto e':

1- brevetti (del caz)

2- non amo che un prg mi smanacci troppo i miei mp3.Preferisco che sia in grado di farmeli visualizzare come voglio... ma devo essere io a spostarli.

(cmq non e' detto che nella gestione dei tag supporti poi anche un rename dei file... vedremo)

 *tu wrote:*   

> 
> 
> Troppo  ? Eh queste sono idee, vediamo cosa è fattibile...

 

 :Very Happy: 

grazie mille per i test e per i suggerimenti  :Wink: 

ciauz

EDIT:deadhead mi ha fatto notare un pb nel ebuild di eyeD3.Spero in giornata di riuscire a tirar fuori la 0.1b con qualche miglioria e ebuild decenti!

----------

## .:deadhead:.

 *xchris wrote:*   

> 
> 
> nu ho caput

 stavo scrivendo  :Very Happy: 

 *xchris wrote:*   

> (...)Che ne dici?

 io metterei add && salvataggio delle impostazioni di default su ON e poi se uno vuole le leva.

 *xchris wrote:*   

> Nella next release vedro' di metterlo.

 grande. l'esempio che ti avevo fatto di gaim non era calzante, aMule è un esempio più calzante.

 *xchris wrote:*   

> e' gia' nella todo list! 

  :Very Happy: 

 *xchris wrote:*   

> Suggerimento gia' avuto... ma il punto e':
> 
> 1- brevetti (del caz)
> 
> 2- non amo che un prg mi smanacci troppo i miei mp3.Preferisco che sia in grado di farmeli visualizzare come voglio... ma devo essere io a spostarli.
> ...

 La mia era una proposta che poteva interssare altri, io ovviamente la disattiverei. Apprezzabile l'idea del modificare i nomi dei File in base ai tag. Io trovo ottimo mp3tag [x win] Se vuoi prendere qualche spunto  :Very Happy: 

Ora mi è venuta in mente un'ultimo set di suggerimenti:

- cambia il nome a quickscan, non è molto chiaro [aggiungi directory è troppo brutto?] 

- aggiungi DB alle voci del menu file [Apri DB Salva DB] etc etc

- fai in modo che al pause e allo stop su una canzone non ci sia interruzione improvvisa ma un abbassamento di volume prograssivo [vedi winamp x Win]

Che bello, tutte le mie istanze sono state accettate: XChris, il devel  per l'utente che non deve chiedere mai   :Laughing:   :Laughing: 

----------

## Lestaat

 *Quote:*   

> fai in modo che al pause e allo stop su una canzone non ci sia interruzione improvvisa ma un abbassamento di volume prograssivo [vedi winamp x Win]

 

Magari attivabile e disattivabile che a non tutti piace. Odio il fade-out, quando cliccko per spegnere "SE DEVE DA SPEGNE"...  :Laughing:   :Laughing: 

----------

## xchris

quickscan mi sembra abbastanza chiaro.  :Smile: 

(cmq queste sono piccolezze che si possono cambiare)

per il fade-in out non c'e' problema.

Non si puo' fare  :Very Happy: 

(se non lo supporta mpg321 non posso farci nulla!)

Ciao

EDIT: cmq neanche io amo il fade-in-out... rende il lettore meno veloce. (vedi amarok...)

----------

## PboY

mi ci sono messo pure io a usarlo chris ... tutto bene per il momento l'unico problema che mi trovo è la dimensione della finestra che cambia a seconda delle visualizzazioni   :Rolling Eyes:   .. insomma vedo di farmi capire   :Laughing: 

chiudo tutto le view e tengo aperta solo la extended, se poi apro e chiudo le info su canzone e artista, la finestra di extended occupa il suo spazio piu quello delle info canzone-artista .. mentre se chiudo e riapro le extended mi ritorna a dimensione normale   :Shocked: 

spero di esser stato chiaro   :Embarassed:  altrimenti metto qualche shoot   :Razz: 

----------

## xchris

ti sei spiegato benissimo..

o per lo meno sapevo gia' di questa rottura.

Visto che non e' un problema primario per il momento mi concentro su altro!

Grazie cmq per i test e per la segnalazione  :Wink: 

----------

## xchris

alura..

sto implementando una prima versione dello scompattamento di tar.gz &co

Facendo 4 chiacchiere con federico via IM abbiamo avuto 2 visioni diverse di approcciarsi al problema.

-Scompattare usando le funzioni integrate di python

-Scompattare usando applicazioni esterne

Il primo approccio e' + elegante.

Il secondo + flessibile.

Supponiamo che domani esca un nuovo formato...

con il secondo approccio non ci sono problemi.

Con il primo direi di si.

La mia idea e' di mettere in preferences un elenco con i vari formati e di fianco le istruzioni personalizzate per scompattare l'archivio.

(addabili da user) (quindi secondo approccio)

Che ne dite?

----------

## .:deadhead:.

Vai di seconda, così ti permette anche di modificarne il comportamento ed il supporto via USE flag [chessò rar ace etc etc] magari macchinoso ma flessibile. lascia dubbioso solo quella possibilità lasciata all'utente per la scelta del SW da usare per scompattare: con l'uso delle use, il SW richiesto come dipendenza è quello usato di default per lo scompattamento. Il rischio altrimenti è quello che l'utente diventi pazzo con i vari parametri da associare ad ogni programma, a seconda del formato. Dove metterai i file estratti?

----------

## xchris

hai in realta' preso in pieno quello che volevo fare...

l'utente " potra' " e non " dovra' "  editare i parametri. (metto anche un bel butun-- default settings)

Creo il tutto sotto /tmp/321gtk-user/name of folder.

Voglio cmq pensare con calma.

Al momento funzica con tar.gz tar.bz2 zip .tar.. ed e' tutto hardcodato. (codice buttato giu' in 10 minuti)

eventualmente un volenteroso mi butta giu' un elenco:  :Very Happy: 

'extension':'command to unzip' ?

non ho fretta di ottimizzare questa funzione.

Preferisco dedicarmi ora a playlist e tag editing che richiede un po' di studio e di ravanemento di cervello  :Smile: 

ciao e grassie

----------

## phadron

mi aggrego alla bella combriccola

per scovare bugs (argh!!!) e proporre

features (con fiocchi e controfiocchi)

 :Twisted Evil: 

buon lavoro Egregio!  :Very Happy: 

----------

## xchris

mi fa molto piacere  :Smile: 

sto implementando la playlist.

A vostro avviso quali sono le feature indispensabili?

Scusate lo stress ma di sicuro N menti lavorano meglio di una!  :Wink: 

----------

## Onip

 *xchris wrote:*   

> 
> 
> sto implementando la playlist.
> 
> A vostro avviso quali sono le feature indispensabili? 

 

l'aggiunta di un file "al volo" durante la riproduzione, il riordino trascinando i file col mouse e la configurabilità del nome visualizzato in funzione dei tag. e poi, magari, che mi paghi pure per usarlo e testarlo   :Laughing:   :Laughing:   :Laughing: 

EDIT, un po' di typo

----------

## xchris

 *Onip wrote:*   

> 
> 
> l'aggiunta di un file "al volo" durante la riproduzione, il riordino trascinando i file col mouse e la configurabilità del nome visualizzato in funzione dei tag. e poi, magari, che mi paghi pure per usarlo e testarlo    

 

effettivamente come la stavo facendo non era il massimo.

(si togglava tra library e playlist proibendo il DragNDrop)

la configurabilita' in base al nome? in che senso?

bhe per usarlo e testarlo... ahem.. ho dubbi che non ci siano speranze  :Wink: 

tenchiu (e' il massimo che posso offrire  :Laughing:  )

----------

## Onip

nel senso che potrei volere (io generico utente) che mi visualizzi i file nella playlist in diversi formati, che so

```

numero_brano - Titolo

oppure

Artista - Titolo

Titolo

...

```

In questo senso... è più chiaro?

----------

## PboY

 *Onip wrote:*   

> 
> 
> ```
> 
> numero_brano - Titolo
> ...

 

è gia possibile .. basta che togli dalle preferenze le colonne che non vuoi, torni in playlist e le riordini come vuoi spostandole   :Rolling Eyes: 

----------

## xchris

si  :Smile: 

In piu' supporta un sorting avanzato (solo la mia versione di sviluppo)

http://www.xchris.net/download.php?file=screenshots/321GtK-new-7.png

Si possono specificare i criteri di sorting.

un segno - inverte l'ordine...

nel esempio significa:

ordina distinguendo prima tra le song che hanno un img nei tag,

poi ordina per Artista

poi per Album

poi per Track invertita. (14,13,12,....)

ciao

----------

## xchris

non vuole essere un UP ma ho alcuni dubbi e vorrei sentire qc parere..

Ha senso secondo voi implementare la playlist alla rhytmbox (ovvero si possono creare N playlist) oppure e' meglio lasciarlo il piu' pulito possibile e averne una sola (chiaramente si possono caricare/salvare)

Sinceramente io non la uso proprio la playlist e quindi gia' averne una alla xmms ed eventualmente caricarla/salvarla e' gia' un plus.

Perche' questa domanda?

Vorrei tenere l'interfaccia + snella possibile e una buona sol sarebbe switchare tra le 2 viste eventualemente....

Poter avere disponibile N playlist contemporaneamente che vantaggio ha?

10x

----------

## Onip

io sono per lo "stile xmms"

----------

## nomadsoul

 *xchris wrote:*   

> vedrai che piu' che altro saranno bug report...
> 
> anche se decisamente alfa ho preferito postare perche' n-tester sono meglio di uno 
> 
> (bhe almeno siamo in 2 )
> ...

 

la forma corretta e' 1+n tester > di 1 tester  con n>0  :Very Happy: 

----------

## .:deadhead:.

una playlist basta e avanza  :Very Happy: 

----------

## RexRocker

scusate l'ignoranza ma vorrei tanto provare questo programma anche per aiutare xchris ma non ho idea di come installarlo, ho guardato nella doc del sito ma non sono riuscito a trovare niente che mi aiuti, sicuramente avrò guardato male.

Non è che qualcuno mi da una mano?

grazie mille

ciao

Rex

----------

## Onip

nel primo post c'è il link a un archivio da scompattare nell'OVERLAY di portage

----------

## xchris

scusami tu se non sono stato abbastanza chiaro...

devi scaricare http://www.xchris.net/download.php?file=files/321GtK/321GtK-eyeD3-foroverlay.tar.bz2

e scompattarlo nella tua dir di overlay.

A questo punto...

```

emerge 321GtK

```

ciao

----------

## RexRocker

ma figurati xchris!!!! Sono io che per queste cose sono un po' impedito, mi ero buttato in ebuil ... digest e cose strane, appena rimetto mano sulla mia gentoo box (sono in office con win XP, pure HOME) installo tutto.

Ah!! La dir overlay di portage non credo di averla mai impostata, posso metterla ovunque?

Ciao

Rex

----------

## xchris

normalmente si fa:

```

mkdir /usr/local/portage

```

e ci si assicura di avere in make.conf

```

PORTDIR_OVERLAY="/usr/local/portage"

```

ciao e grazie  :Smile: 

----------

