محمود-عادل/audio-waveform

使用 SoX 的 PHP 音频波形生成器

dev-master 2024-02-13 15:46 UTC

This package is auto-updated.

Last update: 2024-09-13 17:14:30 UTC


README

Example result

安装

安装 SoX 和其处理不同音频格式的插件。此外,您需要一个提供 imagecreatetruecolor() 功能的 GD 模块或其他扩展。例如,在 Ubuntu 上

sudo apt install sox libsox-fmt-all
sudo apt install php-gd

使用 Composerrequire 命令安装此包

composer require maximal/audio-waveform '~1.0'

或在您的 composer.json 文件中的 require 部分添加包名

"require": {
	"maximal/audio-waveform": "~1.0"
}

然后运行

composer update

使用

在您的 PHP 源代码中

// Include `maximal\audio` namespace
use maximal\audio\Waveform;

// Open an audio file `track.mp3`
$waveform = new Waveform('track.mp3');

// Save its waveform to the `thumbnail.png` image file which size is 1024×512 pixels
$success = $waveform->getWaveform('thumbnail.png', 1024, 512);

一个阶段

要仅获取正波形(即一个阶段),请将 onePhase 参数设置为 true

$waveform->getWaveform('one-phase.png', 800, 400, true);

立体声源

One phase stereo

单声道源

One phase stereo

设置

所有设置都是 Waveform 类的公共静态成员

  • $linesPerPixel 是水平轴上每个像素的行数。默认为 8
  • $samplesPerLine 是每行的样本数。默认为 512
  • $color 是每行的颜色。默认为 [95, 95, 95, 0.5],表示带 50% 透明度的深灰色。
  • $backgroundColor 是波形文件的背景颜色。默认为 [245, 245, 245, 1],表示带 100% 透明度的浅灰色不透明背景。
  • $axisColor 是每个轴的颜色。默认为 [0, 0, 0, 0.15],表示带 15% 透明度的黑色。

示例

带半透明峰的红波形

$waveform = new Waveform('track.mp3');
Waveform::$color = [255, 0, 0, 0.5];
$success = $waveform->getWaveform('thumbnail.png', 1024, 512);

带透明背景的红波形

$waveform = new Waveform('track.mp3');
Waveform::$color = [255, 0, 0, 0.5];
Waveform::$backgroundColor = [0, 0, 0, 0];
$success = $waveform->getWaveform('thumbnail.png', 1024, 512);

Ubuntu Linux 的 Nautilus 文件管理器缩略图生成器

  1. 将包安装到某个目录中。例如: /opt/maximal/audio-waveform-php

  2. 将以下代码放入文件 /usr/share/thumbnailers/waveform.thumbnailer

    [Thumbnailer Entry]
    Exec=/opt/maximal/audio-waveform-php/thumbnailer.php %i %o %sx%s
    MimeType=audio/wave;audio/x-wav;audio/mpeg;audio/ogg
    

    此存储库包含一个示例缩略图文件。请参阅: usr/share/thumbnailers/waveform.thumbnailer

    您还可以将其他 MIME 类型添加到缩略图文件的 MimeType 部分,只要它们可通过 SoX 工具支持。

  3. 清除缩略图缓存并重新启动 Nautilus

    rm  -rf  ~/.thumbnails
    nautilus  -q
  4. 从那时起,所有具有指定 MIME 类型的音频文件都将通过 Nautilus 的缩略图显示其小波形。默认情况下,它们是 WAV、MP3 和 OGG 文件。

与其他库的集成(例如 wavesurfer.js)

Waveform 类具有 getWaveformData() 方法,用于检索波形数据而不生成图像。您可以使用它来与其他库集成,例如,与出色的 wavesurfer.js

$waveform = new Waveform('track.mp3');
$width = 1024;
$data = $waveform->getWaveformData($width);
// $data['lines1'] and $data['lines2'] now have the waveform data for channels 1 and 2

要仅获取正值(即一个阶段),请将 onePhase 参数设置为 true

$data = $waveform->getWaveformData($width, true);

联系作者