AnalyserNode.cpp 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. /*
  2. * Copyright (C) 2010, Google Inc. All rights reserved.
  3. *
  4. * Redistribution and use in source and binary forms, with or without
  5. * modification, are permitted provided that the following conditions
  6. * are met:
  7. * 1. Redistributions of source code must retain the above copyright
  8. * notice, this list of conditions and the following disclaimer.
  9. * 2. Redistributions in binary form must reproduce the above copyright
  10. * notice, this list of conditions and the following disclaimer in the
  11. * documentation and/or other materials provided with the distribution.
  12. *
  13. * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
  14. * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
  15. * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
  16. * DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
  17. * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
  18. * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
  19. * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
  20. * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
  21. * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
  22. * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  23. */
  24. #include "config.h"
  25. #if ENABLE(WEB_AUDIO)
  26. #include "AnalyserNode.h"
  27. #include "AudioNodeInput.h"
  28. #include "AudioNodeOutput.h"
  29. #include "ExceptionCode.h"
  30. namespace WebCore {
  31. AnalyserNode::AnalyserNode(AudioContext* context, float sampleRate)
  32. : AudioBasicInspectorNode(context, sampleRate, 2)
  33. {
  34. setNodeType(NodeTypeAnalyser);
  35. initialize();
  36. }
  37. AnalyserNode::~AnalyserNode()
  38. {
  39. uninitialize();
  40. }
  41. void AnalyserNode::process(size_t framesToProcess)
  42. {
  43. AudioBus* outputBus = output(0)->bus();
  44. if (!isInitialized() || !input(0)->isConnected()) {
  45. outputBus->zero();
  46. return;
  47. }
  48. AudioBus* inputBus = input(0)->bus();
  49. // Give the analyser the audio which is passing through this AudioNode.
  50. m_analyser.writeInput(inputBus, framesToProcess);
  51. // For in-place processing, our override of pullInputs() will just pass the audio data through unchanged if the channel count matches from input to output
  52. // (resulting in inputBus == outputBus). Otherwise, do an up-mix to stereo.
  53. if (inputBus != outputBus)
  54. outputBus->copyFrom(*inputBus);
  55. }
  56. void AnalyserNode::reset()
  57. {
  58. m_analyser.reset();
  59. }
  60. void AnalyserNode::setFftSize(unsigned size, ExceptionCode& ec)
  61. {
  62. if (!m_analyser.setFftSize(size))
  63. ec = NOT_SUPPORTED_ERR;
  64. }
  65. } // namespace WebCore
  66. #endif // ENABLE(WEB_AUDIO)