php 检查 wav 文件格式?

php check wav file format?

我正在使用以下代码检查 php 中的 wav 文件。

$fp=$d=$data=$format=$bit=$chn="0"; 
$fp = fopen('ppk.wav', 'r'); fseek($fp, 20); $d = fread($fp, 18);

$data = unpack('vfmt/vch/Vsr/Vdr/vbs/vbis/vext', $d);  
$format = array(0x0001 => 'PCM',0x0003 => 'IEEE Float',0x0006 => 'A-LAW',0x0007 => 'MuLAW',0xFFFE => 'Extensible',);
$bit = rtrim($data['sr'],"0") * rtrim($data['dr'],"0");  
$chn = ($data['ch'] = 1) ? "Mono" : "Stereo"; 
fclose($fp); 

echo "{$format[$data['fmt']]} {$data['sr']}Hz {$bit}bit {$chn}";    

    if ($format[$data['fmt']]!="A-LAW" || $data['ch']>1 || $data['dr']>8000 || $bit>64) {

        echo "wrong format";

    } 

这很好用,并显示文件格式是否错误。

我现在想检查另一个 wav 文件..

因此 wav 文件可以是 A-LAW 单声道 8khz 64 位或 PCM 单声道 16khz 512 位。

但我不确定如何编写 if 语句来检查两者?

例如:

if ( Alaw mon 8khz <64bit || pcm mono 16khz <512) 

有什么想法吗?谢谢

您可以将描述格式有效性的条件组合在一起并使用 ! 来否定它 - 如果没有一组条件匹配,整个 if 条件将匹配:

if (!($format[$data['fmt']]=="A-LAW" && $data['ch']==1 && $data['dr']<=8000 && $bit<=64) &&
    !($format[$data['fmt']]=="PCM" && $data['ch']==1 && $data['dr']<=16000 && $bit<=512)) {

  echo "wrong format";
}