WaaPlayer
WaaPlayer は waa-play の全モジュールをラップした統一的なクラスベースインターフェースを提供します。内部で AudioContext を管理します。
import { WaaPlayer } from "waa-play";コンストラクタ
new WaaPlayer();new WaaPlayer(ctx: AudioContext);new WaaPlayer(options: WaaPlayerOptions);新しい WaaPlayer インスタンスを作成します。既存の AudioContext またはオプションオブジェクトを任意で渡せます。
// Use default AudioContextconst player = new WaaPlayer();
// Provide your own AudioContextconst ctx = new AudioContext({ sampleRate: 48000 });const player = new WaaPlayer(ctx);
// Pass options for AudioContext creationconst player = new WaaPlayer({ sampleRate: 48000 });プロパティ
ctx
readonly ctx: AudioContext;内部の AudioContext インスタンス。
コンテキストメソッド
resume()
resume(): Promise<void>;一時停止中の AudioContext を再開します。resumeContext(ctx) と同等です。
ensureRunning()
ensureRunning(): Promise<void>;AudioContext が running 状態であることを保証します。
now()
now(): number;AudioContext の現在時刻(ctx.currentTime)を返します。
バッファメソッド
load()
load(url: string, options?: LoadBufferOptions): Promise<AudioBuffer>;URL から音声ファイルを取得してデコードします。
const buffer = await player.load("/audio/track.mp3", { onProgress: (p) => console.log(`${Math.round(p * 100)}%`),});loadFromBlob()
loadFromBlob(blob: Blob): Promise<AudioBuffer>;Blob または File から AudioBuffer をデコードします。
loadAll()
loadAll(map: Record<string, string>): Promise<Map<string, AudioBuffer>>;複数の音声ファイルを並行して読み込みます。
const buffers = await player.loadAll({ kick: "/audio/kick.wav", snare: "/audio/snare.wav",});getBufferInfo()
getBufferInfo(buffer: AudioBuffer): BufferInfo;AudioBuffer のメタデータ(duration, channels, sampleRate, length)を取得します。
再生
play()
play(buffer: AudioBuffer, options?: PlayOptions): Playback;AudioBuffer を再生します。制御可能な Playback ハンドルを返します。
const playback = player.play(buffer, { offset: 10, loop: true, playbackRate: 1.5,});PlayOptions と Playback の詳細は play モジュール を参照してください。
ノードファクトリ
createGain()
createGain(initialValue?: number): GainNode;createAnalyser()
createAnalyser(options?: { fftSize?: number; smoothingTimeConstant?: number }): AnalyserNode;createFilter()
createFilter(options?: { type?: BiquadFilterType; frequency?: number; Q?: number; gain?: number }): BiquadFilterNode;createPanner()
createPanner(pan?: number): StereoPannerNode;createCompressor()
createCompressor(options?: { threshold?: number; knee?: number; ratio?: number; attack?: number; release?: number }): DynamicsCompressorNode;rampGain()
rampGain(gain: GainNode, target: number, duration: number): void;GainNode の値をスムーズにリニアランプします。
getFrequencyData()
getFrequencyData(analyser: AnalyserNode): Float32Array;getFrequencyDataByte()
getFrequencyDataByte(analyser: AnalyserNode): Uint8Array;chain()
chain(...nodes: AudioNode[]): void;Audio node を直列に接続します。
disconnectChain()
disconnectChain(...nodes: AudioNode[]): void;接続済みのチェーンを切断します。
波形
extractPeaks()
extractPeaks(buffer: AudioBuffer, options?: ExtractPeaksOptions): number[];AudioBuffer から正規化されたピーク振幅 [0, 1] を抽出します。
extractPeakPairs()
extractPeakPairs(buffer: AudioBuffer, options?: ExtractPeaksOptions): PeakPair[];波形描画用の min/max ピークペアを抽出します。
extractRMS()
extractRMS(buffer: AudioBuffer, options?: ExtractPeaksOptions): number[];RMS ラウドネス値 [0, 1] を抽出します。
フェード
fadeIn()
fadeIn(gain: GainNode, target: number, options?: FadeOptions): void;fadeOut()
fadeOut(gain: GainNode, options?: FadeOptions): void;crossfade()
crossfade(gainA: GainNode, gainB: GainNode, options?: CrossfadeOptions): void;autoFade()
autoFade(playback: Playback, gain: GainNode, options?: AutoFadeOptions): () => void;再生開始時にフェードイン、終了前にフェードアウトを自動適用します。クリーンアップ関数を返します。
スケジューラ
createScheduler()
createScheduler(options?: SchedulerOptions): Scheduler;createClock()
createClock(options?: ClockOptions): Clock;シンセ
createSineBuffer()
createSineBuffer(frequency: number, duration: number): AudioBuffer;createNoiseBuffer()
createNoiseBuffer(duration: number): AudioBuffer;createClickBuffer()
createClickBuffer(frequency: number, duration: number): AudioBuffer;アダプター
getSnapshot()
getSnapshot(playback: Playback): PlaybackSnapshot;subscribeSnapshot()
subscribeSnapshot(playback: Playback, callback: (snap: PlaybackSnapshot) => void): () => void;onFrame()
onFrame(playback: Playback, callback: (snap: PlaybackSnapshot) => void): () => void;whenEnded()
whenEnded(playback: Playback): Promise<void>;whenPosition()
whenPosition(playback: Playback, position: number): Promise<void>;ライフサイクル
dispose()
dispose(): void;AudioContext を閉じ、すべてのリソースを解放します。dispose() 呼び出し後はインスタンスを使用しないでください。