Title: [111584] trunk/Source/WebCore
- Revision
- 111584
- Author
- [email protected]
- Date
- 2012-03-21 11:40:34 -0700 (Wed, 21 Mar 2012)
Log Message
Add multichannel support in RealtimeAnalyser
https://bugs.webkit.org/show_bug.cgi?id=81745
Patch by Xingnan Wang <[email protected]> on 2012-03-21
Reviewed by Chris Rogers.
* Modules/webaudio/RealtimeAnalyser.cpp:
(WebCore::RealtimeAnalyser::writeInput):
(WebCore):
Modified Paths
Diff
Modified: trunk/Source/WebCore/ChangeLog (111583 => 111584)
--- trunk/Source/WebCore/ChangeLog 2012-03-21 18:37:33 UTC (rev 111583)
+++ trunk/Source/WebCore/ChangeLog 2012-03-21 18:40:34 UTC (rev 111584)
@@ -1,3 +1,14 @@
+2012-03-21 Xingnan Wang <[email protected]>
+
+ Add multichannel support in RealtimeAnalyser
+ https://bugs.webkit.org/show_bug.cgi?id=81745
+
+ Reviewed by Chris Rogers.
+
+ * Modules/webaudio/RealtimeAnalyser.cpp:
+ (WebCore::RealtimeAnalyser::writeInput):
+ (WebCore):
+
2012-03-21 Eric Carlson <[email protected]>
Removing HTMLTrackElement does not delete TextTrack
Modified: trunk/Source/WebCore/Modules/webaudio/RealtimeAnalyser.cpp (111583 => 111584)
--- trunk/Source/WebCore/Modules/webaudio/RealtimeAnalyser.cpp 2012-03-21 18:37:33 UTC (rev 111583)
+++ trunk/Source/WebCore/Modules/webaudio/RealtimeAnalyser.cpp 2012-03-21 18:40:34 UTC (rev 111584)
@@ -31,6 +31,7 @@
#include "AudioBus.h"
#include "AudioUtilities.h"
#include "FFTFrame.h"
+#include "VectorMath.h"
#include <algorithm>
#include <limits.h>
@@ -112,13 +113,23 @@
return;
// Perform real-time analysis
- // FIXME : for now just use left channel (must mix if stereo source)
const float* source = bus->channel(0)->data();
+ float* dest = m_inputBuffer.data() + m_writeIndex;
// The source has already been sanity checked with isBusGood above.
-
- memcpy(m_inputBuffer.data() + m_writeIndex, source, sizeof(float) * framesToProcess);
+ memcpy(dest, source, sizeof(float) * framesToProcess);
+ // Sum all channels in one if numberOfChannels > 1.
+ unsigned numberOfChannels = bus->numberOfChannels();
+ if (numberOfChannels > 1) {
+ for (unsigned i = 1; i < numberOfChannels; i++) {
+ source = bus->channel(i)->data();
+ VectorMath::vadd(dest, 1, source, 1, dest, 1, framesToProcess);
+ }
+ const float scale = 1.0 / numberOfChannels;
+ VectorMath::vsmul(dest, 1, &scale, dest, 1, framesToProcess);
+ }
+
m_writeIndex += framesToProcess;
if (m_writeIndex >= InputBufferSize)
m_writeIndex = 0;
_______________________________________________
webkit-changes mailing list
[email protected]
http://lists.webkit.org/mailman/listinfo.cgi/webkit-changes