Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1380)

Unified Diff: third_party/WebKit/Source/modules/webaudio/PeriodicWave.cpp

Issue 2102133002: Add constructors for WebAudio nodes (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Rebase and prefix use counter names with WebAudio Created 4 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: third_party/WebKit/Source/modules/webaudio/PeriodicWave.cpp
diff --git a/third_party/WebKit/Source/modules/webaudio/PeriodicWave.cpp b/third_party/WebKit/Source/modules/webaudio/PeriodicWave.cpp
index 69321b15b6550d29b5660e4bd455bc3e30c54fb7..733f675bccd544a185c13153eeba7de1cc862f5e 100644
--- a/third_party/WebKit/Source/modules/webaudio/PeriodicWave.cpp
+++ b/third_party/WebKit/Source/modules/webaudio/PeriodicWave.cpp
@@ -32,6 +32,7 @@
#include "modules/webaudio/BaseAudioContext.h"
#include "modules/webaudio/OscillatorNode.h"
#include "modules/webaudio/PeriodicWave.h"
+#include "modules/webaudio/PeriodicWaveOptions.h"
#include "platform/audio/FFTFrame.h"
#include "platform/audio/VectorMath.h"
#include "wtf/PtrUtil.h"
@@ -53,8 +54,10 @@ using namespace VectorMath;
PeriodicWave* PeriodicWave::create(
BaseAudioContext& context,
- DOMFloat32Array* real,
- DOMFloat32Array* imag,
+ size_t realLength,
+ const float* real,
+ size_t imagLength,
+ const float* imag,
bool disableNormalization,
ExceptionState& exceptionState)
{
@@ -65,21 +68,80 @@ PeriodicWave* PeriodicWave::create(
return nullptr;
}
- if (real->length() != imag->length()) {
+ if (realLength != imagLength) {
exceptionState.throwDOMException(
IndexSizeError,
- "length of real array (" + String::number(real->length())
- + ") and length of imaginary array (" + String::number(imag->length())
+ "length of real array (" + String::number(realLength)
+ + ") and length of imaginary array (" + String::number(imagLength)
+ ") must match.");
return nullptr;
}
PeriodicWave* periodicWave = new PeriodicWave(context.sampleRate());
- size_t numberOfComponents = real->length();
- periodicWave->createBandLimitedTables(real->data(), imag->data(), numberOfComponents, disableNormalization);
+ periodicWave->createBandLimitedTables(real, imag, realLength, disableNormalization);
return periodicWave;
}
+PeriodicWave* PeriodicWave::create(
+ BaseAudioContext& context,
+ DOMFloat32Array* real,
+ DOMFloat32Array* imag,
+ bool disableNormalization,
+ ExceptionState& exceptionState)
+{
+ DCHECK(isMainThread());
+
+ return create(
+ context,
+ real->length(),
+ real->data(),
+ imag->length(),
+ imag->data(),
+ disableNormalization,
+ exceptionState);
+}
+
+PeriodicWave* PeriodicWave::create(
+ BaseAudioContext* context,
+ const PeriodicWaveOptions& options,
+ ExceptionState& exceptionState)
+{
+ bool normalize = options.hasDisableNormalization() ? options.disableNormalization() : false;
+
+
+ if (!options.hasReal() && !options.hasImag()) {
+ exceptionState.throwDOMException(
+ InvalidStateError,
+ "At least one of real and imag members must be specified.");
+ return nullptr;
+ }
+
+ Vector<float> realCoef;
+ Vector<float> imagCoef;
+
+ if (options.hasReal()) {
+ realCoef = options.real();
+ if (options.hasImag())
+ imagCoef = options.imag();
+ else
+ imagCoef.resize(realCoef.size());
+ } else {
+ // We know real is not given, so imag must exist (because we checked for
+ // this above).
+ imagCoef = options.imag();
+ realCoef.resize(imagCoef.size());
+ }
+
+ return create(
+ *context,
+ realCoef.size(),
+ realCoef.data(),
+ imagCoef.size(),
+ imagCoef.data(),
+ normalize,
+ exceptionState);
+}
+
PeriodicWave* PeriodicWave::createSine(float sampleRate)
{
PeriodicWave* periodicWave = new PeriodicWave(sampleRate);
« no previous file with comments | « third_party/WebKit/Source/modules/webaudio/PeriodicWave.h ('k') | third_party/WebKit/Source/modules/webaudio/PeriodicWave.idl » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698