source: spip-zone/_plugins_/getID3/trunk/inc/recuperer_id3.php

Last change on this file was 98050, checked in by kent1@…, 3 years ago

broutilles et petits bugs

File size: 4.6 KB
Line 
1<?php
2/**
3 * GetID3
4 * Gestion des métadonnées de fichiers sonores directement dans SPIP
5 *
6 * Auteurs :
7 * kent1 (http://www.kent1.info - kent1@arscenic.info), BoOz
8 * 2008-2013 - Distribué sous licence GNU/GPL
9 *
10 */
11
12if (!defined('_ECRIRE_INC_VERSION')) {
13        return;
14}
15
16/**
17 * Récupère le contenu des tags id3 et des données audio d'un fichier
18 *
19 * Dans le cas où le fichier contient un ou plusieurs logo,
20 * ces fichiers sont écris dans le répertoire tmp/
21 *
22 * @param string $fichier
23 *              Le chemin vers le fichier à analyser
24 * @param string $info
25 *              Une info spécifique à retourner sinon, on retourne le tableau complet
26 * @return array $infos
27 *              Le contenu complet des tags id3 et des données audio ou seulement l'info demandée
28 */
29function inc_recuperer_id3_dist($fichier, $info = null) {
30        include_spip('getid3/getid3');
31        $getID3 = new getID3;
32        $getID3->setOption(array('tempdir' => _DIR_TMP));
33
34        // Scan file - should parse correctly if file is not corrupted
35        $file_info = $getID3->analyze($fichier);
36        getid3_lib::CopyTagsToComments($file_info);
37        if (sizeof($file_info) > 0) {
38                $id3 = array();
39                // Cover art?
40                if (isset($file_info['id3v2']['APIC'])) {
41                        foreach ($file_info['id3v2']['APIC'] as $cle => $val) {
42                                if (isset($file_info['id3v2']['APIC'][$cle]['data'])
43                                        && isset($file_info['id3v2']['APIC'][$cle]['image_mime'])
44                                        && isset($file_info['id3v2']['APIC'][$cle]['dataoffset'])) {
45                                        $imageinfo = array();
46                                        $imagechunkcheck = getid3_lib::GetDataImageSize($file_info['id3v2']['APIC'][$cle]['data'], $imageinfo);
47                                        $extension = getid3_lib::ImageTypesLookup($imagechunkcheck[2]);
48                                        if ($extension == 'jpeg') {
49                                                $extension = 'jpg';
50                                        }
51                                        $tmp_file = 'getid3-'.$file_info['id3v2']['APIC'][$cle]['dataoffset'].'.'.$extension;
52                                        $dest = sous_repertoire(_DIR_VAR, 'cache-getid3');
53                                        $dest = $dest.$tmp_file;
54                                        if (ecrire_fichier($dest, $file_info['id3v2']['APIC'][$cle]['data'])) {
55                                                $id3['cover'.$cle] = $dest;
56                                        }
57                                }
58                        }
59                }
60                if (isset($file_info['flac']['APIC'])) {
61                        if (isset($file_info['flac']['APIC']['data']) && isset($file_info['flac']['APIC']['image_mime'])) {
62                                $extension = strtolower($file_info['flac']['APIC']['extension']);
63                                if ($extension == 'jpeg') {
64                                        $extension = 'jpg';
65                                }
66                                $tmp_file = 'getid3-'.md5($file_info['filename'].$file_info['filesize']).'.'.$extension;
67                                $dest = sous_repertoire(_DIR_VAR, 'cache-getid3');
68                                $dest = $dest.$tmp_file;
69                                if (ecrire_fichier($dest, $file_info['flac']['APIC']['data'])) {
70                                        $id3['cover'.$cle] = $dest;
71                                }
72                        }
73                }
74
75                /**
76                 * On passe tous les comments en info
77                 */
78                if (isset($file_info['comments_html'])) {
79                        foreach ($file_info['comments_html'] as $cle => $val) {
80                                $id3[$cle] = array_pop($val);
81                        }
82                }
83                if (isset($file_info['tags_html'])) {
84                        foreach ($file_info['tags_html'] as $cle => $val) {
85                                $id3[$cle] = array_pop($val);
86                        }
87                }
88                /**
89                 * Les pistes vidéos
90                 */
91                if (isset($file_info['video'])) {
92                        $id3['hasvideo'] = 'oui';
93                        $id3['largeur'] = isset($file_info['video']['resolution_x']) ?$file_info['video']['resolution_x'] : false;
94                        $id3['hauteur'] = isset($file_info['video']['resolution_y']) ?$file_info['video']['resolution_y'] : false;
95                        $id3['framerate'] = isset($file_info['video']['frame_rate']) ?$file_info['video']['frame_rate'] : false;
96                }
97
98                /**
99                 * Les pistes audio
100                 */
101                if (isset($file_info['audio'])) {
102                        $id3['hasaudio'] = 'oui';
103                        $id3['format'] = $file_info['audio']['dataformat'];
104                        $id3['audiosamplerate'] = $file_info['audio']['sample_rate'] ;
105                        $id3['bits'] = $file_info['audio']['bits_per_sample'];
106                        $id3['audiocodec'] = ($file_info['audio']['encoder']) ? $file_info['audio']['encoder'] : $file_info['audio']['codec'];
107                        $id3['bitrate_mode'] = $file_info['audio']['bitrate_mode'];
108                        $id3['audiochannels'] = $file_info['audio']['channels'];
109                        $id3['channel_mode'] = $file_info['audio']['channelmode'];
110                }
111
112                /**
113                 * Cas des flac et ogg (certainement)
114                 */
115                if (isset($id3['date']) && !isset($id3['year'])) {
116                        $id3['year'] = $id3['date'];
117                }
118
119                if (is_array($file_info['tags']['id3v2']['track'])) {
120                        $id3['track'] = array_pop($file_info['tags']['id3v2']['track']);
121                }
122
123                if (is_array($file_info['tags']['id3v2']['totaltracks'])) {
124                        $id3['totaltracks'] = array_pop($file_info['tags']['id3v2']['totaltracks']);
125                }
126
127                $id3['bitrate'] = isset($file_info['bitrate']) ? floor($file_info['bitrate']) : floor($file_info['audio']['bitrate']);
128                $id3['duree_secondes'] = $file_info['playtime_string'];
129                $id3['duree'] = $file_info['playtime_seconds'];
130                $id3['mime'] = $file_info['mime_type'];
131        }
132
133        if (!$info) {
134                return $id3;
135        }
136
137        return $id3[$info];
138}
Note: See TracBrowser for help on using the repository browser.