2019-12-04 06:55:58 +00:00
|
|
|
/**
|
2020-11-16 23:01:25 +00:00
|
|
|
* Functions imported from JS into Ruffle.
|
|
|
|
*
|
|
|
|
* @ignore
|
2020-11-17 22:53:17 +00:00
|
|
|
* @internal
|
2019-12-04 06:55:58 +00:00
|
|
|
*/
|
|
|
|
|
|
|
|
/**
|
|
|
|
* 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
|
|
|
*
|
2020-11-16 23:01:25 +00:00
|
|
|
* @internal
|
2019-12-04 06:55:58 +00:00
|
|
|
*/
|
2020-11-16 22:59:51 +00:00
|
|
|
export function copyToAudioBuffer(
|
2020-11-17 22:16:35 +00:00
|
|
|
audioBuffer: AudioBuffer,
|
|
|
|
leftData: ArrayLike<number>,
|
|
|
|
rightData: ArrayLike<number>
|
2020-11-16 23:01:25 +00:00
|
|
|
): void {
|
2020-11-17 22:16:35 +00:00
|
|
|
if (leftData) {
|
|
|
|
const dstBuffer = audioBuffer.getChannelData(0);
|
|
|
|
dstBuffer.set(leftData);
|
2019-12-04 06:55:58 +00:00
|
|
|
}
|
|
|
|
|
2020-11-17 22:16:35 +00:00
|
|
|
if (rightData) {
|
|
|
|
const dstBuffer = audioBuffer.getChannelData(1);
|
|
|
|
dstBuffer.set(rightData);
|
2019-12-04 06:55:58 +00:00
|
|
|
}
|
2020-11-12 22:32:53 +00:00
|
|
|
}
|
2021-10-16 08:25:31 +00:00
|
|
|
|
|
|
|
/**
|
|
|
|
* 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;
|
|
|
|
}
|