php去除wav文件头信息,php - 解析wav音频头信息

$filename = 'C:\Users\Administrator\Downloads\费玉清 - 夏之旅.wav';

$wavObj = new WavParser($filename);

var_dump($wavObj->getHeader());

class WavParser {

protected $header = [];

protected $file_handler;

public function __construct($file)

{

//var_dump(filesize($file));

$this->file_handler = fopen($file, 'rb');

}

public function getHeader()

{

if (empty($this->header)) {

$this->setHeader();

}

return $this->header;

}

protected function setHeader()

{

$header = [];

$content = fread($this->file_handler, 44);

$header['ChunkID'] = substr($content, 0, 4);

// 小端序 - 整型

$header['ChunkSize'] = $this->str2dec(substr($content, 4, 4), true);

$header['Format'] = substr($content, 8, 4);

$header['Subchunk1ID'] = substr($content, 12, 4);

// 小端序 - 整型

$header['Subchunk1Size'] = $this->str2dec(substr($content, 16, 4), true);

// 小端序 - 整型

$header['AudioFormat'] = $this->str2dec(substr($content, 20, 2), true);

$header['NumChannels'] = $this->str2dec(substr($content, 22, 2), true);

$header['SampleRate'] = $this->str2dec(substr($content, 24, 4), true);

$header['ByteRate'] = $this->str2dec(substr($content, 28, 4), true);

$header['BlockAlign'] = $this->str2dec(substr($content, 32, 2), true);

$header['BitsPerSample'] = $this->str2dec(substr($content, 34, 2), true);

$header['Subchunk2ID'] = substr($content, 36, 4);

$header['Subchunk2Size'] = $this->str2dec(substr($content, 40, 4), true);

$this->header = $header;

}

/**

* 字符串转整型 - 可以有多种实现方式

* @param string $str

* @param bool $isLittleEndian 是否小端序

* @return int

*/

protected function str2dec(string $str, bool $isLittleEndian = false)

{

if ($isLittleEndian) {

$str = strrev($str);

}

return hexdec(bin2hex($str));

}

/**

* 字符串转二进制字符串

* @param string $str

* @param bool $isLittleEndian 默认大端序

* @return string

*/

protected function str2bin(string $str, bool $isLittleEndian = true) {

$bin_str = '';

for ($i = 0; $i < strlen($str); $i++) {

$bin = base_convert(bin2hex($str[$i]), 16, 2);

# 补前 0

$bin = str_pad($bin, 8, 0, STR_PAD_LEFT);

if ($isLittleEndian) {

$bin_str = $bin . $bin_str;

} else {

$bin_str .= $bin;

}

}

return $bin_str;

}

public function __destruct()

{

if ($this->file_handler) {

fclose($this->file_handler);

}

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值