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

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

Video Face Swap
완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제











[SpringBoot] Feign 호출을 통해 헤더에 매개변수 전달 Feign을 통해 헤더 매개변수를 전달하는 방법 문제 설명 Feign을 사용하여 Spring Cloud에서 다른 서비스의 API 인터페이스를 요청할 때 헤더에 매개변수를 전달해야 합니다. 특수 처리가 완료되면 헤더의 매개변수가 손실됩니다. 해결 방법 1: @RequestHeader(name="headerName")을 통해 전달합니다. 예: Feign은 @FeignClient(name="service-name")pub와 같이 정의됩니다.

Linux 헤더는 콘텐츠에 대한 메타데이터를 포함하는 데 사용되는 파일 또는 데이터 스트림의 시작을 의미합니다. 헤더 파일을 올바르게 작성하고 사용함으로써 개발자는 시스템 리소스를 더 잘 활용하고 코드 가독성과 유지 관리성을 향상시킬 수 있습니다.

PHP 헤더에서 점프를 구현하는 방법: 1. "Header("Location:$url");" 구문을 사용하여 점프를 구현합니다. 2. "if($_COOKIE[" u_type)과 같은 점프 문을 사용하여 점프를 구현합니다. "]){ 헤더('location:register.php'); } else{ setcookie('u_type','1','86400*360');".

PHP는 동적 웹사이트와 웹 애플리케이션을 만드는 데 사용할 수 있는 강력한 프로그래밍 언어입니다. 가장 강력한 기능 중 하나는 PHP의 header() 메소드입니다. 이 기사에서는 PHP의 header() 메서드를 사용하여 웹 페이지를 조정하는 방법을 살펴보겠습니다.

차이점: 1. head 태그는 모든 head 요소의 컨테이너인 문서의 헤드를 정의하는 데 사용되며, header 태그는 문서의 헤더(소개 정보)를 정의하는 데 사용됩니다. head 태그 및 이전 버전의 브라우저 헤더 태그를 지원하는 브라우저는 없으며, 헤더 태그를 지원하려면 IE9+ 이상의 브라우저가 필요합니다.

PHP 파일 다운로드 기능의 전체 목록: 파일 읽기, 헤더, 내용 처리 및 기타 기능에 대한 파일 다운로드 예제 분석 파일 다운로드는 웹 애플리케이션의 필수 기능 중 하나이며 널리 사용되는 웹 개발 언어인 PHP는 많은 A를 제공합니다. 파일 다운로드를 구현하는 함수 및 방법. 이 기사에서는 readfile, header, Content-Dispo를 포함하여 PHP에서 일반적으로 사용되는 파일 다운로드 기능을 소개합니다.

Nginx는 요청 헤더의 사용자 정의 식별자를 기반으로 요청을 다른 서버에 배포할 수 있습니다. 특히, map 지시문을 사용하여 요청 헤더의 사용자 정의 식별자를 다른 백엔드 서버 주소에 매핑한 다음, Proxy_pass 지시문을 사용하여 요청을 해당 백엔드 서버로 전달할 수 있습니다. 다음은 구성 파일의 예입니다. http{map$http_my_header$backend{defaultbackend1.example.com;value1backend2.example.com;value2backend3.example.com;}upstreambackend1{serv

데이터 폴더에는 소프트웨어 설정 및 설치 패키지와 같은 시스템 및 프로그램 데이터가 포함되어 있습니다. 데이터 폴더의 각 폴더는 데이터 파일이 파일 이름인 Data 또는 명명된 데이터를 참조하는지 여부에 관계없이 다양한 유형의 데이터 저장 폴더를 나타냅니다. , 모두 시스템이나 프로그램에 의해 사용자 정의된 데이터 파일입니다. 데이터는 데이터 저장을 위한 백업 파일입니다. 일반적으로 meidaplayer, 메모장 또는 워드로 열 수 있습니다.
