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

Side by Side Diff: Source/platform/audio/Biquad.cpp

Issue 801033003: remove WTF::Complex (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: remove WTF::Complex typedef Created 6 years 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
« no previous file with comments | « Source/platform/audio/Biquad.h ('k') | Source/platform/audio/FFTFrame.cpp » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2010 Google Inc. All rights reserved. 2 * Copyright (C) 2010 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 506 matching lines...) Expand 10 before | Expand all | Expand 10 after
517 // When the cutoff is zero, the z-transform approaches 0, if Q 517 // When the cutoff is zero, the z-transform approaches 0, if Q
518 // > 0. When both Q and cutoff are zero, the z-transform is 518 // > 0. When both Q and cutoff are zero, the z-transform is
519 // pretty much undefined. What should we do in this case? 519 // pretty much undefined. What should we do in this case?
520 // For now, just make the filter 0. When the cutoff is 1, the 520 // For now, just make the filter 0. When the cutoff is 1, the
521 // z-transform also approaches 0. 521 // z-transform also approaches 0.
522 setNormalizedCoefficients(0, 0, 0, 522 setNormalizedCoefficients(0, 0, 0,
523 1, 0, 0); 523 1, 0, 0);
524 } 524 }
525 } 525 }
526 526
527 void Biquad::setZeroPolePairs(const Complex &zero, const Complex &pole) 527 void Biquad::setZeroPolePairs(const std::complex<double>&zero, const std::comple x<double>&pole)
528 { 528 {
529 double b0 = 1; 529 double b0 = 1;
530 double b1 = -2 * zero.real(); 530 double b1 = -2 * zero.real();
531 531
532 double zeroMag = abs(zero); 532 double zeroMag = abs(zero);
533 double b2 = zeroMag * zeroMag; 533 double b2 = zeroMag * zeroMag;
534 534
535 double a1 = -2 * pole.real(); 535 double a1 = -2 * pole.real();
536 536
537 double poleMag = abs(pole); 537 double poleMag = abs(pole);
538 double a2 = poleMag * poleMag; 538 double a2 = poleMag * poleMag;
539 setNormalizedCoefficients(b0, b1, b2, 1, a1, a2); 539 setNormalizedCoefficients(b0, b1, b2, 1, a1, a2);
540 } 540 }
541 541
542 void Biquad::setAllpassPole(const Complex &pole) 542 void Biquad::setAllpassPole(const std::complex<double>&pole)
543 { 543 {
544 Complex zero = Complex(1, 0) / pole; 544 std::complex<double> zero = std::complex<double>(1, 0) / pole;
545 setZeroPolePairs(zero, pole); 545 setZeroPolePairs(zero, pole);
546 } 546 }
547 547
548 void Biquad::getFrequencyResponse(int nFrequencies, 548 void Biquad::getFrequencyResponse(int nFrequencies,
549 const float* frequency, 549 const float* frequency,
550 float* magResponse, 550 float* magResponse,
551 float* phaseResponse) 551 float* phaseResponse)
552 { 552 {
553 // Evaluate the Z-transform of the filter at given normalized 553 // Evaluate the Z-transform of the filter at given normalized
554 // frequency from 0 to 1. (1 corresponds to the Nyquist 554 // frequency from 0 to 1. (1 corresponds to the Nyquist
(...skipping 13 matching lines...) Expand all
568 568
569 // Make local copies of the coefficients as a micro-optimization. 569 // Make local copies of the coefficients as a micro-optimization.
570 double b0 = m_b0; 570 double b0 = m_b0;
571 double b1 = m_b1; 571 double b1 = m_b1;
572 double b2 = m_b2; 572 double b2 = m_b2;
573 double a1 = m_a1; 573 double a1 = m_a1;
574 double a2 = m_a2; 574 double a2 = m_a2;
575 575
576 for (int k = 0; k < nFrequencies; ++k) { 576 for (int k = 0; k < nFrequencies; ++k) {
577 double omega = -piDouble * frequency[k]; 577 double omega = -piDouble * frequency[k];
578 Complex z = Complex(cos(omega), sin(omega)); 578 std::complex<double> z = std::complex<double> (cos(omega), sin(omega));
579 Complex numerator = b0 + (b1 + b2 * z) * z; 579 std::complex<double> numerator = b0 + (b1 + b2 * z) * z;
580 Complex denominator = Complex(1, 0) + (a1 + a2 * z) * z; 580 std::complex<double> denominator =
581 Complex response = numerator / denominator; 581 std::complex<double>(1, 0) + (a1 + a2 * z) * z;
582 std::complex<double> response = numerator / denominator;
582 magResponse[k] = static_cast<float>(abs(response)); 583 magResponse[k] = static_cast<float>(abs(response));
583 phaseResponse[k] = static_cast<float>(atan2(imag(response), real(respons e))); 584 phaseResponse[k] = static_cast<float>(atan2(imag(response), real(respons e)));
584 } 585 }
585 } 586 }
586 587
587 } // namespace blink 588 } // namespace blink
588 589
589 #endif // ENABLE(WEB_AUDIO) 590 #endif // ENABLE(WEB_AUDIO)
OLDNEW
« no previous file with comments | « Source/platform/audio/Biquad.h ('k') | Source/platform/audio/FFTFrame.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698