playback.write()
向已打开的输出提交交错、little-endian f32 PCM 帧,并返回可观察的背压结果。
Syntax
const result = await host.playback.write(output, samples);
Parameters
| 参数 | 类型 | 说明 |
|---|---|---|
output |
audio-output handle | open() 返回的当前会话句柄 |
samples |
ByteSource |
字节数为 channels × 4 整数倍的 PCM |
采样值必须有限且位于 [-1, 1];越界值、NaN 和 Infinity 都必须拒绝。
输入必须含 1..playback.maxWriteFrames 个完整帧。调用在线性化点观察 queuedBefore,并返回 acceptedFrames = min(inputFrames, maxQueuedFrames - queuedBefore);同一句柄的并发写入按宿主接受调用的顺序线性化。
Return value
{ acceptedFrames: u32, queuedFrames: u32 }
queuedFrames = queuedBefore + acceptedFrames。缓冲已满时成功返回 acceptedFrames: 0;未接受尾部仍归 guest 所有,正常背压不得丢弃已经接受的帧。
Examples
const pcm = mixer.render(1024);
const result = await host.playback.write(
stream.output,
new Uint8Array(pcm.buffer, pcm.byteOffset, pcm.byteLength),
);
if (result.acceptedFrames < 1024) mixer.retainTail(result.acceptedFrames);
不要忙循环重试;等待 playback.ready。
Errors
特有错误:stale-handle、resource-denied、invalid-format、busy、device-unavailable、limit-exceeded。
Requirements
- 授权:
handle-derived,不进入 manifest capability 列表 - 需要
playback.open()返回的活动 audio-outputwrite句柄 - 信任档位:yellow