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

Side by Side Diff: third_party/WebKit/Source/modules/webaudio/PeriodicWave.cpp

Issue 2712933003: PeriodicWave returns sine wave generator if no coefficients given (Closed)
Patch Set: Refactor and add test Created 3 years, 9 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 unified diff | Download patch
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2012 Google Inc. All rights reserved. 2 * Copyright (C) 2012 Google Inc. All rights reserved.
3 * 3 *
4 * Redistribution and use in source and binary forms, with or without 4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions 5 * modification, are permitted provided that the following conditions
6 * are met: 6 * are met:
7 * 7 *
8 * 1. Redistributions of source code must retain the above copyright 8 * 1. Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer. 9 * notice, this list of conditions and the following disclaimer.
10 * 2. Redistributions in binary form must reproduce the above copyright 10 * 2. Redistributions in binary form must reproduce the above copyright
(...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after
92 imag->data(), disableNormalization, exceptionState); 92 imag->data(), disableNormalization, exceptionState);
93 } 93 }
94 94
95 PeriodicWave* PeriodicWave::create(BaseAudioContext* context, 95 PeriodicWave* PeriodicWave::create(BaseAudioContext* context,
96 const PeriodicWaveOptions& options, 96 const PeriodicWaveOptions& options,
97 ExceptionState& exceptionState) { 97 ExceptionState& exceptionState) {
98 bool normalize = options.hasDisableNormalization() 98 bool normalize = options.hasDisableNormalization()
99 ? options.disableNormalization() 99 ? options.disableNormalization()
100 : false; 100 : false;
101 101
102 if (!options.hasReal() && !options.hasImag()) {
103 exceptionState.throwDOMException(
104 InvalidStateError,
105 "At least one of real and imag members must be specified.");
106 return nullptr;
107 }
108
109 Vector<float> realCoef; 102 Vector<float> realCoef;
110 Vector<float> imagCoef; 103 Vector<float> imagCoef;
111 104
112 if (options.hasReal()) { 105 if (options.hasReal()) {
113 realCoef = options.real(); 106 realCoef = options.real();
114 if (options.hasImag()) 107 if (options.hasImag())
115 imagCoef = options.imag(); 108 imagCoef = options.imag();
116 else 109 else
117 imagCoef.resize(realCoef.size()); 110 imagCoef.resize(realCoef.size());
118 } else { 111 } else if (options.hasImag()) {
119 // We know real is not given, so imag must exist (because we checked for 112 // |real| not given, but we have |imag|.
120 // this above).
121 imagCoef = options.imag(); 113 imagCoef = options.imag();
122 realCoef.resize(imagCoef.size()); 114 realCoef.resize(imagCoef.size());
115 } else {
116 // Neither |real| nor |imag| given. Return an object that would
117 // generate a sine wave, which means real = [0,0], and imag = [0, 1]
118 realCoef.resize(2);
119 imagCoef.resize(2);
120 imagCoef[1] = 1;
123 } 121 }
124 122
125 return create(*context, realCoef.size(), realCoef.data(), imagCoef.size(), 123 return create(*context, realCoef.size(), realCoef.data(), imagCoef.size(),
126 imagCoef.data(), normalize, exceptionState); 124 imagCoef.data(), normalize, exceptionState);
127 } 125 }
128 126
129 PeriodicWave* PeriodicWave::createSine(float sampleRate) { 127 PeriodicWave* PeriodicWave::createSine(float sampleRate) {
130 PeriodicWave* periodicWave = new PeriodicWave(sampleRate); 128 PeriodicWave* periodicWave = new PeriodicWave(sampleRate);
131 periodicWave->generateBasicWaveform(OscillatorHandler::SINE); 129 periodicWave->generateBasicWaveform(OscillatorHandler::SINE);
132 return periodicWave; 130 return periodicWave;
(...skipping 264 matching lines...) Expand 10 before | Expand all | Expand 10 after
397 } 395 }
398 396
399 realP[n] = 0; 397 realP[n] = 0;
400 imagP[n] = b; 398 imagP[n] = b;
401 } 399 }
402 400
403 createBandLimitedTables(realP, imagP, halfSize, false); 401 createBandLimitedTables(realP, imagP, halfSize, false);
404 } 402 }
405 403
406 } // namespace blink 404 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698