32 lines
785 B
TypeScript
32 lines
785 B
TypeScript
|
|
/**
|
||
|
|
* Reverse audio effect
|
||
|
|
*/
|
||
|
|
|
||
|
|
import { getAudioContext } from '../context';
|
||
|
|
|
||
|
|
/**
|
||
|
|
* Reverse audio buffer
|
||
|
|
* @param buffer - Source audio buffer
|
||
|
|
* @returns New audio buffer with reversed audio
|
||
|
|
*/
|
||
|
|
export function reverseAudio(buffer: AudioBuffer): AudioBuffer {
|
||
|
|
const audioContext = getAudioContext();
|
||
|
|
const outputBuffer = audioContext.createBuffer(
|
||
|
|
buffer.numberOfChannels,
|
||
|
|
buffer.length,
|
||
|
|
buffer.sampleRate
|
||
|
|
);
|
||
|
|
|
||
|
|
// Reverse each channel
|
||
|
|
for (let channel = 0; channel < buffer.numberOfChannels; channel++) {
|
||
|
|
const inputData = buffer.getChannelData(channel);
|
||
|
|
const outputData = outputBuffer.getChannelData(channel);
|
||
|
|
|
||
|
|
for (let i = 0; i < buffer.length; i++) {
|
||
|
|
outputData[i] = inputData[buffer.length - 1 - i];
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
return outputBuffer;
|
||
|
|
}
|