Modérateurs: Modération Forum Oeuvres & Multimédia, Le Bureau de l’Association HCFR • Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 16 invités

Tablet PC abordable sous Android comme télécommande PCHC

Message » 01 Jan 2012 20:25

Bonjour à tous et bonne année 2012,

Il suffit de faire un petit tour sur ebay pour constater que les tablets PC deviennent abordables et rivalisent en coût avec les souris et les télécommandes sophistiquées. Je me pose donc serieusement la question aujoud'hui d'acheter une tablet à moins de 150 € dédiée au pilotage de mon PC.

Concernant la musique, j'utilise foobar : j'ai testé, sur un smartphone Xperia min pro l'application foodroid, secondée par le composant HTTP control dans foobar. Le wifi (de ma Freebox) permet ainsi de controler foobar presque n'importe où dans la maison avec une interface sympa et évolutive.

Concernant la "vidéo", je pense utiliser un logiciel tel que Unified Remote (la version gratuite) pour commander principalement DVBviewer et utiliser la tablet comme touch-pad.

je louche sur les Tablets PC premier prix que l'on trouve sur la bay comme le "7" google Android 2.3 tablet PC MD706 WIFI 3G 8GB Camera Capacitive Touch Screen" ou le "7" Allwinner A10 Cortex A8 1GHz Android 2.3 Tablet PC 5 point Capacitive WiFi" ou encore le "Ainol Novo 7 basic Honeycomb 7 inch capacitive touchscreen Android 3.2 Tablet pc". Je n'ai pas mis de lien car ils changent trop souvent : le mieux c'est de faire une recherche sur http://www.ebay.com (pas .fr :wink: ) avec "tablet PC capacitive".

Maintenant les questions dans le désordre :mdr: :

-la derniere citée semble être sous une version plus récente d'Android (3.2 contre 2.3) : c'est mieux ? Je suppose qu'il faut verifier la version compatible avec les programmes utilisés et que c'est ascendant.
-Autonomie : je suppose que ces bestioles si elles restent connectées sur pile en WIFI bouffent les piles en quelques heures ? Ça marche sur secteur ou il faut recharger à chaque fois ? (oui je sais c'est c.n comme question mais on ne sait jamais :-? )
- Ma maison date de 1850 et certains murs font 80 cm de large : quand le wifi ne passe pas, peut-on connecter une tablette autrement (dongle USB, RF,etc...). Qu'en est-il du débit dans ce cas. Le passage du WIFI à un autre mode peut-il être automatique ou pas. Il reste la solution du repeteur WIFI...
-Ecran capacitif ou résistif : si j'ai tout bien compris, capacitif pas besoin d'appuyer, c'est mieux. Les trois modèles cités plus haut sont indiqués capacitif, c'est bon ?
-Téléchargement des programmes : j'ai vu des tablets Amazon, Google, etc... Cela veut-il dire qu'il y a une limitation quelconque au choix des applis ou je peux mettre ce que je veux sur ma tablette. Quelle sont les limitations s'il y en a ? En gros j'achete une de ces tablettes, je copie dessus les deux applications citées plus haut et ça va fonctionner ou pas ?
-Tablet PC ou smartphone sous android, c'est pareil ? Mis à part qu'avec l'un on peut téléphoner et que l'autre à un plus grand écran :mdr: .
-Pour ce genre d'appli (télécommandes), je suppose que la capacité et la performance de la tablette sont sans grand interet. Je suppose aussi que la qualité de l'écran tactile est importante, ainsi que la réactivité WIFI.
Q'en pensez-vous ?
robob
 
Messages: 5925
Inscription Forum: 21 Mar 2007 19:23
Localisation: 95 (coté campagne)
  • offline

Message » 02 Jan 2012 15:04

Je me réponds à moi-même après avoir un peu surfé sur le Net :

La talette qui semble la plus intéressante des trois citées est la Ainol Novo. On peut télécharger la version Android 4.0, reste à savoir si les programmes cités plus haut sont compatibles. Je vais vérifier.
Dernière édition par robob le 02 Jan 2012 20:20, édité 1 fois.
robob
 
Messages: 5925
Inscription Forum: 21 Mar 2007 19:23
Localisation: 95 (coté campagne)
  • offline

Message » 02 Jan 2012 16:24

Salut !
Pourras tu donner ton avis sur celle que tu auras acheté, car j'ai un projet un peu similaire, mais peut etre en 10" !

Merci
firewall
 
Messages: 739
Inscription Forum: 01 Oct 2007 15:16
  • offline

Message » 02 Jan 2012 18:26

Ha zut alors, va encore falloir que je prenne tous les risques si c'est moi le preums... :ko:
robob
 
Messages: 5925
Inscription Forum: 21 Mar 2007 19:23
Localisation: 95 (coté campagne)
  • offline

Message » 02 Jan 2012 19:28

You are the master !! :lol:
firewall
 
Messages: 739
Inscription Forum: 01 Oct 2007 15:16
  • offline

Message » 03 Jan 2012 20:53

Commandé la Ainol Novo 7 paladin avec Android 4.0 : plus qu'à attendre la livraison de Chine :thks: ...
A priori, yapa de raison que ces programmes marchent pas. Je n'ai pas lu des masses de retour sur le net, on verra bien. :zen:
robob
 
Messages: 5925
Inscription Forum: 21 Mar 2007 19:23
Localisation: 95 (coté campagne)
  • offline

Message » 23 Jan 2012 11:32

Salut,
J'ai reçu depuis trois jours ma tablette Ainol.
Elle fonctionne très bien niveau réactivité de l'écran tactile et j'ai visionné rapidement un film SD copié sur mon PCHC : l'image est fluide et tout à fait satisfaisante.
Le lancement après arrêt complet est assez lent mais pas pire qu'un PC.
J'ai noté quelques problèmes de déconnexion WIFI en sortie de veille mais difficile de dire si cela vient de la tablette ou du réseau :j'ai essayé les différentes options de connexion/déconnexion du WIFI en veille mais je ne sais pas encore quelle est la meilleure solution. Il me faudra quelques jours de tests.

J'ai essayé quelques télécommandes dispo sur le market Android et fait quelques tests. Je livre mes impressions rapidement car je ne suis pas au bout de mes tests.

Pour controler foobar, il y a deux applis répandues, c'est foodroid et foomote : elles marchent toutes les deux sur le même principe, avec foo_HTTP_control. Je reviendrais sur la mise en place. Les applis sont pratiquement identique, je préfère foodroid pour deux raisons : 1- il y a une incruste publicitaire dans foomote version gratuite, 2- la gestion du volume de foomote n'est pas assez « démultipliée », en 4 click le son est à fond (mon PC sort directement sur ampli de puissance :ko: ). Sans doute peut-on réglé cela, je n'ai pas cherché.

Foodroid :
-la réactivité est immédiate quand on change de morceau sur la tablette ou on bouge le volume. La jaquette met tout de même quelques secondes à s'afficher.
-le folder (jaquette du CD) est affiché plein écran à l'écoute : les jaquettes de moins de 300x300 pixels devront être remplacée par des plus grandes sur l'écran de 7 pouces sinon elles sont flou.
-La navigation n’est pas très claire et je n’ai pas encore tout bien compris : j’aurais préféré une arborescence de type genres/artistes/albums au seins des playlists avec éventuellement l’affichage de la pochette en miniature. Je ne sais pas si c’est possible.
- truc gênant : quand on sort de veille, il n’y a pas de rafraîchissement automatique et l’appareil reste sur la pochette du morceau lu en entrée en veille : il y a un bouton « refresh » accessible en deux touches qui mériterait d’être sur l’écran principal.
-truc gênant 2 : pas mal de déconnexion WIFI par moment : je n’ai pas encore déterminé si cela provient du logiciel, de la tablette ou de mon réseau (Freebox V5 plus routeur WIFI pour augmenter la portée).

Pour contrôler mon player TV DVBviewer, j’ai choisis pour le moment Unified Remote en version full donc payante (3.75 € :wink: ) : C’est la seule appli que j’ai essayée qui disposait d’un plugin adapté à DVBviewer.

Unified remote :
-Beaucoup de bug au départ et une mise en place laborieuse. Aucune réactivité sur le forum de l’appli quand je posais des questions : j’ai fais les question/réponses tout le week-end (en anglais :ko: ).
-une fois l’appli en place et bien paramétrée, on se retrouve avec une télécommande tout à fait fonctionnelle, mais sans plus.
-je reproche surtout à l’application son manque d’interactivité : on peut envoyer des commande au PC mais guère en recevoir. Je souhaiterais plutôt une appli qui fasse télécommande mais qui permette aussi de « déporter » sur la tablette, le guide TV, le gestionnaire d’enregistrement, quelques images du film,etc histoire d’exploiter la tablette un minimum...

Une solution de type double écran sur la tablette ou prise de contrôle total (VNC par exemple) ne me semble pas viable au niveau du débit réseau WIFI et de la réactivité de la tablette.
Le marché étant jeune, je pense qu’il va rapidement évoluer, faut être patient et surtout pro-actif.
M'enfin, pour 87 €, cela vaut largement les télécommandes de type logitech ou une souris...
robob
 
Messages: 5925
Inscription Forum: 21 Mar 2007 19:23
Localisation: 95 (coté campagne)
  • offline

Message » 25 Jan 2012 20:46

Salut moi,

J'ai appris comment faire une capture d'ecran avec la tablette, je vais donc pouvoir faire un CR plus détaillé. Je précise que je découvre avec cette tablette le monde Android, donc j'ai plus de questions que de reponses pour le moment.

Pour la capture d'écran c'est la touche volume - en même temps que power.

Si vous avez un bon lien pour utiliser Android de façon "avancée" merci de le donner.

Je reviens sur Unified remote :

-J'ai récupéré sur leur forum la "custom remote" pour DVBviewer. Je reviens d'ailleurs sur ce que j'ai dit, on peut avoir au moins le guide TV sur la tablette comme le montre l'image de droite.

Image

J'ai modifié certain icones trop grands (C:\Program Files\Unified Remote\Remotes\Custom). la présentation de la télécomande est crée par le fichier dvbviewer_en.xml dans le même dossier, que l'on peut modifier facilement avec un editeur de texte :
En premiere partie du fichier, les actions determinent l'usage des touches : on peut lancer des scripts donc faire pas mal de choses. La deuxieme partie du fichier permet de "dessiner" chaque ligne de la télécommande ligne par ligne.

J'ai fais rapidement une modif de la télécommande DVBviewer ci dessus pour que l'essentiel des touches qui me sont utiles tienne sur un seul ecran :

Image

Le bouton "Chaines" affiche en fait les favoris et les boutons ch+ et - permet d'évoluer dans ces favoris.
Le bouton foobar en bas à droite me permet de lancer foobar car foodroid ne permet pas de le faire. En fait c'est juste pour tester les possibilités, l'idéal étant un lancement de foobar dans foodroid ou une telecommande foobar dans unified remote. IL y en a une mais elle est vraiment trop basique.

Il y a un petit bug dans cette telecommande DVBviewer, c'est le controle du volume qui affecte la sortie audio par defaut de Windows ; j'utilise une autre sortie avec DVBviewer. Les fleches gauches et droites permettent de modifier le volume quoi qu'il arrive.
Idéalement il faudrait que je trouve la liste des actions numérotées disponibles pour aller plus loin. Je m'y met dès que j'ai cinq minutes. :wink:
robob
 
Messages: 5925
Inscription Forum: 21 Mar 2007 19:23
Localisation: 95 (coté campagne)
  • offline

Message » 31 Jan 2012 10:13

C'est cool de pouvoir customiser comme ça. Avec apple, ce n'est malheureusement pas possible je pense... :-?
archeon
 
Messages: 1052
Inscription Forum: 14 Juin 2009 16:12
Localisation: Strasbourg (67)
  • offline

Message » 31 Jan 2012 10:35

Oui, par contre le forum du développeur est inactif : je ne sais pas si c'est mon mauvais anglais ou si le gars à laissé tomber le projet, mais je n'ai aucune réponse à mes question concernant la "remote" DVBviewer. J'aurais aimer mieux comprendre le fonctionnement afin de voir si j'étais capable de développer une remote foobar sous le même principe.

En fait, après quelques jours d'utilisation, je trouve la remote DVBviewer que j'ai modifiée parfaite pour mon usage. Par contre, foodroid est pas terrible : elle se déconnecte souvent quand on sort de veille, j'aimerais avoir une meilleure interface de navigation dans ma bibliothèque (vue des pochettes en mini, plus de possibilité de trie plus facilement).J'aimerais aussi qu'elle permette de lancer directement foobar et avoir accès au changement des sorties audios de mon PC.
robob
 
Messages: 5925
Inscription Forum: 21 Mar 2007 19:23
Localisation: 95 (coté campagne)
  • offline

Message » 31 Jan 2012 18:29

robob a écrit:Salut,

J'ai essayé quelques télécommandes dispo sur le market Android et fait quelques tests. Je livre mes impressions rapidement car je ne suis pas au bout de mes tests.

Pour controler foobar, il y a deux applis répandues, c'est foodroid et foomote : elles marchent toutes les deux sur le même principe, avec foo_HTTP_control. Je reviendrais sur la mise en place. Les applis sont pratiquement identique, je préfère foodroid pour deux raisons : 1- il y a une incruste publicitaire dans foomote version gratuite, 2- la gestion du volume de foomote n'est pas assez « démultipliée », en 4 click le son est à fond (mon PC sort directement sur ampli de puissance :ko: ). Sans doute peut-on réglé cela, je n'ai pas cherché.


Bonjour,

Voici ce que j'obtiens avec une tablette ACER Iconia Tab A500 et Foomote. C'est pas mal du tout !

http://www.audiotechno.fr/html/foobar.h ... der_Foobar

Je suis d'accord avec la remarque concernant la gestion du volume. Elle est réalisée en pourcentage et ne suit donc pas une loi logarithmique standard en audio. Il faut donc un potentiomètre en entrée de l'ampli...

cdlt
Alain
audiotechno
 
Messages: 43
Inscription Forum: 06 Nov 2009 11:51
Localisation: Yvelines
  • offline

Message » 06 Fév 2012 3:12

Salut tout le monde !

Perso j'utilise aussi Foobar sur mon serveur audio, et pour le télécommander je me suis acheté une tablette HP Touchpad (en action !).
Mais je ne voulais pas d'une appli spécifique, surtout que la majorité ne tournent que sous iPhone/iPad ou Android, et malheureusement pas sur WebOS de HP.

Donc j'ai utilisé le serveur foo_http_control, qui a besoin d'une simple page web pour fonctionner. Avantage, cela fonctionne avec n'importe quel système d'exploitation, il suffit d'un navigateur. Au besoin, il est toujours possible d'adapter la page en fonction de tel ou tel navigateur......et surtout des dimensions de la tablette !

J'ai téléchargé le code source sur hydrogen audio, et je l'ai complètement remanié pour avoir un look complètement personnel. Ce n'est pas difficile si on maîtrise un tant soi peut le html, les css et le javascript.

Voici le résultat:

Page de commande

Image

Page de la bibliothèque

Image

Je n'utilise pas le réglage de volume (je le règle sur le préampli), ni les playlists dans la bibliothèque (toute ma collection est sous forme de dossiers en arborescence).

Le flou sur les images vient des capture d'écran et du redimensionnement d'imageshack, en réalité tout est parfaitement net sur ma tablette !

Voilà, j'espère que cela donnera des idées à d'autres personnes si elles veulent se faire une télécommande complètement personnalisée.......
staki
 
Messages: 69
Inscription Forum: 13 Mar 2010 22:45
Localisation: Oups, j'ai pas de GPS.........
  • offline

Message » 08 Fév 2012 17:26

Si tu améliores l'interface visuelle (un peu de javascript :ko: ?) pour afficher les playlist sous forme de mini jacquettes par exemple, que ton programme permet de lancer et d'arreter foobar, que tu puisses éventuellement controler les sorties audio du PC (choix de la sortie, volume, mute), j'achete :mdr: :thks: .

Plus sérieusement, si tu veux mettre ton code à dispo ici, ça m'intéresse, j'essayerais de développer les points qui m'intéressent. On pourrais partager et déveloper une fooHCFRmote.
robob
 
Messages: 5925
Inscription Forum: 21 Mar 2007 19:23
Localisation: 95 (coté campagne)
  • offline

Message » 08 Fév 2012 20:59

Salut robob,

Ta réponse me fait plaisir, car j'attendais des réactions. En effet, mon travail n'est qu'un premier jet, et il y a certainement des tas de choses à améliorer et à compléter !

Ceci dit, je m'empresse de préciser que je n'ai rien inventé, tout le mérite en revient à l'auteur de "foo_http_control", un dénommé oblikoamorale, sur le forum hydrogenaudio. Si tu vas sur son thread (ici), tu verras qu'il ne s'est pas contenté de coder le serveur côté foobar, mais qu'il a également créé un "template" de page web de télécommande fonctionnel. D'ailleurs, d'autres personnes se sont inspirées de son template pour coder le leur, pour différents smartphones ou tablettes, et on peut les télécharger sur le même thread.

En ce qui concerne mon template, j'ai volontairement gardé un aspect visuel le plus simple possible, car avec le wifi la page web met un temps non négligeable pour se recharger depuis le serveur à chaque commande envoyée, et si elle est surchargée d'images de fond stockées sur le serveur, elle mettra un temps encore plus long à se recharger.
C'est pourquoi je n'ai utilisé que des éléments qui sont générés directement par le navigateur sur la tablette, comme les couleurs de fond, les lignes de séparation, les encadrements, et même les boutons. Il n'y a que l'image de la pochette et les titres de l'album qui se rechargent à chaque fois depuis le serveur.
Mais si le temps de chargement ne te dérange pas, c'est clair que tu peux grandement améliorer le design en utilisant des images de fond et des boutons qui sont stockés sur le serveur. Quand je parle de temps de chargement, avec mon template la page se recharge en une demi seconde environ, donc il reste de la marge ! :wink:

Pour les playlists ce n'est pas un problème, le template original les gère sans problèmes, moi je les ai enlevées car je ne les utilise pas. Même chose pour le réglage de volume, d'origine il y en a un.
Par contre, pour l'affichage des mini jacquettes, j'ai un doute, je ne sais pas si c'est faisable, car cela dépend du serveur, et le serveur d'oblikoamorale n'est pas modifiable tel quel, il faudrait tout un environnement de développement sous windows, cher et sophistiqué, et maîtriser des langages comme le C++, ce qui n'est pas mon cas......... :oops:
C'est le même problème pour le choix des sorties audio du lecteur.
Quant à lancer et arrêter foobar depuis la télécommande, ce n'est pas possible en l'état, car le serveur est installé DANS foobar sour forme de plugin, donc foobar doit être lancé avant. Si tu veux pouvoir le faire, alors il te faut utiliser une prise de contrôle à distance, installée sur la tablette, et qui te permettra de contrôler windows et tous les programmes depuis la tablette.

Pour le code, pas de problèmes, je veux bien le mettre à disposition. Il y a deux pages, c'est de l'ajax (html, css, javascript, xml).

Page de la bibliothèque (foo_httpcontrol_browser_tpl.html):

Code: Tout sélectionner
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>browser - foo_httpcontrol</title>
<link rel="shortcut Icon" href="/tablet/favicon.ico" type="image/x-icon" />
<meta name="author" lang="fr" content="Pierre Ingold">
<script language="JavaScript" type="text/javascript">
<!--
function getXMLHTTP()
{
   try {return new ActiveXObject("Msxml2.XMLHTTP");}
   catch(e) {try {return new ActiveXObject("Microsoft.XMLHTTP");}
   catch(e) {}}
   if(typeof XMLHttpRequest != "undefined") {return new XMLHttpRequest();}
   return null;
}
function EmptyPlaylist()
{
   httpRequestStatus = getXMLHTTP();
   try {
      httpRequestStatus.open("GET", '/tablet/?cmd=EmptyPlaylist&param3=NoResponse', true);
      httpRequestStatus.send(null);
   }
   catch(e) { }
}
function ReplaceAndEnqueueStep3()
{
    delete httpRequestStatus;

    httpRequestStatus = getXMLHTTP();
    try {
        httpRequestStatus.open("GET", '/tablet/?param3=foo_is_enqueueing.html', true);
        httpRequestStatus.onreadystatechange = function() {
            if (httpRequestStatus.readyState == 4)
            {
                if (httpRequestStatus.responseText == "0")
                {
                    window.location.href = "/tablet/?cmd=Start";                   
                }
                setTimeout("ReplaceAndEnqueueStep3()", 1000);
            }
        };
        httpRequestStatus.send(null);
        }
        catch(e) { };
}
function ReplaceAndEnqueuePreStep3()
{
    if (httpRequestStatus.readyState == 4)
    {
        setTimeout("ReplaceAndEnqueueStep3()", 1000);
    }
}
function ReplaceAndEnqueueStep2()
{
    if (httpRequestStatus.readyState == 4)
    {
        delete httpRequestStatus;
        httpRequestStatus = getXMLHTTP();
        try {
            httpRequestStatus.open("GET", '/tablet/?cmd=Browse&param1=[PATH]&param2=EnqueueDir&param3=NoResponse', true);
            httpRequestStatus.onreadystatechange = ReplaceAndEnqueuePreStep3;
            httpRequestStatus.send(null);
        }
        catch(e) { };
    }
}
function ReplaceAndEnqueueStep1()
{
    httpRequestStatus = getXMLHTTP();
    try {
        httpRequestStatus.open("GET", '/tablet/?cmd=EmptyPlaylist&param3=NoResponse', true);
      httpRequestStatus.onreadystatechange = ReplaceAndEnqueueStep2;
        httpRequestStatus.send(null);
    }
    catch(e) { };
}
function ReplaceAndEnqueuesubdirStep3()
{
    delete httpRequestStatus;
    httpRequestStatus = getXMLHTTP();
    try {
        httpRequestStatus.open("GET", '/tablet/?param3=foo_is_enqueueing.html', true);
        httpRequestStatus.onreadystatechange = function() {
            if (httpRequestStatus.readyState == 4)
            {
                if (httpRequestStatus.responseText == "0")
                {
                    window.location.href = "/tablet/?cmd=Start";                   
                }
                setTimeout("ReplaceAndEnqueuesubdirStep3()", 1000);
            }
        };
        httpRequestStatus.send(null);
        }
        catch(e) { };
}

function ReplaceAndEnqueuesubdirPreStep3()
{
    if (httpRequestStatus.readyState == 4)
    {
        setTimeout("ReplaceAndEnqueuesubdirStep3()", 1000);
    }
}

function ReplaceAndEnqueuesubdirStep2()
{
    if (httpRequestStatus.readyState == 4)
    {
        delete httpRequestStatus;
        httpRequestStatus = getXMLHTTP();
        try {
            httpRequestStatus.open("GET", '/tablet/?cmd=Browse&param1=[PATH]&param2=EnqueueDirSubdirs&param3=NoResponse', true);
            httpRequestStatus.onreadystatechange = ReplaceAndEnqueuesubdirPreStep3;
            httpRequestStatus.send(null);
        }
        catch(e) { };
    }
}

function ReplaceAndEnqueuesubdirStep1()
{
    httpRequestStatus = getXMLHTTP();
   
    try {
        httpRequestStatus.open("GET", '/tablet/?cmd=EmptyPlaylist&param3=NoResponse', true);
      httpRequestStatus.onreadystatechange = ReplaceAndEnqueuesubdirStep2;
        httpRequestStatus.send(null);
    }
    catch(e) { };
   
}
//-->
</script>
<style type="text/css">
<!--
html, body {
height: 100%;
}
body {
margin: 0;
padding: 0;
font-family:verdana, arial, helvetica, sans-serif;
background-color: #505050;
text-align: center;
}
#header {
position: fixed;
top: 5px;
right: 0px;
left: 0px;
bottom: 0;
height: 60px;
background-color: #505050;
text-align: center;
text-decoration: none;
}
input {
width:100px;
height: 45px;
background-color:#C5D6FC;
color:#0000FF;
text-align: center;
text-decoration: none;
font-size: large;
margin: 0;
padding: 0;
}
#main {
position: absolute;
top: 65px;
right: 0px;
bottom: 0px;
left: 0px;
margin-right:10px;
margin-bottom:15px;
margin-left:10px;
padding-top:10px;
padding-right: 5px;
padding-left : 5px;
overflow:auto;
background-color: #505050;
border:2px solid #0000FF;
}
.dir {
font-weight: normal;
text-transform: uppercase;
font-size:22px;
}
table {
border-collapse: collapse;
width: 100%;
margin-top: 1px;
margin-bottom: 1px;
background-color:#0000FF;
}
table td {
padding: 6px;
font-family:Verdana, Arial, Helvetica, sans-serif;
font-size:19px;
}
tr.odd td {
background-color: #464646;
color: #00FF00;
}
tr.even td {
background-color: #464646;
color: #00FF00;
}
tr.rodd td {
background-color: #464646;
color: A5D6FC;
}
tr.reven td {
background-color: #464646;
color: A5D6FC;
}
td.c1 {
width: 80%;
}
td.c2 {
text-align: right;
white-space: nowrap;
width: 5%;
padding-right: 5px;
}
td.c3 {
text-align: left;
white-space: nowrap;
width: 5%;
padding-left: 5px;
padding-right: 10px;
}
td.c4 {
text-align: right;
white-space: nowrap;
width: 10%;
}
a, a.current, a.current:hover {
text-decoration: none;
color: A5D6FC;
}
a:hover {
color: red;
}
form {
margin-top: 5px;
border: 0;
}
a img {
border: none;
text-decoration: none;
}
.arrondi{
-moz-border-radius: 5px;
-webkit-border-radius: 5px;
-khtml-border-radius: 5px;
-ms-border-radius: 5px;
background: -moz-linear-gradient(top, #A5D6FC, #C5D6FC);
background: -webkit-gradient(linear, 0% 0%, 0% 100%, from(#A5D6FC), to(#C5D6FC));
}
.arrondi:active{
background:#C5D6FC;
background: #C5D6FC;
}
-->
</style>
</head>
<body>
    <div id= "header">
        <form action="/tablet/" method="get" name="cmd_form" target="_self">
           
            <input name="Replace" title="Replace current directory including subdirectories" type="button" value="REPLACE" onclick="javascript:ReplaceAndEnqueuesubdirStep1()" class="arrondi">
            &nbsp;
            <input name="Empty Playlist" title="Empty Playlist" type="button" value="EMPTY" onclick="javascript:EmptyPlaylist()" class="arrondi">
            &nbsp;
            <a title="Enqueue current directory including subdirectories" href="/tablet/?cmd=Browse&amp;param1=[PATH]&amp;param2=EnqueueDirSubdirs"><input type="button" value="ENQUEUE" class="arrondi"></a>
            &nbsp;
            <a title="Play Queue" href="/tablet/?cmd=Start"><input type="button" value="PLAY" class="arrondi"></a>
            <input name="cmd" type="hidden" value="Browse">
            <input name="param1" type="hidden" value="">
            <input name="param2" type="hidden" value="">
        </form>
    </div>
    <div id="main">
    [BROWSER]
    <!--[PGT] ms-->
       
    </div>
</body>
</html>


Page des commandes (foo_httpcontrol_controls_tpl.html):

Code: Tout sélectionner
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
<html>
<head>
<title>[HELPER1X]foobar2000</title>
<link rel="shortcut Icon" href="/tablet/favicon.ico" type="image/x-icon" />
<meta name="author" lang="fr" content="Pierre Ingold">
<script language="JavaScript" type="text/javascript">
<!--
var mouseX = 0;
var p_key = 0;
var act = 0;

function KeyPress(e) {
   p_key = e;
   if (p_key == 16) // shift -- focus
      act = 3;
   else if (p_key == 17) // ctrl -- remove
      act = 4;
   else if (p_key == 81) // q -- enqueue
      act = 1;
   else if (p_key == 87) // w -- dequeue
      act = 2;
   else
      act = 0;
   document.getElementById('Actions').selectedIndex = act;
}

function pad(str, chr, count) {
   var str_out = str.toString();
   while (str_out.length < count)
      str_out = chr + str_out;
   return str_out;
}

function pc(c, p) {
   var com = c || ''; var par = p || '';
   with (document.cmd_form)
   {
      cmd.value = com;
      param1.value = par;
      submit();
   }
}

function format_time(time) {
   mins = Math.floor(time / 60);
   secs = pad(time % 60, '0', 2);
   return mins+":"+secs;
}

function set_t_pos(time) {
   var str = format_time(time) + " / ";
   document.getElementById("t_time").innerHTML = str + ( [ITEM_PLAYING_LEN] > 0 ? format_time([ITEM_PLAYING_LEN]) : '?' );
}

function set_np_width(t_sec, t_length) {
   var np_width = document.getElementById("npd").offsetWidth;
   np_width = np_width < 100 ? 100: np_width;
   document.getElementById('np').style.width=Math.floor(np_width * t_sec / t_length) + "px";
}

function t_playback_timer(t_sec, t_length) {
   if (t_sec <= t_length && t_length != 0)
   {
      set_t_pos(t_sec);
      if (t_length != 0)
         set_np_width(t_sec, t_length);
      setTimeout('t_playback_timer('+(t_sec+1)+','+t_length+')',1000);
   }
}

function a(track) { // do a(ction) on clicked entry
   if (act == 0)      pc('Start', track);
   else if (act == 1)   pc('QueueItems', track);
   else if (act == 2)   pc('DequeueItems', track);
   else if (act == 3)   pc('SetFocus', track);
   else if (act == 4)   pc('Del', track);
}

function np_onclick() {
   with (document)
      pc('Seek', Math.round((mouseX-getElementById("np").offsetLeft)*100 / (getElementById("npd").offsetWidth)) );
}

function mouse_capture_init() {
   if (document.layers? true : false)
      captureEvents(Event.MOUSEMOVE)
   document.onmousemove = handleMouseMove;
}

function handleMouseMove(evt) {
   if (evt)
      mouseX=evt.clientX;
   else
   if (event)
       mouseX=event.x;   
   return false;
}

function fit() {
   with (document.getElementById('playlist'))
   {
      style.position = 'static'; // important for the onresize event
      style.overflowY = 'auto';
      style.top = offsetTop + 'px';
      style.left = offsetLeft + 'px';
      style.right = offsetLeft + 'px';
      style.bottom = '8px'; // fit this to your taste
      style.position = 'fixed';

      var npelem = document.getElementById("nowplaying");
      if (npelem)
      {
         scrolltop = npelem.offsetTop - offsetHeight/2;

         if (scrolltop > 0)
            scrollTop = scrolltop;
      }
   }
}

document.onkeydown = function(evt) { KeyPress(evt?evt.keyCode:event.keyCode); }

var testin = [PLAYBACK_ORDER];
function afficher(form1) {
switch (testin)
{
 case 0:
 document.form1.output.value=("Play Normal");
 break;
 case 1:
 document.form1.output.value=("Repeat All");
 break;
 case 2:
 document.form1.output.value=("Repeat Track");
 break;
 case 3:
 document.form1.output.value=("Play Random");
 break;
 default:
 document.form1.output.value=("Error");
 break;
}
}
//-->
</script>
<style type="text/css">
<!--
html, body {
height: 100%;
}
body {
margin:0;
padding: 0;
font-family:verdana, arial, helvetica, sans-serif;
font-size:16px;
background-color:#505050;
color:#A5D6FC;
}
#global {
position:relative;
width:100%;
height:100%;
background-color:#505050;
}
#main_1 {
height:70px;
margin:0;
padding: 0;
background-color:#505050;
}
#leftheader {
float:left;
height:70px;
width:330px;
background-color:#505050;
padding-left:20px;
}
#total_time {
margin-top:8px;
padding:0px;
color:#A5D6FC;
}
#pqtt {
color:yellow;
}
#trackinfo {
margin-top:10px;
padding:0px;
}
#info {
color:#00FF00;
font-family:verdana, arial, helvetica, sans-serif;
font-size:16px;
padding: 0;
}
#header {
margin-left:350px;
height:70px;
width:670Px;
background-color:#505050;
}
#track_title {
margin-top:8px;
font-variant: small-caps;
background-color: #505050;
color: yellow;
padding-top: 4px;
text-align:center;
}
.track_t {
padding:5px;
font-size: 16px;
}
#main_2 {
clear:both;
margin:0;
padding: 0;
background-color:#505050;
}
#sidebar  {
float:left;
width:320px;
background-color:#505050;
padding-left:20px;
}
#cover {
width:290px;
margin-bottom:6px;
padding:0;
border:2px solid #0000FF;
}
#order {
width:120px;
height: 20px;
background-color:#505050;
color:#00FF00;
text-align: left;
font-size:16px;
font-weight:normal;
margin: 0;
padding: 0;
border: none;
}
input {
width:54px;
height: 45px;
background-color:#C5D6FC;
color:#0000FF;
font-weight:bold;
text-align: center;
font-size:15px;
margin: 0;
padding: 0;
}
#status {
color:#00FF00;
font-family:verdana, arial, helvetica, sans-serif;
font-size:16px;
font-weight:normal;
margin: 0;
padding: 0;
}
#t_time {
}
.track_p {
padding:10px;
font-size:26px;
color:red;
}
#npd {
position: relative;
background-color: #A5D6FC;
font-size: 7px;
margin-left: 0px;
margin-right: 20px;
margin-top : 15px;
margin-bottom: 0;
padding-right: 6em;
white-space: pre-wrap;
cursor: move;
}
#np {
position: absolute;
top:0;
right:0;
bottom:0;
left:0;
heigth: 7px;
opacity: .99;
background-color: #FF0000;
}
#playlist {
width:635Px;
height:495px;
margin-top:4px;
margin-left:25px;
margin-bottom:0px;
padding-top:5px;
background-color:#505050;
border:2px solid #0000FF;
text-align:center;
}
table {
text-align:left;
margin:auto;
}
table td {
font-family:Verdana, Arial, Helvetica, sans-serif;
font-size:16px;
color:A5D6FC;
padding: 5px;
}
tr.npr td {
background-color: #505050;
}
/* playlist entries highlight */
tr.o td {
background-color: #505050;
}     /* o(dd) */
tr.e td {
background-color: #505050;
}     /* e(ven) */
tr.prev td {
}   /* prev(iously played) */
tr.focus td {
color:red;
} /* focus(ed) */
tr.queue td {
background-color: #505050;
} /* queue(d) #ecebff */
td.t {
text-align: right;
}                /* t(otal time) */
td.q {
text-align: right;
}                /* q(ueue order) */
#browser {
position:absolute;
margin-top:520px;
margin-left:430px;
}
#refresh {
position:absolute;
margin-top:520px;
margin-left:740px;
}
#big {
width:200px;
height: 50px;
background-color:#C5D6FC;
color:#0000FF;
text-align: center;
font-size: large;
font-weight:normal;
margin-top: 10px ;
padding: 0;
}
a, a.current, a.current:hover {
color:A5D6FC;
}
a:hover {
text-decoration: none;
color: #FF0000;
}
form {
}
p {
line-height:8px;
}
.arrondi{
-moz-border-radius: 5px 5px 5px 5px;
-webkit-border-radius: 5px;
-khtml-border-radius: 5px;
-ms-border-radius: 5px;
background: -moz-linear-gradient(top, #A5D6FC, #C5D6FC);
background: -webkit-gradient(linear, 0% 0%, 0% 100%, from(#A5D6FC), to(#C5D6FC));
}
.arrondi:active{
background:#C5D6FC;
background: #C5D6FC;
}
.arrondi2{
-moz-border-radius: 2px;
-webkit-border-radius: 2px;
-khtml-border-radius: 2px;
-ms-border-radius: 2px;
}
-->
</style>
</head>
<body onload="mouse_capture_init(); fit(); afficher(form1);" onresize="fit();">
    <div id="global">
        <div id="main_1">
            <div id="leftheader">
                <div id="total_time">Total Time:&nbsp;<span id="pqtt">[PLAYLIST_TOTAL_TIME][QUEUE_TOTAL_TIME]</span></div>
                <div id="trackinfo">Track Info:&nbsp;<span id="info">[HELPER3X]</span></div>
            </div>
            <div id="header">
                <div id="track_title" class="track_t">[HELPER2X]</div>
            </div>
        </div>
        <div id="main_2">
            <div id="sidebar">
                <div id="cover"><a href="javascript:pc();"><img src="[ALBUMART]" width="290px" height="290px" border="none"></a></div>           
                <form name="form1">
                    Playback Order:&nbsp;&nbsp;<input id="order" title="playback order" type="text" name="output" value="()";>
                </form>
                <p>
                    <input name="0" title="default" type="button" value="nor" onclick="pc('PlaybackOrder',this.name);" class="arrondi">
          <input name="2" title="repeat track" type="button" value="one" onclick="pc('PlaybackOrder',this.name);" class="arrondi">
                    <input name="1" title="repeat playlist" type="button" value="all" onclick="pc('PlaybackOrder',this.name);" class="arrondi">
                    <input name="3" title="random" type="button" value="?" onclick="pc('PlaybackOrder',this.name);" class="arrondi">
                </p>
                    <hr height="2px" width="290px" color="#0000FF" align="left"></hr>
                <form action="/tablet/" method="get" name="cmd_form" target="_self">   
                    Playback Status:&nbsp;&nbsp;<span id="status"></span>
                    <p>
                        <input name="Stop" title="Stop playback" type="button" value="#" onclick="pc(this.name);" class="arrondi">
                        <input name="PlayOrPause" title="Pause/resume playback" type="button" value="||" onclick="pc(this.name);" class="arrondi">
                        <input name="Start" title="Start playback" type="button" value="|>" onclick="pc(this.name);" class="arrondi">
                        <input name="StartPrevious" title="Play previous track" type="button" value="||<" onclick="pc(this.name);" class="arrondi">
                        <input name="StartNext" title="Play next track" type="button" value=">||" onclick="pc(this.name);" class="arrondi">
                    </p>
                    <hr height="2px" width="290px" color="#0000FF" align="left"></hr>
                    <label id="Actions" title="Playlist action on click"></label>
                    <p>
                    <div id="tracktime">Track Time:&nbsp;<span id="t_time" class="track_p"></span></div>
                    </p>
                    <p>
                    <div id="npd" onclick="np_onclick();" class="arrondi2"><span id="np" class="arrondi2"></span>a</div>
                    </p>                 
                    <input name="cmd" type="hidden" value=""><input name="param1" type="hidden" value="">
                </form>
<script language="JavaScript" type="text/javascript">
<!--
with (document)
{
   act = [LAST_ACTION];
   getElementById('Actions').selectedIndex = act;
        var i_p;
    if ('[PLAYLIST_ITEM_PLAYING]' != '?')
      i_p = parseInt('[PLAYLIST_ITEM_PLAYING]') + 1;
    else
      i_p = '?';
if ([IS_PLAYING]) { // start progressbar if playing
   t_playback_timer([TRACK_POS],[TRACK_LEN]);
   if (([TRACK_LEN]>0))
      setTimeout('pc()',([TRACK_LEN]-[TRACK_POS])*1000 + 500);
   getElementById('status').innerHTML = ' Playing ' + i_p +  ' / [PLAYLIST_PLAYING_ITEMS_COUNT] ';
}
else if ([IS_PAUSED]) { // adjust progressbar width if paused
   set_np_width([TRACK_POS], [TRACK_LEN]);
   set_t_pos([TRACK_POS]);
   getElementById('status').innerHTML = ' Paused ' + i_p + ' / [PLAYLIST_PLAYING_ITEMS_COUNT] ';
} else { // hide unnecessary track info if stopped
   counter = getElementById("counter");
   if (counter)
      counter.innerHTML = "";
   getElementById("status").innerHTML = "Stopped";
   getElementById("npd").style.visibility = "hidden";
}

if ([IS_ENQUEUEING] ) {
   getElementById('status').innerHTML = '[ Enqueuement in progress ] ' + getElementById('status').innerHTML;
   setTimeout('pc()',5000);
}

track = getElementById("track_title");

if (track && track.innerHTML == '' && ([IS_PLAYING] || [IS_PAUSED])) // if playing but track info is not loaded yet, reload page
   setTimeout('pc()',500);

npp = getElementById("np");   // adjust progressbar width and height, and opacity hack for IE6
if (npp)
with (npp.style) {
//   if (getElementById("np").offsetHeight >= 2 )
//      height=getElementById("np").offsetHeight*2-2+"px";
//   left=getElementById("npd").offsetLeft+"px";
   filter = "alpha(opacity=50)";
}
}
//-->
</script>
            </div>
            <div id="playlist">
                <table>[PLAYLIST]
                <tr><td></td></tr>
                </table>
            </div>
            <div id="browser">
                <input id="big" title="browse library" type="button" name="Browse" value="BROWSE LIBRARY"; onclick="pc(this.name)"; class="arrondi"></input>
            </div>
       <div id="refresh">
      <input id="big" title="Refresh Page" type="button" name="Refresh" value="REFRESH" onclick="pc(this.name);" class="arrondi"></input>
       </div>
        </div>
       
    </div>
</body>
</html>



Voilà, j'attends tes idées ! :wink:
A+
staki
 
Messages: 69
Inscription Forum: 13 Mar 2010 22:45
Localisation: Oups, j'ai pas de GPS.........
  • offline

Message » 08 Fév 2012 22:15

Je regarderais des que je peux :
Deux idées déjà :
1-comme dit plus haut, j'utilise Unfied remote pour gerer DVBviewer : cette telecommande possede sont propre serveur sur le PC qui a l'avantage d'être indépendant des autres logiciels, qui peut tourner en tache de fond des le démarrage de windows. On peut lancer à distance n'importe quel script sur le PC, comme le démarrage d'un programme ou des trucs plus chadés bien sur. L'idée pour moi est d'utiliser ce serveur avec lequel j'ai dèjà intégré le lancement de foobar (voir mon post plus haut). Je voudrais faire une telecommande sous unified remote qui utiliserait aussi le serveur foo_http_control pour bénéficier des deux possibilités.
2- Pour les temps de téléchargement, je suppose qu'on doit pouvoir placer certains fichiers sur la tablette plutot que sur le serveur : pour afficher des mini-jackettes par exemple en les plaçant sur la tablette au moyen d'une touche de rafraichissement ou je ne sais quoi d'autre (faut voir le nombre de pochette à "remonter", mais pour 1000 CD, par exemple ça doit pas être monstrueux). Une fois les pochettes sur la tablette, on aurait un truc instantané. Avoir un coverflow à la iTunes serait un must, mais là j'ai pas le temps (ni les compétences :mdr: ).
robob
 
Messages: 5925
Inscription Forum: 21 Mar 2007 19:23
Localisation: 95 (coté campagne)
  • offline


Retourner vers Smartphones & Tablettes

 
  • Articles en relation
    Dernier message