web-audio-api: اجرای Web Audio API در Node.js
خلاصهٔ کاملتر
پکیج web-audio-api یه پیادهسازی کامل از استاندارد Web Audio API هست که مستقیماً توی Node.js اجرا میشه — بدون نیاز به مرورگر، بدون وابستگی native، و با 100% انطباق با تستهای WPT. این یعنی همون کدی که توی مرورگر برای پردازش صدا مینوشتی، حالا میتونی عیناً سمت سرور، توی CI، یا از ترمینال اجرا کنی.
این ابزار چند مشکل واقعی رو حل میکنه: تولید صدا سمت سرور برای APIها، رباتها و pipelineها؛ تست صدا در CI بدون نیاز به کارت صدا یا اسپیکر؛ و اسکریپتنویسی صوتی در ترمینال با پایپ کردن خروجی PCM به ابزارهایی مثل aplay یا sox. کتابخونههایی مثل Tone.js هم بدون هیچ تغییری روی این پکیج کار میکنن.
سادهترین حالت استفاده اینه که یه AudioContext میسازی، یه اسیلاتور ایجاد میکنی و به خروجی وصلش میکنی. خروجی صدا مستقیماً از طریق پکیج audio-speaker به اسپیکر میره و نیازی به تنظیم اضافه نداری:
import { AudioContext } from 'web-audio-api'
const ctx = new AudioContext()
await ctx.resume()
const osc = ctx.createOscillator()
osc.frequency.value = 440
osc.connect(ctx.destination)
osc.start()
// → A440 through your speakersاگه بخوای بدون اسپیکر صدا رو رندر کنی و نتیجه رو به شکل بافر داده بگیری، از OfflineAudioContext استفاده میکنی. این حالت برای CI، تست خودکار، یا پردازش فایل صوتی ایدهآله:
import { OfflineAudioContext } from 'web-audio-api'
const ctx = new OfflineAudioContext(2, 44100, 44100) // 1 second, stereo
const osc = ctx.createOscillator()
osc.frequency.value = 440
osc.connect(ctx.destination)
osc.start()
const buffer = await ctx.startRendering()
// buffer.getChannelData(0) → Float32Array of 44100 samplesمجموعهای غنی از مثالهای آماده هم همراه پکیج هست که طیف گستردهای از کاربردها رو نشون میده. از سیگنالهای مرجع مثل تون سینوسی و نویز رنگی، تا توهمات شنیداری مثل Shepard Tone (صدایی که انگار تا ابد بالا میره)، سنتز صدا مثل FM synthesis و الگوریتم Karplus-Strong برای شبیهسازی صدای گیتار، و تولید موسیقی generative مثل سکوانسر، jazz modal و ریتم گاملان بالینزی.
مثالها پارامتری هستن و میشه با آرگومانهای ساده اجراشون کرد. مثلاً f=440 یا freq=440 برای فرکانس، نام نتهایی مثل A4 یا C#3، و واحدهای زمانی مثل 10s یا 2m همه قابل قبولن.
از نظر معماری، این پکیج یه polyfill واقعی هست — نه یه wrapper ناقص. هر چیزی که استاندارد Web Audio API تعریف کرده، از AudioWorklet و StereoPannerNode تا AnalyserNode و ConvolverNode، همه پشتیبانی میشن. علاوه بر این، چند extension مخصوص Node هم داره که در مرورگر کار نمیکنن ولی کارهایی مثل ثبت پردازشگر از طریق callback رو ممکن میکنن.
نکات کلیدی:
- پیادهسازی کامل Web Audio API برای Node.js بدون هیچ وابستگی native
- پشتیبانی از
AudioContextبرای خروجی زنده به اسپیکر وOfflineAudioContextبرای رندر به بافر - سازگار با Tone.js و سایر کتابخونههای مبتنی بر Web Audio API
- مناسب برای تست صوتی در CI، تولید صدا سمت سرور، و اسکریپتنویسی ترمینال
- مجموعه گستردهای از مثالها شامل سنتز، توهمات شنیداری و موسیقی generative
- 100% انطباق با تستهای استاندارد WPT




