diff --git a/content/media/webaudio/AnalyserNode.cpp b/content/media/webaudio/AnalyserNode.cpp index c3a95f78be2a..da764314f6b4 100644 --- a/content/media/webaudio/AnalyserNode.cpp +++ b/content/media/webaudio/AnalyserNode.cpp @@ -180,6 +180,17 @@ AnalyserNode::GetByteFrequencyData(const Uint8Array& aArray) } } +void +AnalyserNode::GetFloatTimeDomainData(const Float32Array& aArray) +{ + float* buffer = aArray.Data(); + uint32_t length = std::min(aArray.Length(), mBuffer.Length()); + + for (uint32_t i = 0; i < length; ++i) { + buffer[i] = mBuffer[(i + mWriteIndex) % mBuffer.Length()];; + } +} + void AnalyserNode::GetByteTimeDomainData(const Uint8Array& aArray) { diff --git a/content/media/webaudio/AnalyserNode.h b/content/media/webaudio/AnalyserNode.h index e0c6c927e0fc..4af0a2909fc8 100644 --- a/content/media/webaudio/AnalyserNode.h +++ b/content/media/webaudio/AnalyserNode.h @@ -27,6 +27,7 @@ public: void GetFloatFrequencyData(const Float32Array& aArray); void GetByteFrequencyData(const Uint8Array& aArray); + void GetFloatTimeDomainData(const Float32Array& aArray); void GetByteTimeDomainData(const Uint8Array& aArray); uint32_t FftSize() const { diff --git a/dom/webidl/AnalyserNode.webidl b/dom/webidl/AnalyserNode.webidl index cb0ecad8fcf1..e6afdc58ab2b 100644 --- a/dom/webidl/AnalyserNode.webidl +++ b/dom/webidl/AnalyserNode.webidl @@ -12,11 +12,12 @@ interface AnalyserNode : AudioNode { - // Real-time frequency-domain data + // Real-time frequency-domain data void getFloatFrequencyData(Float32Array array); void getByteFrequencyData(Uint8Array array); - // Real-time waveform data + // Real-time waveform data + void getFloatTimeDomainData(Float32Array array); void getByteTimeDomainData(Uint8Array array); [SetterThrows, Pure]