Я использую следующий код, чтобы проверить WAV-файл в PHP.
$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 моно 8 кГц 64 бит, либо PCM моно 16 кГц 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";
}
Других решений пока нет …