--- /dev/null
+<?php
+
+ class mw_sources_waveforms extends mw_controller{
+
+ /*
+
+ des actions disponibles en ligne de commande pour génerer des waveforms
+ si sox est executable sur le systeme via php
+
+ ### action make
+ ---------------
+
+ php cli.php sources/waveforms/make from=http://domaine.archive.tld archive_root=/fs/path/to/archive/ id=<id_source>
+
+
+ genere la waveforme de la source d'id <id_source>
+
+ options :
+
+ waveform_fg=RRVVBB couleur (notation hexa sans #) de la waveforme
+
+ waveform_bg=RRVVBB couleur (notation hexa sans #) du fond (par defaut transparent)
+
+
+ ### action make_all
+ -------------------
+
+ php cli.php sources/waveforms/make_all from=http://domaine.archive.tld archive_root=/fs/path/to/archive/
+
+
+ genere toutes les waveformes
+
+ options :
+
+ update=1 force la generation même si une image existe deja
+
+ waveform_fg=RRVVBB couleur (notation hexa sans #) de la waveforme
+
+ waveform_bg=RRVVBB couleur (notation hexa sans #) du fond (par defaut transparent)
+
+ */
+
+ function validate(){
+ if(PHP_SAPI != "cli"){
+ return "utilisation en ligne de commande uniquement";
+ }
+ return true;
+ }
+
+ function make(){
+ $env = $this->env();
+ $data = $env->data();
+ $id_source = $_GET[$env->param("id")];
+ $base_url = $_GET[$env->param("from")];
+ $document_root = $_GET[$env->param("archive_root")];
+ $foreground = isset($_GET[$env->param("waveform_fg")]) ? $_GET[$env->param("waveform_fg")] : "383838";
+ $background = isset($_GET[$env->param("waveform_bg")]) ? $_GET[$env->param("waveform_bg")] : null;
+ if(!$data->init_waveform_dirs()){
+ debug("impossible de creer les dossiers pour les waveforms");
+ exit;
+ }
+ if(($source = $data->source($id_source, true)) === false){
+ debug("impossible de lire les informations de la source");
+ exit;
+ }
+ $audio_files = array();
+ $no_files = array();
+ if(isset($source["documents"])){
+ $documents = array(
+ "flac" => false,
+ "wav" => false,
+ "ogg" => false,
+ "mp3" => false
+ );
+ foreach($source["documents"] as $document){
+ $file_name = false;
+ if(substr(urldecode($document["url"]), 0, strlen($base_url)) == $base_url){
+ $file_name = $document_root.substr(urldecode($document["url"]), strlen($base_url));
+ if(!file_exists($file_name)){
+ $file_name = false;
+ }
+ }
+ if($file_name){
+ if(strtolower(substr($document["url"], -5)) === ".flac"){
+ $documents["flac"] = $file_name;
+ }
+ if(strtolower(substr($document["url"], -4)) === ".wav"){
+ $documents["wav"] = $file_name;
+ }
+ if(strtolower(substr($document["url"], -4)) === ".ogg"){
+ $documents["ogg"] = $file_name;
+ }
+ if(strtolower(substr($document["url"], -4)) === ".mp3"){
+ $documents["mp3"] = $file_name;
+ }
+ }
+ }
+ if($documents["flac"]) $audio_files[$source["id"]] = $documents["flac"];
+ elseif($documents["wav"]) $audio_files[$source["id"]] = $documents["wav"];
+ elseif($documents["ogg"]) $audio_files[$source["id"]] = $documents["ogg"];
+ elseif($documents["mp3"]) $audio_files[$source["id"]] = $documents["mp3"];
+ else $no_files[$source["id"]] = $source["titre"];
+ }
+ foreach($audio_files as $id_source => $audio_file){
+ if(
+ !$data->audio_to_png(
+ array(
+ "audio_file" => $audio_file,
+ "png_file" => $env->path("content")."waveforms/".$id_source.".png",
+ "foreground" => "#".$foreground,
+ "background" => $background ? "#".$background : ""
+ )
+ )
+ ){
+ if(!$data->sox_exists()){
+ debug("impossible d'executer la commande sox sur le systeme");
+ }
+ else{
+ debug("impossible de generer le png pour la source id ".$id_source);
+ }
+ }
+ }
+ }
+
+ function make_all(){
+ $env = $this->env();
+ $data = $env->data();
+ $base_url = $_GET[$env->param("from")];
+ $document_root = $_GET[$env->param("archive_root")];
+ $UPDATE = isset($_GET[$env->param("update")]) ? $_GET[$env->param("update")] : false;
+ $foreground = isset($_GET[$env->param("waveform_fg")]) ? $_GET[$env->param("waveform_fg")] : "383838";
+ $background = isset($_GET[$env->param("waveform_bg")]) ? $_GET[$env->param("waveform_bg")] : null;
+ if(!$data->init_waveform_dirs()){
+ debug("impossible de creer les dossiers pour les waveforms");
+ exit;
+ }
+ $sources = $data->sources(array());
+ $audio_files = array();
+ $no_files = array();
+ foreach($sources["list"] as $source){
+ $png_file = $env->path("content")."waveforms/".$source["id"].".png";
+ if(file_exists($png_file) && !$UPDATE) continue;
+ if(isset($source["documents"])){
+ $documents = array(
+ "flac" => false,
+ "wav" => false,
+ "ogg" => false,
+ "mp3" => false
+ );
+ foreach($source["documents"] as $document){
+ $file_name = false;
+ if(substr(urldecode($document["url"]), 0, strlen($base_url)) == $base_url){
+ $file_name = $document_root.substr(urldecode($document["url"]), strlen($base_url));
+ if(!file_exists($file_name)){
+ $file_name = false;
+ }
+ }
+ if($file_name){
+ if(strtolower(substr($document["url"], -5)) === ".flac"){
+ $documents["flac"] = $file_name;
+ }
+ if(strtolower(substr($document["url"], -4)) === ".wav"){
+ $documents["wav"] = $file_name;
+ }
+ if(strtolower(substr($document["url"], -4)) === ".ogg"){
+ $documents["ogg"] = $file_name;
+ }
+ if(strtolower(substr($document["url"], -4)) === ".mp3"){
+ $documents["mp3"] = $file_name;
+ }
+ }
+ }
+ if($documents["flac"]) $audio_files[$source["id"]] = $documents["flac"];
+ elseif($documents["wav"]) $audio_files[$source["id"]] = $documents["wav"];
+ elseif($documents["ogg"]) $audio_files[$source["id"]] = $documents["ogg"];
+ elseif($documents["mp3"]) $audio_files[$source["id"]] = $documents["mp3"];
+ else $no_files[$source["id"]] = $source["titre"];
+ }
+ }
+ foreach($audio_files as $id_source => $audio_file){
+ if(
+ !$data->audio_to_png(
+ array(
+ "audio_file" => $audio_file,
+ "png_file" => $env->path("content")."waveforms/".$id_source.".png",
+ "foreground" => "#".$foreground,
+ "background" => $background ? "#".$background : ""
+ )
+ )
+ ){
+ if(!$data->sox_exists()){
+ debug("impossible d'executer la commande sox sur le systeme");
+ }
+ else{
+ debug("impossible de generer le png pour la source id ".$id_source);
+ }
+ }
+ }
+ }
+
+ }
+
+?>
\ No newline at end of file