首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在php中绘制声波

在php中绘制声波
EN

Stack Overflow用户
提问于 2012-01-19 23:28:13
回答 1查看 1.7K关注 0票数 3

我用php开发了一个脚本来绘制wav文件的声波。虽然它运行良好,但听起来很长,大约需要20分钟,需要2-3分钟才能画出图像。我用一组样本的峰值来表示某个像素上的波。我还得到了长值,即4个字节,同时得到了左,右,负值和正值。还有一个改进是我在相同的迭代中取了4个长值。

该wav是一个法律立体声16位,但我使用解码算法,以获得PCM值,所以16位到8位。

8000 64,每个采样8位,64 Kbps,立体声,A律

我需要生成1500像素宽的图像。

这也将是有帮助的一些高级或网页如何提高脚本的性能。

Audacity在大约2-3秒内生成相同声音的图像:)

谢谢。我会张贴一些代码,如果需要。

下面是用于读取声音数据块的for循环

代码语言:javascript
复制
for ($i = 0; $i < $this->blocktotal / 4; $i+=4) 
    {
        // unpack 32 bit numbers from the sound data in groups of 4
        $blocks[] = @unpack('L', substr($this->data, $i * 4, 4));
        $blocks[] = @unpack('L', substr($this->data, ($i + 1) * 4, 4));
        $blocks[] = @unpack('L', substr($this->data, ($i + 2) * 4, 4));
        $blocks[] = @unpack('L', substr($this->data, ($i + 3) * 4, 4));
    }

32位=4*8位,每个位是左、右、左、右声道。所以在上面的循环中,我取左声道的两个值,右声道的两个值。但是对于20MB的文件,我得到$this->blocktotal= 20147456,所以上面的周期将重复大约500万次。有什么改进的想法吗?我试图同时读取8个长值,但这给出了比预期更多的图像,我不知道为什么。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-06-30 07:49:23

解决了这个问题。当文件很大时,比如20MB,我根本不会读取一些字节,也就是说,我会跳过它们,因为不管怎样,我需要一个近似值。我从声音数据中提取每10个长数字。对于较小的文件,我采用每秒和每一个长数字。所以我用这种方式解决了这个问题。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8928706

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档