kyv / rockola

rockola radiofonica
3 stars 3 forks source link

utilizar json para lista de reproduccion #2

Closed kyv closed 11 years ago

kyv commented 12 years ago

la rockola debe de obtener la lista actual en reproducción atreves de json. el json puede ser producido por mpdcron al momento que cambia la lista (version compilada), pero tambien debe de funcionar si un CGI devuelva un json en el formato adecuado.

algo parecido podria occurir tambien con la Cancion Actual. mpdcron 'compila' el json al momento que el canscion cambia.

fitorec commented 12 years ago

Puedes pegar aquí un ejemplo del formato json el mpdcron, para que vea el tratamiento que se le tendría que hacer el archivo.

kyv commented 12 years ago

Mpdcron no tiene formato para eso asi. Mpdcron unicamente corre sus ganchas . Voy escribir un script que si llama de una de las ganchas. Asi que la podemos estructurar como veamos mejor. Lo paso cuando esta.

kyv commented 12 years ago

algo asi para cancion actual:

  {
    Free:true,
    Mp3: "$URL_MP3",
    Oga: "$URL_OGG",
    Duration: "$DURATION",
    Artist:  "$MPD_SONG_TAG_ARTIST"
Album: "$MPD_SONG_TAG_ALBUM"
Album_Artist: "$MPD_SONG_ALBUM_ARTIST"
Title: "$MPD_SONG_TAG_TITLE"
Track: "$MPD_SONG_TAG_TRACK"
Name: "$MPD_SONG_TAG_NAME"
Genre: "$MPD_SONG_TAG_GENRE"
Date: "$MPD_SONG_TAG_GENRE"
Composer: "$MPD_SONG_TAG_COMPOSER"
Performer: "$MPD_SONG_TAG_PERFORMER"
Comment: "$MPD_SONG_TAG_COMMENT"
Disc: "$MPD_SONG_TAG_DISC"
Musicbrainz Artist ID: "$MPD_SONG_TAG_MUSICBRAINZ_ARTISTID"
Musicbrainz Album ID: "$MPD_SONG_TAG_MUSICBRAINZ_ALBUMID"
Musicbrainz AlbumArtist ID: "$MPD_SONG_TAG_MUSICBRAINZ_ALBUMARTISTID"
Musicbrainz Track ID: "$MPD_SONG_TAG_MUSICBRAINZ_TRACKID"

   }
kyv commented 12 years ago

un ejemplo sencillo para la cola:

{ 0: Dmitri Shostakovich - Symphony No.7, Op.60 'Leningrad' i. Allegretto, 1: Ella Fitzgerald - Drop Me Off in Harlem, 2: Mi chacua, 3: ACAPULCO TROPICAL [UNIVERSAL RECORDS MP3] - La Mona, 4: Musica/SalsaMeetsFunk/111-Frenz & Croma Latina - Medley En El Aire edited.mp3, 5: Etta James - Just A Little Bit, 6: VA -, }

fitorec commented 12 years ago

Que onda acabo de revisar tu ejemplo,veo que la salida del Mpdcron también incluye la duración de la canción, para el plugin del reproductor creo que le quedaría algo mas conveniente, el siguiente ejemplo:

{
    {
        nombre    : 'Dmitri Shostakovich',
        artista   : 'Symphony No.7, Op.60 Leningrad i. Allegretto',
        mp3_path  : '/nombre_archivo.mp3',
        mp3_ogg   : '/nombre_archivo.ogg',
        duracion  : '03:52'
    },
    {
        nombre    : 'Drop Me Off in Harlem',
        artista   :  'Ella Fitzgerald',
        mp3_path  : '/nombre_archivo.mp3',
        mp3_ogg   : '/nombre_archivo.ogg',
        duracion  : '05:00'
    },
    {
        nombre    : 'Medley En El Aire edited',
        artista   :  '111-Frenz & Croma Latina',
        mp3_path  : '/nombre_archivo.mp3',
        mp3_ogg   : '/nombre_archivo.ogg',
        duracion  : '04:23'
    },
    {
        nombre    : 'ACAPULCO TROPICAL [UNIVERSAL RECORDS MP3]',
        artista   :  'La Mona',
        mp3_path  : '/nombre_archivo.mp3',
        mp3_ogg   : '/nombre_archivo.ogg',
        duracion  : '02:42'
    }
}

No estoy seguro si debería llevar la ruta donde se localiza el archivo o la obtengo a partir de alguna convención entre nombre del artista/canción.

fitorec commented 12 years ago

De esta forma yo podría obtener la lista con el método getJson e interaccionar con las canciones p.e.

/*Código de ejemplo como obtendriamos una lista de reproducción y la metemos en el
 * contenedor de la lista de reproduccion de forma dinamica/asincrona.
 **/
$.getJSON('json/listaHome.json', function(listaReproducccion) {
  var canciones = '';

  $.each(listaReproducccion, function(key, cancion) {
        canciones += '<li id="cancion_' + key + '">' + 
                        cancion.artista + ' - ' + cancion.nombre +
                    '</li>';
  });
    //Agregamos en lista no ordenada(ul) los items y lo insertamos en 
    //el contenedor del reproductor.
  $('<ul/>', {
    'class': 'mi_lita_de_reproducccion',
    html: canciones
  }).appendTo('#contenedorListaReproducción');
});
kyv commented 12 years ago

mi parece bien

fitorec commented 12 years ago

Agregue la lista con un formato muy similar al que habíamos comentado ( de echo sólo por cuestión de la notación de la lista del plugin se cambiaron los nombres).

Agregue también una función (cargar_lista) para tratar esta lista y relacionarlo con plugin que estamos ocupando para la rockola.

Estoy pensando que la barra del menu izquierdo deberian de ser enlaces a listas y cuando le das click te deberia de cargar la lista de esa opcion, me imagino algo como.

Y cuando le den click te cargue la rockola con una nueva lista, donde esta lista pueden ser varios archivos de audio o una ruta hacia un streaming.

kyv commented 12 years ago

si mi parece mas o menos lo que estoy pensando tambien

kyv commented 12 years ago

ademas estoy pensando que la lista de rockoltes de la columna izquierda, puede ser producida dinamicamente.. quiza seria con una llamada ajax directamente a la oja de estatus de icecast, asi producienedo el json dinamicamente en el servidor de streaming. el formato de json creo que podria ser lo mismo que la rockola.

fitorec commented 12 years ago

¿Te refieres a la, nube de etiquetas que esta en el costado derecho?, estas mas que ser un canal en especifico(una radio) es mas bien una especie de categoría. Voy a darle una revisar la lista del costado izquierdo y a partir de esta igual y podemos clasificaras por categorías.

kyv commented 12 years ago

perdon columna izquierda. refero a eso que dice Nubes de Rockolites. Rockolite siendo otras rockolas, o otros radios por internet. entonces seria cargar esta lista de rockoltes dinamicamente.

El Nube de etiquetas, columna derecha, seria generado atreves de los etiquetas de los audios en la biblioteca, su metadata. como podemos manejar esto? Mpd utiliza sqlite para datos asociados con su biblioteca de musica. Utilizamos directamente el base de datos de mpd?

kyv commented 12 years ago

aparentamente es possible extraer los datos de audio con javascript. http://blog.nihilogic.dk/2008/08/reading-id3-tags-with-javascript.html

Pero igual es mas facil que mpd haga este trabajo.

fitorec commented 12 years ago

Mpd utiliza sqlite para datos asociados con su biblioteca de musica. Utilizamos directamente el base de datos de mpd?

Sí, si la intensión es que alguien descargue y ejecute la rockola veo viable una base de datos en formato sqlite, seria cosa de definir con que lenguaje se trabajaría debería de cumplir que:

Por ejemplo he visto que django y onRails traen un script que se ejecuta como servidor de producción.

#Caso de dijango
python manage.py runserver 8080
#Caso de rubyOnRails
rails server

Con esto no estoy diciendo que utilicemos django o Onrails si no que decidamos algún lenguaje y luego hacemos un pequeño demonio a partir de algunos ya existentes.

fitorec commented 12 years ago

Estoy revisando la página de ID3, tengo la duda si para extraer dicha información ¿descarga todo el archivo? o ¿sólo las cabeceras del archivo de audio?.

Revisando el ejemplo http://www.nihilogic.dk/labs/id3/ se ve rápido,... el detalle es si los archivos a los que les queremos extraer la información son mas pesado y/o son varios ¿no generaríamos una descarga grande para el usuario?.

El detalle de javascript es que se ejecuta en el cliente, el navegador tendra que descargar el archivo o una porción de esta para obtener dicha información.

kyv commented 12 years ago

Sí, si la intensión es que alguien descargue y ejecute la rockola veo viable una base de datos en formato sqlite,

En el caso de rockola.flujos.org, mpd sera presente en el servidor como automatizador de la radio. Y si, la idea seria que uno puede clonar la rockola, y funciona localmente. Aun que creo que no seria tan necesario, porque como en el scenario de flujos-vivos mpd es presente localmente. O bueno algun otro reproductor que mas seguro seria mas completo que la rockola.

Javascript únicamente tendrá que extraer los datos del base de datos.

seria cosa de definir con que lenguaje se trabajaría debería de cumplir que:

Aqui no entiendo bien pero mi idea era utilizar javascript para interactuar con el base de datos. El DB es generado automáticamente al actualizar la biblioteca de musica. No entiendo porque tendremos hacer un demonio.

Revisando el ejemplo http://www.nihilogic.dk/labs/id3/ se ve rápido,... el detalle es si los archivos a los que les queremos extraer la información son mas pesado y/o son varios ¿no generaríamos una descarga grande para el usuario?.

seguramente si. pero si existe un base de datos en el servidor, entonces si extrae los metadatos al momento de subir. en este momento el usuario no tendra que descargar nada.

kyv commented 12 years ago

he hecho un diagrama para visualizar como relacionan todo eso: http://kyv.github.com/rockola/diagrama.svg

fitorec commented 12 years ago

¿Como vez este proyecto?, manejo de BD con javascript https://github.com/kripken/sql.js

kyv commented 12 years ago

no lo conocía pero si ve muy bien.

kyv commented 11 years ago

por lo pronto he agregado la lista a el API, si puede hacer rockola.flujos.org/cola para obtener la lista actual. luego cambiaria hacer el version estatica.