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

Reply via email to