在 PHP 中生成 wav 音调

2024-04-21

我想在 php 中生成正弦音。但是构建我的 wav 时我需要给出以字节为单位的值。我不知道该怎么做:

这是我的代码:

$freqOfTone = 440;
$sampleRate = 44100;
$samplesCount = 80000;

$amplitude = 0.25 * 32768;
$w = 2 * pi() * $freqOfTone / $sampleRate;

//$dataArray = new


$text = "RIFF"
."80036"
."WAVE"
."fmt "
."16"
."1"
."1"
."44100"
."44100"
."1"
."8"
."data"
."80000";

for ($n = 0; $n < $samplesCount; $n++)
{
    $text .= (int)($amplitude *  sin($n * $w)); 
}


$myfile = fopen("sine.wav", "w") or die("Unable to open file!");

fwrite($myfile, $text);

fclose($myfile);

问题是你的算法将数字写为文本。而一个.wav http://www.sonicspot.com/guide/wavefiles.html文件对数据二进制进行编码。

例如你可以使用pack对数据进行分组。

$freqOfTone = 440;
$sampleRate = 44100;
$samplesCount = 80000;

$amplitude = 0.25 * 32768;
$w = 2 * pi() * $freqOfTone / $sampleRate;

$samples = array();
for ($n = 0; $n < $samplesCount; $n++) {
    $samples[] = (int)($amplitude *  sin($n * $w));
}

$srate = 44100; //sample rate
$bps = 16; //bits per sample
$Bps = $bps/8; //bytes per sample /// I EDITED

$str = call_user_func_array("pack",
    array_merge(array("VVVVVvvVVvvVVv*"),
        array(//header
            0x46464952, //RIFF
            160038,      //File size
            0x45564157, //WAVE
            0x20746d66, //"fmt " (chunk)
            16, //chunk size
            1, //compression
            1, //nchannels
            $srate, //sample rate
            $Bps*$srate, //bytes/second
            $Bps, //block align
            $bps, //bits/sample
            0x61746164, //"data"
            160000 //chunk size
        ),
        $samples //data
    )
);
$myfile = fopen("sine.wav", "wb") or die("Unable to open file!");
fwrite($myfile, $str);
fclose($myfile);

这会产生这个file http://s000.tinyupload.com/index.php?file_id=74719922293793666696.

请注意,您can't只需重用上面的标头即可。某些方面的硬编码有所不同(例如文件大小、通道数、比特率等)。但如果有人读到文档 http://www.sonicspot.com/guide/wavefiles.html,可以轻松地相应地修改标题。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 PHP 中生成 wav 音调 的相关文章

  • 显式删除会话cookie会产生什么影响?

    我使用 php session 来维护用户的会话 Session 在登录后创建 在注销或超时后销毁 我需要管理面板中的一个选项来强制注销任何用户 如果他在网站上处于活动状态 我怎样才能做到这一点 我正在考虑删除临时会话文件 这应该有效地破坏
  • 谷歌日历手表过期时间超过1个月怎么办?

    我将我的 CRM 系统与 Google 日历同步 为此 我要求push notifications从我的用户 Google 日历到我的系统 我已经成功创建了手表 并将过期时间设置为2030年 但是当我收到手表事件的响应时 它显示手表的过期时
  • 如何在 Carbon Laravel 中添加日期和另一个日期?

    在我的 laravel 项目中 我想将日期时间增加到前一个日期时间 这是我的代码 expire order 0 gt expire date new Carbon now gt addMonths 6 这两行的结果是 2018 01 28
  • 垃圾邮件打败了我所有的验证码

    我有一个 WordPress 博客 我在上面使用验证码插件的时间最长 因为它有效 最近我收到了大量的垃圾邮件 然后我尝试执行通过 PHP 生成的 将这些随机数添加在一起 但仍然没有成功 我不太确定需要做什么来阻止这些垃圾邮件 但这很烦人 我
  • PHP:将多字节字符串(单词)拆分为单独的字符

    尝试使用 mb split 将这个字符串 主楼怎么走 分割成单独的字符 我需要一个数组 但没有成功 有什么建议吗 谢谢你 例如 尝试使用带有 u 选项的正则表达式 chars preg split u string 1 PREG SPLIT
  • 解析错误:语法错误,意外的 T_RETURN [关闭]

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 help reopen questions 遇到这个问
  • PHP - 警告:strpos() [function.strpos]: 空分隔符是什么意思?

    警告 strpos function strpos 空分隔符是什么意思 我有这个 if strpos 039 text false text str replace 039 text 猜测一下 我会说 text是一个空字符串 感谢马克指出细
  • 如何从脚本中创建新的 Joomla 用户帐户?

    我们正在为 Joomla 创建一个 XML API 允许合作伙伴网站在我们的网站上为其用户创建新帐户 我们已经创建了一个独立的 PHP 脚本来处理和验证 API 请求 但现在我们需要实际创建新帐户 我们最初只想进行 CURL 调用来提交注册
  • Laravel 从 API 响应中删除标头值

    Laravel 应用程序版本 5 6 我希望从 API 响应中显示的 Cache Control 标头中删除 private 值 我有一个中间件添加 无缓存 和 无存储 值 response next request response gt
  • 从 php 到 JavaScript 的数组

    我正在尝试使用 json 将数组列表从 php 传输到 javascript 但它不起作用 JS ajax url getProfilePhotos php type post post or get method data if you
  • yii2 中的自动完成

    在 Yii2 中 我希望当用户开始输入时 我的输入字段之一能够自动完成 下面是我的代码 它使用Jui Autocomplete 这是行不通的 当我打印我的数组时 我就像 Array 1 gt abc 2 gt xyz 4 gt pqr
  • 从 php 执行 bash 脚本并立即输出回网页

    我有一组 bash 和 Perl 脚本 开发在 Linux Box 上部署所需的目录结构 可选 从svn导出代码 从这个源构建一个包 这在终端上运行良好 现在 我的客户请求此流程的 Web 界面 例如 某些页面上的 创建新包 按钮将一一调用
  • PHP-docker容器中的环境变量

    我想在我的 docker 容器中显示一个环境变量 PHP 脚本如下所示 我使用 OpenShift 来启动容器 PHP 容器显示 env is 现在我更改容器的 dc 配置 oc env dc envar USER Pieter deplo
  • 带 url 参数的 Laravel post 路由

    我面临着幼虫路由的大墙 我似乎找不到解决方案 我在视图模板中有此表单
  • 如何在CentOS 5.3上安装php-mongodb?

    我已经在我的 VPS 上安装了 mongoDB 效果很好 现在我想安装 php 驱动程序以使 php 与 mongoDB 一起工作 我跟着蒙戈安装 http www php net manual en mongo installation
  • PHP 脚本不断执行 mmap/munmap

    我的 PHP 脚本包含一个循环 它只不过是回显和取消引用指针 如 tab othertab i gt 中的内容 直到昨天 这个脚本开始变得非常慢 比以前慢了 50 倍 之前 它一直运行良好 使用 strace 后 我发现 90 的情况下 脚
  • php oracle客户端oci8安装出现什么问题

    我尝试了安装 PHP Oracle 客户端的所有过程 1 我安装了客户端版本8和32位 2 我在php ini中取消了oci的注释 3 重新启动Wamp 4 不确定是否真的安装 但我在 php ini 中得到了引用 5 但仍然无法连接 泰汉
  • 使(文本到图像)图像具有一定的宽度但无限的长度?

    我有下面的代码 可以用大量文本生成图像 我希望该图像的宽度为 700 像素 我还希望它保留字符串所具有的段落结构 该字符串来自 MySQL 数据库 我怎样才能实现这一点 font 2 width imagefontwidth font st
  • PHP 共享标头而不使用服务器端脚本?

    到目前为止我总是通过 PHP 解决简单的问题 您有一个包含页眉 菜单 页脚和内容字段的网站 每个页面的页眉 菜单和页脚通常是相同的 在没有 PHP 或任何其他服务器端语言的情况下 如何使页眉 菜单和页脚数据仅存在于一个文件中 例如 您不会有
  • 使用 file_get_content 发布数据

    我已经做了一些关于如何使用的研究file get content与帖子 我也读过this one https stackoverflow com questions 2445276 how to post data in php using

随机推荐

  • Gulp Jscs - 类型错误:无法将未定义或 null 转换为对象

    我想在我的项目中使用 gulp jscs 所以我按照文档 https github com jscs dev gulp jscs npm install save dev gulp jscs 但是当我尝试运行 gulp 文件时 出现以下错误
  • 格式化 SQL IN 子句的字符串

    我需要格式化一个字符串并将其作为 SQL IN 子句的参数传递 例如 Select from Table Where X In param1 作为参数传入的文字字符串如下所示 Item1 Item2 Item3 这似乎不起作用 有什么建议么
  • 如何按顺序运行 Gulp 任务

    在这样的片段中 gulp task coffee gt gulp src src server coffee pipe coffee bare true on error gutil log pipe gulp dest bin gulp
  • 在javascript中计算日期差异

    我写下面的代码 var MS PER Day 24 60 60 1000 var utc1 Date UTC 1900 1 1 var utc2 Date UTC 2014 11 16 var x Math ceil utc2 utc1 M
  • 为什么JS假设没有时间的字符串日期如果填充0则为UTC,如果不填充则为本地? [复制]

    这个问题在这里已经有答案了 这很奇怪 但我确信有一个完美的解释 我和我的团队最近在使用时发现java 本地日期并以默认的字符串格式将其发送回前端 年 月 日 Javascript会自动创建一个日期 假设字符串是UTC 因此生活在ET区 它会
  • 访问窗口资源内的命名元素

    Problem 我正在尝试访问一个名为Runa 内的元素FlowDocument这是在窗口资源中定义的 为了澄清我的意思 请考虑以下代码
  • 为什么 JValue 保存在“动态”变量中,可分配给字符串变量,但在调用采用字符串参数的方法时不可用?

    这确实来自这个问题 循环遍历 JSON 数组并将项目添加到列表 C https stackoverflow com questions 64483744 looping through json array and adding items
  • IF 在应该返回 TRUE 时返回 FALSE

    我尝试做这样的事情 sub test a inputbox value1 b inputbox value2 c inputbox value3 if a b c then msgbox a else msgbox b msgbox c e
  • write.csv 精度 R

    我正在处理非常精确的数字 最大位数 我注意到write csv x 在 R 中有时会对数字进行四舍五入 有人注意到类似的事情吗 默认保存的位数是多少 正如文档中所写 在几乎所有情况下 数值量的转换都是受控制的 通过选项 scipen see
  • Swagger 用于 Asp.Net Mvc 网站

    我正在尝试构建一个微服务 Web 内容 api 它是一个简单的 ASP NET MVC Web 项目 我的问题是 如何创建一个主页 该主页是路由文档 就像 WEB API 的 swagger 一样 我有一个如下所示的 RouteConfig
  • 为什么 Hazelcast 尝试连接到另外两个端口

    我使用 IP 127 0 0 1 和端口 5701 启动 Hazelcast 为什么它尝试连接另外两个端口 5702 和 5703 它们的用途是什么 为什么连接失败 以下是我以编程方式配置的方法 Config config new Conf
  • 测试 React Redux - 无法读取未定义的属性或未定义的包装器

    我在为我的测试套件在组件中设置 Redux 存储时遇到了一些问题 问题是 即使我尝试未连接的挂载 测试也会在 authState 中查找变量时抛出错误 我有以下组件 import React Component from react imp
  • 预期间谍导航已使用 [ [ 'users' ] ] 调用,但在集成测试 Angular CLI 中从未调用过

    我在一个项目上实现了一个简单的集成测试 但它失败了 因为expect 行是在component save 方法之前执行的 当我将 Expect 行放在 setTimeout 上时 它会成功 没有setTimeout 如何成功 spec ts
  • Matlab多核

    我正在运行一种占用大量资源并最大化 CPU 的算法 问题是它只使用一个CPU 我怎样才能使MATLAB多线程计算并使用超过1个CPU 除非您专门使用并行结构 即使用显式并行性 或使用已经为您并行化的内置函数 否则 Matlab 将不会在多核
  • (再次)在独立脚本中使用 Django ORM

    我正在尝试在一些独立的屏幕抓取脚本中使用 Django ORM 我知道这个问题以前曾被问过 但我无法为我的特定问题找到一个好的解决方案 我有一个带有已定义模型的 Django 项目 我想做的是在我的抓取脚本中使用这些模型和 ORM 我的目录
  • 同步客户端-服务器数据库

    我正在寻找一些通用策略 用于将中央服务器上的数据与并不总是在线的客户端应用程序同步 在我的特定情况下 我有一个带有 sqlite 数据库的 Android 手机应用程序和一个带有 MySQL 数据库的 PHP Web 应用程序 用户将能够在
  • 如何避免选择 Internet Explorer 第一个按钮?

    我有一张带有多个文本字段和一个按钮的表单 当我输入其中一个文本字段时 提交按钮会突出显示 如果我在键入时按 Enter 键 则会按下该按钮 因此我会出现意外的行为 因为我的页面已提交 Firefox 不会这样做 是否有一些属性或配置可以避免
  • Xcode C++ 和 Objective-C 重构

    有没有办法refactorXcode 中的混合 C Objective C 代码 我正在使用 Cocos2D 和 Box2D 编写游戏 而 Box2D 是用 C 编写的 因此我编写的每个类都应该具有 mm 扩展名 因此当我尝试例如重命名变量
  • 如何强制增量 Foundry Transforms 作业以非增量方式构建而不影响语义版本?

    如何强制特定数据集以非增量方式构建而不更改转换存储库中的语义版本 有关我们具体用例的详细信息 我们有大约 50 个数据集 由单个增量 Python 通过手动注册和 for 循环定义 此转换的输入可以是 100 到 10000 个小 gzip
  • 在 PHP 中生成 wav 音调

    我想在 php 中生成正弦音 但是构建我的 wav 时我需要给出以字节为单位的值 我不知道该怎么做 这是我的代码 freqOfTone 440 sampleRate 44100 samplesCount 80000 amplitude 0