ruffle/web/packages/core/src/ruffle-imports.ts

41 lines
1.0 KiB
TypeScript
Raw Normal View History

/**
* Functions imported from JS into Ruffle.
*
* @ignore
2020-11-17 22:53:17 +00:00
* @internal
*/
/**
* Copies data into the given audio channel.
* This is necessary because Safari does not support `AudioBuffer.copyToChannel`.
2020-11-17 22:53:17 +00:00
*
* @internal
*/
export function copyToAudioBuffer(
2020-11-17 22:16:35 +00:00
audioBuffer: AudioBuffer,
leftData: ArrayLike<number>,
rightData: ArrayLike<number>
): void {
2020-11-17 22:16:35 +00:00
if (leftData) {
const dstBuffer = audioBuffer.getChannelData(0);
dstBuffer.set(leftData);
}
2020-11-17 22:16:35 +00:00
if (rightData) {
const dstBuffer = audioBuffer.getChannelData(1);
dstBuffer.set(rightData);
}
}
/**
* Returns `AudioContext.getOutputTimestamp`, defaulting to `context.currentTime` if
* `getOutputTimestamp` is unavailable. This is necessary because `web-sys` does not yet export
* `AudioBuffer.copyToChannel`.
*
* @internal
*/
export function getAudioOutputTimestamp(context: AudioContext): number {
const timestamp = context.getOutputTimestamp?.();
return timestamp?.contextTime ?? context.currentTime - context.baseLatency;
}