rezon73/wave

此包的最新版本(1.3.0)没有提供许可证信息。

一个用于读取WAV数据的PHP包

维护者

详细信息

github.com/rezon73/Wave

源代码

1.3.0 2018-07-23 14:19 UTC

This package is not auto-updated.

Last update: 2024-09-19 11:33:10 UTC


README

这是 https://github.com/boyhagemann/Wave 的分支。

BoyHagemann 不支持他的包。我仅修复了几个问题。这与 boyhagemann/Wave 是同一个包。

此包可以查看WAV文件的元数据。它还可以读取数据块并将它们分离成多个通道。每个通道都有自己的幅度值。如果你想要渲染一个波形图,例如,这将很有用。

如何安装

你可以使用composer安装。使用以下行的composer.json文件

"require": {
    "rezon73/wave": "^1.3"
}

如何使用

首先,基于WAV文件创建一个wave对象

<?php

use Rezon73\Wave\Wave;

$wave = new Wave();
$wave->setFilename('path/to/your/file.wav');

之后,如果文件是一个有效的WAV文件,你可以从它那里获取几个元数据。

如何创建WAV文件

WAV文件由数据块组成;数据包。每个数据块都有自己的名称、大小和唯一数据。我们实际上只对两种类型的数据块感兴趣:Fmt和Data块。

元数据(fmt块)

例如,“Fmt”块包含对WAV文件内容的描述。要获取这些元数据,你可以输入以下行

$metadata = $wave->getMetadata();
$metadata->getName();
$metadata->getSize();
$metadata->getFormat();
$metadata->getChannels();
$metadata->getSampleRate();
$metadata->getBytesPerSecond();
$metadata->getBlockSize();
$metadata->getBitsPerSample();
$metadata->getExtensionSize();
$metadata->getExtensionData();

Data块

此块包含所有实际的WAV数据。它是根据WAV的通道数构建的多个字节的包。所有分析的数据都存储在单独的通道中,具体取决于文件的通道数。要获取文件的原始幅度值,请执行以下操作

// Assuming we already analyzed the wave...
$data = $wave->getWaveformData();

// Get the amplitude values for each channel
foreach($data->getChannels() as $channel) {
    $amplitudes[] = $channel->getValues();
}

分析

分析过程可能很耗时。通常,你会在数据块中扫描每个包。它可能会消耗你所有的PHP处理能力,并可能导致最大执行时间错误。为了防止这种情况,你可以设置分析数据的详细程度。你可以设置要分析的包之间的步数。步数越大,脚本运行越快。步数越小,波形图越精确。默认情况下,步数设置为100,但你很容易更改此值

$wave->setSteps(10000);