Heim php教程 php手册 PHP分析.wav文件并绘制png格式的波形图

PHP分析.wav文件并绘制png格式的波形图

Jun 21, 2016 am 09:01 AM
data header

  用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 ?>



Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

Video Face Swap

Video Face Swap

Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Wie übergibt SpringBoot Parameter im Header durch Feign-Aufrufe? Wie übergibt SpringBoot Parameter im Header durch Feign-Aufrufe? May 16, 2023 pm 08:38 PM

[SpringBoot] Übergeben von Parametern im Header durch Feign-Aufrufe So übergeben Sie Header-Parameter durch Feign Problembeschreibung Wenn wir Feign verwenden, um die API-Schnittstelle eines anderen Dienstes in Spring Cloud anzufordern, müssen die Parameter im Header übergeben werden. Wenn nein Wenn eine spezielle Verarbeitung durchgeführt wird, gehen die Parameter im Header verloren. Lösung 1: Übergeben Sie es über @RequestHeader(name="headerName"). Beispiel: Feign ist wie folgt definiert: @FeignClient(name="service-name")pub

Was bedeutet Linux-Header? Was bedeutet Linux-Header? Jul 18, 2023 pm 03:34 PM

Der Header von Linux bezieht sich auf den Anfang einer Datei oder eines Datenstroms, der Metadaten über den Inhalt enthält. Durch korrektes Schreiben und Verwenden der Header-Datei können Entwickler Systemressourcen besser nutzen und die Lesbarkeit und Lesbarkeit des Codes verbessern. Wartbarkeit.

So springen Sie in den PHP-Header So springen Sie in den PHP-Header Dec 02, 2022 am 09:14 AM

So implementieren Sie einen Sprung im PHP-Header: 1. Verwenden Sie die Syntax „Header(“Location:$url“);“ "]){ header('location:register.php'); } else{ setcookie('u_type','1','86400*360');".

So verwenden Sie die PHP-Header()-Methode zum Anpassen von Webseiten So verwenden Sie die PHP-Header()-Methode zum Anpassen von Webseiten Mar 28, 2023 pm 01:54 PM

PHP ist eine leistungsstarke Programmiersprache, mit der dynamische Websites und Webanwendungen erstellt werden können. Eine der leistungsstärksten Funktionen ist die header()-Methode von PHP. In diesem Artikel erfahren Sie, wie Sie die header()-Methode von PHP zum Anpassen von Webseiten verwenden.

Was ist der Unterschied zwischen HTML5-Tag-Head und Header? Was ist der Unterschied zwischen HTML5-Tag-Head und Header? Jan 17, 2022 am 11:10 AM

Unterschiede: 1. Das Head-Tag wird verwendet, um den Kopf des Dokuments zu definieren, der ein Container für alle Head-Elemente ist, und das Header-Tag wird verwendet, um den Header (Einleitungsinformationen) des Dokuments zu definieren. 2. Alle Browser unterstützen das Head-Tag und ältere Versionen von Browsern Keiner der Browser unterstützt das Header-Tag und Browser wie IE9+ und höher müssen das Header-Tag unterstützen.

Vollständige Liste der PHP-Datei-Download-Funktionen: Analyse von Datei-Download-Beispielen für Readfile, Header, Content-Disposition und andere Funktionen Vollständige Liste der PHP-Datei-Download-Funktionen: Analyse von Datei-Download-Beispielen für Readfile, Header, Content-Disposition und andere Funktionen Nov 18, 2023 pm 03:26 PM

Vollständige Liste der PHP-Datei-Download-Funktionen: Datei-Download-Beispielanalyse von Readfile, Header, Content-Disposition und anderen Funktionen. Der Datei-Download ist eine der wesentlichen Funktionen in Webanwendungen, und PHP als weit verbreitete Web-Entwicklungssprache bietet viele A Funktion und Methode zum Implementieren des Datei-Downloads. In diesem Artikel werden häufig verwendete Datei-Download-Funktionen in PHP vorgestellt, einschließlich Readfile, Header und Content-Dispo

Wie Nginx über die Kennung im Header verteilt Wie Nginx über die Kennung im Header verteilt May 11, 2023 pm 04:01 PM

Nginx kann Anfragen basierend auf benutzerdefinierten Kennungen in den Anfrageheadern an verschiedene Server verteilen. Konkret können Sie die Map-Direktive verwenden, um den benutzerdefinierten Bezeichner im Anforderungsheader einer anderen Back-End-Serveradresse zuzuordnen, und dann die Proxy_pass-Direktive verwenden, um die Anforderung an den entsprechenden Back-End-Server weiterzuleiten. Das Folgende ist eine Beispielkonfigurationsdatei: http{map$http_my_header$backend{defaultbackend1.example.com;value1backend2.example.com;value2backend3.example.com;}upstreambackend1{serv

Welche Daten befinden sich im Datenordner? Welche Daten befinden sich im Datenordner? May 05, 2023 pm 04:30 PM

Der Datenordner enthält System- und Programmdaten, wie z. B. Softwareeinstellungen und Installationspakete. Jeder Ordner im Datenordner stellt einen anderen Typ von Datenspeicherordner dar, unabhängig davon, ob sich die Datendatei auf den Dateinamen „Data“ oder die Dateierweiterung „Benannte Daten“ bezieht Es handelt sich bei allen um vom System oder Programm angepasste Datendateien. Daten sind eine Sicherungsdatei zur Datenspeicherung, die im Allgemeinen mit Meidaplayer, Notepad oder Word geöffnet werden kann.

See all articles