eadba064b9f4dd1357246422d517c158627db054
[mw_sourceml] / app / controllers / sources / waveforms.php
1 <?php
2
3   class mw_sources_waveforms extends mw_controller{
4
5   /*
6   
7     des actions disponibles en ligne de commande pour génerer des waveforms
8     si sox est executable sur le systeme via php
9   
10     ### action make
11     ---------------
12   
13     php cli.php sources/waveforms/make from=http://domaine.archive.tld archive_root=/fs/path/to/archive/ id=<id_source>
14   
15   
16     genere la waveforme de la source d'id <id_source>
17   
18     options :
19   
20       waveform_fg=RRVVBB couleur (notation hexa sans #) de la waveforme
21   
22       waveform_bg=RRVVBB couleur (notation hexa sans #) du fond (par defaut transparent)
23   
24   
25     ### action make_all
26     -------------------
27   
28     php cli.php sources/waveforms/make_all from=http://domaine.archive.tld archive_root=/fs/path/to/archive/
29
30
31     genere toutes les waveformes
32   
33     options :
34   
35       update=1 force la generation même si une image existe deja
36   
37       waveform_fg=RRVVBB couleur (notation hexa sans #) de la waveforme
38   
39       waveform_bg=RRVVBB couleur (notation hexa sans #) du fond (par defaut transparent)
40   
41   */
42
43     function validate(){
44       if(PHP_SAPI != "cli"){
45         return "utilisation en ligne de commande uniquement";
46       }
47       return true;
48     }
49
50     function make(){
51       $env = $this->env();
52       $data = $env->data();
53       $id_source = $_GET[$env->param("id")];
54       $base_url = $_GET[$env->param("from")];
55       $document_root = $_GET[$env->param("archive_root")];
56       $foreground = isset($_GET[$env->param("waveform_fg")]) ? $_GET[$env->param("waveform_fg")] : "383838";
57       $background = isset($_GET[$env->param("waveform_bg")]) ? $_GET[$env->param("waveform_bg")] : null;
58       if(!$data->init_waveform_dirs()){
59         debug("impossible de creer les dossiers pour les waveforms");
60         exit;
61       }
62       if(($source = $data->source($id_source, true)) === false){
63         debug("impossible de lire les informations de la source");
64         exit;
65       }
66       $audio_files = array();
67       $no_files = array();
68       if(isset($source["documents"])){
69         $documents = array(
70           "flac" => false,
71           "wav" => false,
72           "ogg" => false,
73           "mp3" => false
74         );
75         foreach($source["documents"] as $document){
76           $file_name = false;
77           if(substr(urldecode($document["url"]), 0, strlen($base_url)) == $base_url){
78             $file_name = $document_root.substr(urldecode($document["url"]), strlen($base_url));
79             if(!file_exists($file_name)){
80               $file_name = false;
81             }
82           }
83           if($file_name){
84             if(strtolower(substr($document["url"], -5)) === ".flac"){
85               $documents["flac"] = $file_name;
86             }
87             if(strtolower(substr($document["url"], -4)) === ".wav"){
88               $documents["wav"] = $file_name;
89             }
90             if(strtolower(substr($document["url"], -4)) === ".ogg"){
91               $documents["ogg"] = $file_name;
92             }
93             if(strtolower(substr($document["url"], -4)) === ".mp3"){
94               $documents["mp3"] = $file_name;
95             }
96           }
97         }
98         if($documents["flac"]) $audio_files[$source["id"]] = $documents["flac"];
99         elseif($documents["wav"]) $audio_files[$source["id"]] = $documents["wav"];
100         elseif($documents["ogg"]) $audio_files[$source["id"]] = $documents["ogg"];
101         elseif($documents["mp3"]) $audio_files[$source["id"]] = $documents["mp3"];
102         else $no_files[$source["id"]] = $source["titre"];
103       }
104       foreach($audio_files as $id_source => $audio_file){
105         if(
106           !$data->audio_to_png(
107             array(
108               "audio_file" => $audio_file,
109               "png_file" => $env->path("content")."waveforms/".$id_source.".png",
110               "foreground" => "#".$foreground,
111               "background" => $background ? "#".$background : ""
112             )
113           )
114         ){
115           if(!$data->sox_exists()){
116             debug("impossible d'executer la commande sox sur le systeme");
117           }
118           else{
119             debug("impossible de generer le png pour la source id ".$id_source);
120           }
121         }
122       }
123     }
124
125     function make_all(){
126       $env = $this->env();
127       $data = $env->data();
128       $base_url = $_GET[$env->param("from")];
129       $document_root = $_GET[$env->param("archive_root")];
130       $UPDATE = isset($_GET[$env->param("update")]) ? $_GET[$env->param("update")] : false;
131       $foreground = isset($_GET[$env->param("waveform_fg")]) ? $_GET[$env->param("waveform_fg")] : "383838";
132       $background = isset($_GET[$env->param("waveform_bg")]) ? $_GET[$env->param("waveform_bg")] : null;
133       if(!$data->init_waveform_dirs()){
134         debug("impossible de creer les dossiers pour les waveforms");
135         exit;
136       }
137       $sources = $data->sources(array());
138       $audio_files = array();
139       $no_files = array();
140       foreach($sources["list"] as $source){
141         $png_file = $env->path("content")."waveforms/".$source["id"].".png";
142         if(file_exists($png_file) && !$UPDATE) continue;
143         if(isset($source["documents"])){
144           $documents = array(
145             "flac" => false,
146             "wav" => false,
147             "ogg" => false,
148             "mp3" => false
149           );
150           foreach($source["documents"] as $document){
151             $file_name = false;
152             if(substr(urldecode($document["url"]), 0, strlen($base_url)) == $base_url){
153               $file_name = $document_root.substr(urldecode($document["url"]), strlen($base_url));
154               if(!file_exists($file_name)){
155                 $file_name = false;
156               }
157             }
158             if($file_name){
159               if(strtolower(substr($document["url"], -5)) === ".flac"){
160                 $documents["flac"] = $file_name;
161               }
162               if(strtolower(substr($document["url"], -4)) === ".wav"){
163                 $documents["wav"] = $file_name;
164               }
165               if(strtolower(substr($document["url"], -4)) === ".ogg"){
166                 $documents["ogg"] = $file_name;
167               }
168               if(strtolower(substr($document["url"], -4)) === ".mp3"){
169                 $documents["mp3"] = $file_name;
170               }
171             }
172           }
173           if($documents["flac"]) $audio_files[$source["id"]] = $documents["flac"];
174           elseif($documents["wav"]) $audio_files[$source["id"]] = $documents["wav"];
175           elseif($documents["ogg"]) $audio_files[$source["id"]] = $documents["ogg"];
176           elseif($documents["mp3"]) $audio_files[$source["id"]] = $documents["mp3"];
177           else $no_files[$source["id"]] = $source["titre"];
178         }
179       }
180       foreach($audio_files as $id_source => $audio_file){
181         if(
182           !$data->audio_to_png(
183             array(
184               "audio_file" => $audio_file,
185               "png_file" => $env->path("content")."waveforms/".$id_source.".png",
186               "foreground" => "#".$foreground,
187               "background" => $background ? "#".$background : ""
188             )
189           )
190         ){
191           if(!$data->sox_exists()){
192             debug("impossible d'executer la commande sox sur le systeme");
193           }
194           else{
195             debug("impossible de generer le png pour la source id ".$id_source);
196           }
197         }
198       }
199     }
200
201   }
202
203 ?>