搜索
首页web前端js教程使用Web音频API使用傅立叶变换

使用Web音频API使用傅立叶变换

Web音频API使JavaScript程序员轻松访问声音处理和综合。在本文中,我们将介绍自定义振荡器,这是Web音频API的鲜为人知的功能,它使其易于放置傅立叶变换以合成浏览器中独特的声音效果。

钥匙要点

  • > Web Audio API允许JavaScript程序员使用声音处理和合成,包括使用自定义振荡器和傅立叶变换来在浏览器中创建独特的声音效果。
  • >
  • 傅立叶变换是一种数学工具,用于将复杂的信号分解为增量频率的离散正弦曲线,使其非常适合逼真的声音生成。此方法由音频压缩标准(例如MP3。>)使用 Web音频API中的自定义振荡器可以使用傅立叶变换来生成波形。此功能允许合成复杂的音调,例如警察警报器或独特的号角声。 Web音频API中使用傅立叶变换和自定义振荡器的声音合成比使用音频样品更灵活,从而使开发人员能够完全自动化自定义效果并合成复杂的音调。
  • > Web音频振荡器
  • Web音频API允许您撰写音频元素以产生声音的图。振荡器就是这样的元素 - 一种生成纯音频信号的声源。您可以设置其频率及其类型,可以是正弦,方形,锯齿或三角形,但是,正如我们将要看到的那样,还有一个强大的自定义类型。 首先,让我们尝试一个标准振荡器。我们只是将其频率设置为440 Hz,音乐家将其识别为A4音符,我们包括一个类型的选择器,让您听到正弦,方形,锯齿和三角形波形之间的区别。
  • 请参阅codepen上的seb molines(@clafou)的笔网络音频振荡器。
  • 自定义振荡器可让您定义自己的波形代替这些内置类型,但有一个扭曲:它们使用傅立叶变换来生成此波形。这使它们非常适合现实的声音。

    傅立叶以示例

    转换 傅立叶变换是音频压缩标准(例如MP3)使用的数学工具,以及许多其他应用程序。逆傅里叶变换将信号分解为其组成频率,就像人耳的过程一样,振动以感知单个音调。 在高水平上,傅立叶会转化一个事实,即可以将复杂的信号分解为增量频率的离散正弦曲线。它使用系数表工作,每种都应用于基本频率的倍数。桌子越大,近似越近。感兴趣? Wikipedia页面值得一看,并包括动画,以帮助将信号的分解为离散的正弦曲线。 但是,让我们没有深入研究理论,而是通过解构简单的连续声音来付诸实践:空气号。

    合成一个喇叭

    在本文中,我们将使用警察警报器和号角的录音。此处显示了使用开源音频编辑器Audacity创建的喇叭声的光谱仪。 使用Web音频API使用傅立叶变换 它清楚地显示了许多不同强度的线,所有这些都以相等的间隔间隔。如果我们仔细观察,则此间隔约为160Hz。 傅立叶变换以基本频率(我们称之为)及其泛音,这是f的倍数。如果我们选择160Hz作为基本F,则该线为320Hz(2 x f)是我们的第一个泛音,该线位于480Hz(3 x f)我们的第二个泛音器等线,依此类推。 由于光谱仪显示所有线均处于F的倍数,因此在F的每个倍数上观察到的强度的数组足以表示对记录的声音的体面模仿。 从傅立叶系数创建自定义波形的CreatePerioDicwave的Web音频API文档告诉我们: 还有一个图像 我们可以忽略的参数作为阶段与此示例无关。 因此,让我们创建一个这些系数的数组(估计它们为0.4、1.4、1、1、1.3、0.7、0.6、0.5、0.9、0.9、0.8,基于光谱仪上线上的亮度从底部开始)。然后,我们从该表创建一个自定义振荡器,并合成所得声音。
    The real parameter represents an array of cosine terms (traditionally the A terms). In audio terminology, the first element (index 0) is the DC-offset of the periodic waveform and is usually set to zero. The second element (index 1) represents the fundamental frequency. The third element represents the first overtone, and so on.
    
    <span>var audioContext = new AudioContext();
    </span><span>var osc = audioContext.createOscillator();
    </span>
    <span>var real = new Float32Array([0,0.4,0.4,1,1,1,0.3,0.7,0.6,0.5,0.9,0.8]);
    </span>
    <span>var imag = new Float32Array(real.length);
    </span><span>var hornTable = audioContext.createPeriodicWave(real, imag);
    </span>
    osc <span>= audioContext.createOscillator();
    </span>osc<span>.setPeriodicWave(hornTable);
    </span>osc<span>.frequency.value = 160;
    </span>osc<span>.connect(audioContext.destination);
    </span>osc<span>.start(0);</span>
    请参阅Pen自定义振荡器:Seb Molines(@clafou)的horn of codepen。

    并不是完全舒缓的声音,而是非常接近录制的声音。当然,声音综合远远超出了单独的频谱,特别是信封是音色同样重要的方面。 从信号数据到傅立叶表 像我们刚刚一样手工创建傅立叶系数是很不寻常的(很少有声音像我们的喇叭声一样简单,它仅由谐波部分组成,即F的倍数)。通常,通过将真实信号数据馈入逆FFT(快速傅立叶变换)算法来计算傅立叶表。 您可以在铬存储库中找到用于选择声音的傅立叶系数,其中包括下面播放的器官声音:

    请参阅codepen上的seb molines(@clafou)的笔自定义振荡器:器官 DSP.JS开源库可让您从自己的示例数据中计算此类傅立叶系数。现在,我们将证明这一点以产生特定的波形。

    低频振荡器:警察警报音

    美国警察警报器在低频和高频之间振荡。通过连接两个振荡器,我们可以使用Web音频API实现这一目标。第一个(低频振荡器或LFO)调节第二个产生可听见声波的第二个频率。 与以前一样,为了解构真实的东西,我们从同一录音中拍摄了警察警报声的光谱仪。

    现在,我们看到一个鲨鱼鳍状波形,代表了警笛的节奏调制。标准振荡器仅支持正弦,方形,锯齿和三角形波形,因此我们不能依靠这些波形来模仿这种特定的波形。但是我们可以再次创建一个自定义振荡器。 首先,我们需要代表所需曲线的值数组。以下功能会产生这样的值,我们将其塞入一个名为Sharkfinvalues的数组中。

    请参阅codepen上的seb molines(@clafou)的警笛调制的笔波形函数。

    接下来,我们使用dsp.js从此信号数据中计算傅立叶系数。我们获得了真实和图像阵列,然后使用这些阵列来初始化LFO。
    The real parameter represents an array of cosine terms (traditionally the A terms). In audio terminology, the first element (index 0) is the DC-offset of the periodic waveform and is usually set to zero. The second element (index 1) represents the fundamental frequency. The third element represents the first overtone, and so on.
    
    最后,我们创建第二个振荡器,并通过增益节点将LFO输出的增益节点连接到其频率。我们的光谱仪显示波形持续约380ms,因此我们将LFO的频率设置为1/0.380。它还向我们表明,警笛的基本音调范围从约750Hz的低点到高约1650Hz(中位数为1200Hz±450Hz),因此我们将振荡器的频率设置为1200,LFO的增益为450。 现在,我们可以启动两个振荡器,以听到我们的警察。
    <span>var audioContext = new AudioContext();
    </span><span>var osc = audioContext.createOscillator();
    </span>
    <span>var real = new Float32Array([0,0.4,0.4,1,1,1,0.3,0.7,0.6,0.5,0.9,0.8]);
    </span>
    <span>var imag = new Float32Array(real.length);
    </span><span>var hornTable = audioContext.createPeriodicWave(real, imag);
    </span>
    osc <span>= audioContext.createOscillator();
    </span>osc<span>.setPeriodicWave(hornTable);
    </span>osc<span>.frequency.value = 160;
    </span>osc<span>.connect(audioContext.destination);
    </span>osc<span>.start(0);</span>

    请参阅Codepen上的Seb Molines(@clafou)的笔警笛。

    对于更多的现实主义,我们还可以将自定义波形应用于第二个振荡器,正如我们用喇叭声所显示的那样。

    结论

    借助其使用傅立叶变换,自定义振荡器为Web音频开发人员提供了一种简单的方法来综合复杂的音调并完全自动化自定义效果,例如我们已经证明的警笛波形。 声音合成比使用音频样品更灵活。例如,在此警笛效果上很容易添加更多效果,就像我在此移动应用程序中添加多普勒变化所做的那样。 “我可以使用”规格表明,除IE外,Web Audio API享有广泛的浏览器支持。并非所有浏览器都具有最新的W3C标准,但是可以帮助编写跨浏览器代码。 Android L将在WebView中添加Web Audio API支持,iOS自6版以来一直在做。现在是开始实验的好时机!

    >关于使用Web音频API

    使用傅立叶变换的常见问题(常见问题解答)

    Web音频API是什么,它如何工作?

    > Web Audio API是用于处理和合成Web应用程序中音频的高级JavaScript API。它允许开发人员选择音频源,为音频添加效果,创建音频可视化,应用空间效果(例如平移)等等。它通过创建音频上下文来起作用,可以从中创建各种音频节点并将其连接在一起以形成音频路由图。每个节点都执行特定的音频函数,例如产生声音,更改音量或应用音频效果。

    >傅立叶变换如何在Web音频API中的工作?

    > Web Audio API中的fftSize属性是什么? Web音频API中的fftSize属性用于设置快速傅立叶变换(FFT)的大小以确定频域。它是两个值的功率,它决定执行傅立叶变换时将使用的样品数量。值越高,频率箱就越多,频率数据的详细信息就越详细。但是,较高的值还意味着需要更多的计算能力。

    >如何使用Web Audio API来创建音频可视化?然后使用该数据创建视觉表示。这通常是使用AnalySernode接口完成的,该接口提供实时频率和时间域分析信息。然后,这些数据可用于创建可视化,例如波形图或频谱图。创建可视化的特定方法将取决于您要创建的可视化类型以及用于创建图形的库或工具。

    如何使用Web音频API应用于音频Web Audio API提供了多种节点,可用于在音频上应用效果。其中包括用于变化体积的增益表,用于应用各种滤波器效果的Biquadfilternode,用于应用卷积效应(例如混响)等的探路表等。可以从音频上下文创建这些节点,然后在音频路由图中连接以将期望的效果应用于音频。

    Web Audio API? Web音频API通常用于Web应用程序中的各种目的。其中包括播放和控制音频,在游戏中添加声音效果,创建音频可视化,在虚拟现实应用程序中应用空间效果,等等。它提供了一种强大而灵活的方式,可以在Web应用程序中使用音频。>

    >如何使用Web Audio API控制音频的播放?这包括启动和停止音频,调整播放率并寻求音频不同部分的能力。这通常是使用AudioBufferSourcenode接口完成的,该接口代表由内存音频数据组成的音频源。

    Web Audio API API的某些限制是什么?强大而灵活,它确实有一些局限性。例如,它需要一个支持API的现代浏览器,用于更高级的音频处理任务可能很复杂。此外,由于它是高级API,因此与低级API相比,它可能无法提供某些应用所需的控制级别。

    >

    我可以使用Web Audio API记录音频吗?是的,可以使用Web音频API记录音频,尽管这不是其主要目的。这通常是使用MediaStreamAudioSourCenode接口完成的,该接口代表由媒体流组成的音频源(例如来自麦克风或其他音频输入设备)。

    >我如何了解有关Web Audio API的更多信息? 🎜>

    >有许多资源可用于了解有关Web音频API的更多信息。 Mozilla开发人员网络(MDN)提供了有关API的全面文档,包括指南和教程。在Codecademy,Udemy和Coursera等网站上也有许多在线教程和课程。此外,还有几本关于该主题的书籍,例如Boris Smus的“ Web Audio API”。

以上是使用Web音频API使用傅立叶变换的详细内容。更多信息请关注PHP中文网其他相关文章!

声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
从网站到应用程序:JavaScript的不同应用从网站到应用程序:JavaScript的不同应用Apr 22, 2025 am 12:02 AM

JavaScript在网站、移动应用、桌面应用和服务器端编程中均有广泛应用。1)在网站开发中,JavaScript与HTML、CSS一起操作DOM,实现动态效果,并支持如jQuery、React等框架。2)通过ReactNative和Ionic,JavaScript用于开发跨平台移动应用。3)Electron框架使JavaScript能构建桌面应用。4)Node.js让JavaScript在服务器端运行,支持高并发请求。

Python vs. JavaScript:比较用例和应用程序Python vs. JavaScript:比较用例和应用程序Apr 21, 2025 am 12:01 AM

Python更适合数据科学和自动化,JavaScript更适合前端和全栈开发。1.Python在数据科学和机器学习中表现出色,使用NumPy、Pandas等库进行数据处理和建模。2.Python在自动化和脚本编写方面简洁高效。3.JavaScript在前端开发中不可或缺,用于构建动态网页和单页面应用。4.JavaScript通过Node.js在后端开发中发挥作用,支持全栈开发。

C/C在JavaScript口译员和编译器中的作用C/C在JavaScript口译员和编译器中的作用Apr 20, 2025 am 12:01 AM

C和C 在JavaScript引擎中扮演了至关重要的角色,主要用于实现解释器和JIT编译器。 1)C 用于解析JavaScript源码并生成抽象语法树。 2)C 负责生成和执行字节码。 3)C 实现JIT编译器,在运行时优化和编译热点代码,显着提高JavaScript的执行效率。

JavaScript在行动中:现实世界中的示例和项目JavaScript在行动中:现实世界中的示例和项目Apr 19, 2025 am 12:13 AM

JavaScript在现实世界中的应用包括前端和后端开发。1)通过构建TODO列表应用展示前端应用,涉及DOM操作和事件处理。2)通过Node.js和Express构建RESTfulAPI展示后端应用。

JavaScript和Web:核心功能和用例JavaScript和Web:核心功能和用例Apr 18, 2025 am 12:19 AM

JavaScript在Web开发中的主要用途包括客户端交互、表单验证和异步通信。1)通过DOM操作实现动态内容更新和用户交互;2)在用户提交数据前进行客户端验证,提高用户体验;3)通过AJAX技术实现与服务器的无刷新通信。

了解JavaScript引擎:实施详细信息了解JavaScript引擎:实施详细信息Apr 17, 2025 am 12:05 AM

理解JavaScript引擎内部工作原理对开发者重要,因为它能帮助编写更高效的代码并理解性能瓶颈和优化策略。1)引擎的工作流程包括解析、编译和执行三个阶段;2)执行过程中,引擎会进行动态优化,如内联缓存和隐藏类;3)最佳实践包括避免全局变量、优化循环、使用const和let,以及避免过度使用闭包。

Python vs. JavaScript:学习曲线和易用性Python vs. JavaScript:学习曲线和易用性Apr 16, 2025 am 12:12 AM

Python更适合初学者,学习曲线平缓,语法简洁;JavaScript适合前端开发,学习曲线较陡,语法灵活。1.Python语法直观,适用于数据科学和后端开发。2.JavaScript灵活,广泛用于前端和服务器端编程。

Python vs. JavaScript:社区,图书馆和资源Python vs. JavaScript:社区,图书馆和资源Apr 15, 2025 am 12:16 AM

Python和JavaScript在社区、库和资源方面的对比各有优劣。1)Python社区友好,适合初学者,但前端开发资源不如JavaScript丰富。2)Python在数据科学和机器学习库方面强大,JavaScript则在前端开发库和框架上更胜一筹。3)两者的学习资源都丰富,但Python适合从官方文档开始,JavaScript则以MDNWebDocs为佳。选择应基于项目需求和个人兴趣。

See all articles

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

Dreamweaver Mac版

Dreamweaver Mac版

视觉化网页开发工具

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

功能强大的PHP集成开发环境

适用于 Eclipse 的 SAP NetWeaver 服务器适配器

适用于 Eclipse 的 SAP NetWeaver 服务器适配器

将Eclipse与SAP NetWeaver应用服务器集成。

DVWA

DVWA

Damn Vulnerable Web App (DVWA) 是一个PHP/MySQL的Web应用程序,非常容易受到攻击。它的主要目标是成为安全专业人员在合法环境中测试自己的技能和工具的辅助工具,帮助Web开发人员更好地理解保护Web应用程序的过程,并帮助教师/学生在课堂环境中教授/学习Web应用程序安全。DVWA的目标是通过简单直接的界面练习一些最常见的Web漏洞,难度各不相同。请注意,该软件中