Browse Source

- aperçu sonore à l'instar du visuel pour les musiques mp3, ogg, wav

Rajah 8 months ago
parent
commit
6a5b38d232

BIN
html/WEB-INF/lib/basicplayer-3.0.0.0.jar


BIN
html/WEB-INF/lib/jlayer-1.0.1.4.jar


BIN
html/WEB-INF/lib/jorbis-0.0.17.4.jar


BIN
html/WEB-INF/lib/mp3spi-1.9.5.4.jar


BIN
html/WEB-INF/lib/tritonus-all-0.3.7.2.jar


BIN
html/WEB-INF/lib/tritonus-share-0.3.7.4.jar


BIN
html/WEB-INF/lib/vorbisspi-1.0.3.3.jar


File diff suppressed because it is too large
+ 4 - 4
html/pages/choix.jsp


+ 7 - 17
src/fr/triplea/vote/beans/Choix.java

@@ -58,12 +58,8 @@ public class Choix extends Beans implements Serializable
 	private String[] machines = null;
 	/** commentaire */
 	private String[] commentaires = null;
-	/** visuel */
-	private String[] visuels = null;
-	/** largeur du visuel */
-	private int[] visuel_largeurs = null;
-	/** hauteur du visuel */
-	private int[] visuel_hauteurs = null;
+	/** aperçu en image ou sonore */
+	private String[] apercus = null;
 
 	public void setNombre(int n)
 	{
@@ -78,13 +74,11 @@ public class Choix extends Beans implements Serializable
 			groupes = new String[n];
 			machines = new String[n];
 			commentaires = new String[n];
-			visuels = new String[n];
-			visuel_largeurs = new int[n];
-			visuel_hauteurs = new int[n];
+			apercus = new String[n];
 		}
 	}
 
-	public void setProduction(int index, int numero, char lettre, String titre, String auteur, String groupe, String machine, String commentaire, String visuel, int largeur, int hauteur)
+	public void setProduction(int index, int numero, char lettre, String titre, String auteur, String groupe, String machine, String commentaire, String apercu)
 	{
 		if (index > -1 && index < nombre)
 		{
@@ -95,9 +89,7 @@ public class Choix extends Beans implements Serializable
 			groupes[index] = new String(groupe);
 			machines[index] = new String(machine);
 			commentaires[index] = new String(commentaire);
-			visuels[index] = new String(visuel);
-			visuel_largeurs[index] = largeur;
-			visuel_hauteurs[index] = hauteur;
+			apercus[index] = new String(apercu);
 		}
 	}
 
@@ -110,10 +102,8 @@ public class Choix extends Beans implements Serializable
 	public String getGroupe(int index) { if (index > -1 && index < nombre) { return groupes[index]; } return ""; }
 	public String getMachine(int index) { if (index > -1 && index < nombre) { return machines[index]; } return ""; }
 	public String getCommentaire(int index) { if (index > -1 && index < nombre) { return commentaires[index]; } return ""; }
-	public String getVisuel(int index) { if (index > -1 && index < nombre) { return visuels[index]; } return ""; }
-	public int getLargeurVisuel(int index) { if (index > -1 && index < nombre) { return visuel_largeurs[index]; } return 0; }
-	public int getHauteurVisuel(int index) { if (index > -1 && index < nombre) { return visuel_hauteurs[index]; } return 0; }
-	public boolean hasVisuel(int index) { if (index > -1 && index < nombre) { return (visuel_largeurs[index] > 0) && (visuel_hauteurs[index] > 0); } return false; }
+	public String getApercu(int index) { if (index > -1 && index < nombre) { return apercus[index]; } return ""; }
+	public boolean hasApercu(int index) { if (index > -1 && index < nombre) { return (apercus[index].length() > 0); } return false; }
 
 	public boolean isDejaChoisi(int num) 
 	{

+ 12 - 9
src/fr/triplea/vote/servlet/Categorie.java

@@ -246,7 +246,7 @@ public final class Categorie extends HttpServlet
 			param.addColumn("par_ino_cat", Types.INTEGER);
 
 			SqlTAB prods = new SqlTAB(pool, numeroParticipant);
-			prods.setColonnesVoulues(new String[]{"CTITRE_PROD", "CAUTEUR_PROD", "CGROUP_PROD", "CPLATEFORME_PROD", "CCOMMENTAIRE_PROD", "CINFOPRIVEE_PROD", "INO_PROD", "BSNAPSHOT_PROD"});
+			prods.setColonnesVoulues(new String[]{"CTITRE_PROD", "CAUTEUR_PROD", "CGROUP_PROD", "CPLATEFORME_PROD", "CCOMMENTAIRE_PROD", "CINFOPRIVEE_PROD", "INO_PROD", "BSNAPSHOT_PROD", "ISNAPSHOT_PROD"});
 
 			StringBuffer sb = null;
 
@@ -286,7 +286,7 @@ public final class Categorie extends HttpServlet
 					param.setInt("par_ino_cat", table.getInt(i, "INO_CAT"));
 
 					// productions dans la catégorie
-					prods.execute("SELECT p.CTITRE_PROD, p.CAUTEUR_PROD, p.CGROUP_PROD, p.CPLATEFORME_PROD, p.CCOMMENTAIRE_PROD, p.CINFOPRIVEE_PROD, s.IORD_SHOW, p.INO_PROD, p.BSNAPSHOT_PROD FROM VOTE.PRESENTATIONS s INNER JOIN VOTE.PRODUCTIONS p ON s.INO_PROD = p.INO_PROD WHERE s.INO_CAT = :par_ino_cat AND p.LACT_PROD = 1 ORDER BY s.IORD_SHOW ", param, debug);
+					prods.execute("SELECT p.CTITRE_PROD, p.CAUTEUR_PROD, p.CGROUP_PROD, p.CPLATEFORME_PROD, p.CCOMMENTAIRE_PROD, p.CINFOPRIVEE_PROD, s.IORD_SHOW, p.INO_PROD, p.ISNAPSHOT_PROD, p.BSNAPSHOT_PROD FROM VOTE.PRESENTATIONS s INNER JOIN VOTE.PRODUCTIONS p ON s.INO_PROD = p.INO_PROD WHERE s.INO_CAT = :par_ino_cat AND p.LACT_PROD = 1 ORDER BY s.IORD_SHOW ", param, debug);
 
 					sb = new StringBuffer();
 					if (abandon == 0)
@@ -327,17 +327,20 @@ public final class Categorie extends HttpServlet
 							for (int j = 0; j < prods.getNombreLignes(); j++)
 							{
 								image = null;
-								try 
+								if (prods.getInt(j, 8) == 0)
 								{
-									ImageDecoder dec = ImageCodec.createImageDecoder("jpeg", new ByteArraySeekableStream(prods.getBinaire(j, 7)), new JPEGDecodeParam());
+									try 
+									{
+										ImageDecoder dec = ImageCodec.createImageDecoder("jpeg", new ByteArraySeekableStream(prods.getBinaire(j, 7)), new JPEGDecodeParam());
 
-									RenderedImage ri = dec.decodeAsRenderedImage(); 
-									Raster ra = ri.getData();
-									BufferedImage bi = new BufferedImage(ri.getColorModel(), Raster.createWritableRaster(ri.getSampleModel(), ra.getDataBuffer(), null), false, new Hashtable<String, String>());
+										RenderedImage ri = dec.decodeAsRenderedImage(); 
+										Raster ra = ri.getData();
+										BufferedImage bi = new BufferedImage(ri.getColorModel(), Raster.createWritableRaster(ri.getSampleModel(), ra.getDataBuffer(), null), false, new Hashtable<String, String>());
 
-									image = "<img src=\"data:image/jpg;base64," + new String(Base64.encode(prods.getBinaire(j, 7))) + "\" width=\"" + (int)(bi.getWidth() / 4) + "\" height=\"" + (int)(bi.getHeight() / 4) + "\">";   
+										image = "<img src=\"data:image/jpg;base64," + new String(Base64.encode(prods.getBinaire(j, 7))) + "\" width=\"" + (int)(bi.getWidth() / 4) + "\" height=\"" + (int)(bi.getHeight() / 4) + "\" border=\"0\">";   
+									}
+									catch (Exception e) { image = null; debug.affiche(numeroParticipant, "impossible de traiter la vignette jpg, " + e.toString()); }
 								}
-								catch (Exception e) { image = null; debug.affiche(numeroParticipant, "impossible de traiter la vignette jpg, " + e.toString()); }
 							
 								sb.append("<td style=\"vertical-align:top;\"><table style=\"max-width:256px;overflow-x:hidden;\">");
 								sb.append("<tr><td class=\"petit_texte petit_cadre_production\"><nobr>");

File diff suppressed because it is too large
+ 1 - 1
src/fr/triplea/vote/servlet/Menu.java


File diff suppressed because it is too large
+ 236 - 153
src/fr/triplea/vote/servlet/Production.java


+ 16 - 30
src/fr/triplea/vote/servlet/Vote.java

@@ -21,7 +21,6 @@ import com.sun.media.jai.codec.ByteArraySeekableStream;
 import com.sun.media.jai.codec.ImageCodec;
 import com.sun.media.jai.codec.ImageDecoder;
 import com.sun.media.jai.codec.JPEGDecodeParam;
-import com.sun.media.jai.codec.PNGDecodeParam;
 
 import fr.triplea.vote.Cledar;
 import fr.triplea.vote.Commun;
@@ -377,10 +376,10 @@ public final class Vote extends HttpServlet
 		}
 
 		SqlTAB prods = new SqlTAB(pool, numeroParticipant);
-		prods.setColonnesVoulues(new String[]{"INO_PROD", "CTYPE_PROD", "CTITRE_PROD", "CAUTEUR_PROD", "CGROUP_PROD", "CPLATEFORME_PROD", "CCOMMENTAIRE_PROD", "BSNAPSHOT_PROD"});
+		prods.setColonnesVoulues(new String[]{"INO_PROD", "CTYPE_PROD", "CTITRE_PROD", "CAUTEUR_PROD", "CGROUP_PROD", "CPLATEFORME_PROD", "CCOMMENTAIRE_PROD", "BSNAPSHOT_PROD", "ISNAPSHOT_PROD"});
 
 		// productions présentées dans la catégorie
-		abandon = prods.execute("SELECT p.INO_PROD, p.CTYPE_PROD, p.CTITRE_PROD, p.CAUTEUR_PROD, p.CGROUP_PROD, p.CPLATEFORME_PROD, p.CCOMMENTAIRE_PROD, p.BSNAPSHOT_PROD, s.IORD_SHOW FROM VOTE.PRESENTATIONS s INNER JOIN VOTE.PRODUCTIONS p ON s.INO_PROD = p.INO_PROD WHERE s.INO_CAT = :par_ino_cat AND p.LACT_PROD = 1 ORDER BY s.IORD_SHOW ", param, debug);
+		abandon = prods.execute("SELECT p.INO_PROD, p.CTYPE_PROD, p.CTITRE_PROD, p.CAUTEUR_PROD, p.CGROUP_PROD, p.CPLATEFORME_PROD, p.CCOMMENTAIRE_PROD, p.ISNAPSHOT_PROD, p.BSNAPSHOT_PROD, s.IORD_SHOW FROM VOTE.PRESENTATIONS s INNER JOIN VOTE.PRODUCTIONS p ON s.INO_PROD = p.INO_PROD WHERE s.INO_CAT = :par_ino_cat AND p.LACT_PROD = 1 ORDER BY s.IORD_SHOW ", param, debug);
 
 		if (abandon != 0) { afficheErreur(request, response, numeroParticipant, contexte.trim(), commun.MSG_get(abandon)); return; }
 
@@ -388,45 +387,34 @@ public final class Vote extends HttpServlet
 		{
 			bean.setNombre(prods.getNombreLignes());
 
-			String visuel = "";
-			int w = 0;
-			int h = 0;
-
-			// TODO : proposer des échantillons sonores de quelques secondes pour les musiques, à l'instar des visuels graphiques pour les images/vidéos/démos
+			String apercu = "";
 			
 			for (int i = 0; i < prods.getNombreLignes(); i++)
 			{
-				visuel = "";
-				w = 0;
-				h = 0;
+				apercu = "";
 
 				if (prods.getBinaire(i, 7).length > 0)
 				{
-					try {
-						ImageDecoder dec = ImageCodec.createImageDecoder("jpeg", new ByteArraySeekableStream(prods.getBinaire(i, 7)), new JPEGDecodeParam());
-
-						RenderedImage ri = dec.decodeAsRenderedImage(); 
-						Raster ra = ri.getData();
-						BufferedImage bi = new BufferedImage(ri.getColorModel(), Raster.createWritableRaster(ri.getSampleModel(), ra.getDataBuffer(), null), false, new Hashtable<String, String>());
-
-						visuel = new String(Base64.encode(prods.getBinaire(i, 7)));
-						w = bi.getWidth() / 3;
-						h = bi.getHeight() / 3;            
+					if (prods.getInt(i, 8) == 1)
+					{
+						try 
+						{
+							apercu = "<audio controls style=\"width: 200px;\"><source type=\"audio/wav\" src=\"data:audio/wav;base64," + new String(Base64.encode(prods.getBinaire(i, 7))) + "\"></audio>";      
+						}
+						catch (Exception e) { debug.affiche(numeroParticipant, "impossible de traiter l'aperçu sonore wav, " + e.toString()); }
 					}
-					catch (Exception e) 
+					else
 					{
 						try {
-							ImageDecoder dec = ImageCodec.createImageDecoder("png", new ByteArraySeekableStream(prods.getBinaire(i, 7)), new PNGDecodeParam());
+							ImageDecoder dec = ImageCodec.createImageDecoder("jpeg", new ByteArraySeekableStream(prods.getBinaire(i, 7)), new JPEGDecodeParam());
 
 							RenderedImage ri = dec.decodeAsRenderedImage(); 
 							Raster ra = ri.getData();
 							BufferedImage bi = new BufferedImage(ri.getColorModel(), Raster.createWritableRaster(ri.getSampleModel(), ra.getDataBuffer(), null), false, new Hashtable<String, String>());
 
-							visuel = new String(Base64.encode(prods.getBinaire(i, 7)));
-							w = bi.getWidth() / 3;
-							h = bi.getHeight() / 3;            
+							apercu = "<img src=\"data:image/jpg;base64," + new String(Base64.encode(prods.getBinaire(i, 7))) + "\" width=\"" + (int)(bi.getWidth() / 3) + "\" height=\"" + (int)(bi.getHeight() / 3) + "\" border=\"0\">";   
 						}
-						catch (Exception ee)  { }
+						catch (Exception e) { debug.affiche(numeroParticipant, "impossible de traiter l'aperçu en image jpg, " + e.toString()); }
 					}
 				}
 
@@ -440,9 +428,7 @@ public final class Vote extends HttpServlet
 						prods.getString(i, 4), 
 						prods.getString(i, 5), 
 						prods.getString(i, 6), 
-						visuel, 
-						w, 
-						h);
+						apercu);
 			}
 		}
 

File diff suppressed because it is too large
+ 1 - 1
src/fr/triplea/vote/util/MemoireFichier.java