PHP分析.wav文件并绘制png格式的波形图
用Php分析并绘制音频文件的波形图,网上还是很少见到。其实只要根据wav文件的规范,用Php的fseek,fopen,fopen,pack/unpack等函数,以及强大的gd图形库,这些都是很容易的。很多人可能对pack/unpack函数不熟悉;这其实是Php借用perl的,他们提供了使用脚本语言访问复杂二进制数据结构的方法。我的这段简化的程序只能处理PCM格式的RIFF音频文件(这也是最常见的wav格式) ,不限声道,但是比特率(BitsPerSample)最好是16。
这里有wave file format 和 MicroSoft wave soundfile format可以参考。这里是一个实际的例子(下载放大看)
1 2
3 function wav_graph($file, $f=0, $w=0)
4 {
5 global $DATA_DIR;
6
7 if(!is_file($file)) return 0;
8 $fp = fopen($DATA_DIR.$file, 'r');
9 $raw = fread($fp, 36);
10 $str = '';
11 $header = unpack('A4Riff/VSize/A4Wav/A4Head/VHeadSize/vPCM/vChannels/VSampleRate/VByteRate/vBlockAlign/vSampleBits', $raw);
12 foreach($header as $k=>$v)
13 $str .= $k.': '. $v.' ';
14 fseek($fp, 36 + $header['HeadSize'] - 16);
15 $raw = fread($fp, 8);
16 $data = unpack('A4Data/VDataSize', $raw);
17 foreach($data as $k=>$v)
18 $str .= $k.': '. $v.' ';
19
20 $b = $header['SampleBits'];
21 $c = $header['Channels'];
22 $l = $b * $c / 8; // sample frame length in bytes
23 $s = $data['DataSize'] / $l; // total number of samples
24 $r = $header['SampleRate'];
25 if($f) $h = pow(2, $b) / $f;
26 else { $h = 200; $f = pow(2, $b - 1) / $h; }
27 if($w == 0) $w = round($r / 1000); // default to show 1k sample frames per minute
28
29 header("Content-type: image/png");
30 $im = imagecreate($s / $w, $h * $c * 2);
31 imagecolorallocate($im, 0xff, 0xff, 0xff); // white bg
32 $color = imagecolorallocate($im, 0, 0, 255); // black
33 //imagestring($im, 5, 5, 5, $str, $color);
34
35 $x=0; $y = array(); $yn = array();
36 for($i = 0; $i
37 $n = $l * $w;
38 while(1)
39 {
40 if($s == 0) break;
41 if($s
42 $samples = fread($fp, 1000 * $n);
43 if($samples === FALSE) break;
44 $packed = unpack("s*", $samples);
45 foreach($packed as $k=>$v)
46 {
47 $cnt = ($k-1) % ($w * $l) ;
48 if( $cnt > $c - 1) continue;
49 $yn[$cnt] = $h * $cnt + $h - $v / $f;
50 imageline($im, $x, $y[$cnt], $x+1, $yn[$cnt], $color);
51 $y[$cnt] = $yn[$cnt];
52 $x++;
53 }
54 $s -= $n;
55 }
56
57 imagepng($im);
58 imagedestroy($im);
59 }
60
61 //wav_graph('audio2.wav');
62 ?>

Outils d'IA chauds

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

Video Face Swap
Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Sujets chauds

[SpringBoot] Passage des paramètres dans l'en-tête via les appels Feign Comment transmettre les paramètres de l'en-tête via Feign Description du problème Lorsque nous utilisons Feign pour demander l'interface API d'un autre service dans Spring Cloud, il est nécessaire de transmettre les paramètres dans l'en-tête. un traitement spécial est effectué, les paramètres de l'en-tête seront perdus. Solution 1 : transmettez-le via @RequestHeader(name="headerName") Par exemple : Feign est défini comme suit @FeignClient(name="service-name")pub.

L'en-tête de Linux fait référence au début d'un fichier ou d'un flux de données, qui est utilisé pour contenir des métadonnées sur le contenu. En écrivant et en utilisant correctement le fichier d'en-tête, les développeurs peuvent mieux utiliser les ressources du système et améliorer la lisibilité et la lisibilité du code. Maintenabilité.

Comment implémenter le saut dans l'en-tête php : 1. Utilisez la syntaxe "Header("Location:$url");" pour implémenter le saut ; 2. Utilisez le jugement if pour implémenter le saut, avec des instructions de saut telles que "if($_COOKIE[" u_type "]){ header('location:register.php'); } else{ setcookie('u_type','1','86400*360');".

PHP est un langage de programmation puissant qui peut être utilisé pour créer des sites Web et des applications Web dynamiques. L’une des fonctionnalités les plus puissantes est la méthode header() de PHP. Dans cet article, nous explorerons comment utiliser la méthode header() de PHP pour ajuster les pages Web.

Différences : 1. La balise head est utilisée pour définir l'en-tête du document, qui est un conteneur pour tous les éléments head, et la balise header est utilisée pour définir l'en-tête (informations d'introduction) du document 2. Tous les navigateurs prennent en charge le ; balise head et anciennes versions des navigateurs Aucun des navigateurs ne prend en charge la balise d'en-tête et les navigateurs tels que IE9+ et versions ultérieures doivent prendre en charge la balise d'en-tête.

Liste complète des fonctions de téléchargement de fichiers PHP : exemple de téléchargement de fichiers, analyse du fichier de lecture, de l'en-tête, de la disposition du contenu et d'autres fonctions. Le téléchargement de fichiers est l'une des fonctions essentielles des applications Web, et PHP, en tant que langage de développement Web largement utilisé, en fournit de nombreuses. fonction et procédé pour mettre en œuvre le téléchargement de fichiers. Cet article présentera les fonctions de téléchargement de fichiers couramment utilisées en PHP, notamment readfile, header, Content-Dispo.

Nginx peut distribuer des requêtes à différents serveurs en fonction d'identifiants personnalisés dans les en-têtes de requête. Plus précisément, vous pouvez utiliser la directive map pour mapper l'identifiant personnalisé dans l'en-tête de la demande à une adresse de serveur back-end différente, puis utiliser la directive proxy_pass pour transmettre la demande au serveur back-end correspondant. Voici un exemple de fichier de configuration : http{map$http_my_header$backend{defaultbackend1.example.com;value1backend2.example.com;value2backend3.example.com;}upstreambackend1{serv

Le dossier de données contient des données du système et du programme, telles que les paramètres logiciels et les packages d'installation. Chaque dossier du dossier Données représente un type différent de dossier de stockage de données, que le fichier de données fasse référence au nom de fichier Données ou à l'extension Données nommées. , ce sont tous des fichiers de données personnalisés par le système ou le programme. Les données sont un fichier de sauvegarde pour le stockage des données. Généralement, elles peuvent être ouvertes avec meidaplayer, le bloc-notes ou Word.
