Compare commits
No commits in common. "main" and "0.2.0" have entirely different histories.
373
LICENSE
373
LICENSE
@ -1,373 +0,0 @@
|
||||
Mozilla Public License Version 2.0
|
||||
==================================
|
||||
|
||||
1. Definitions
|
||||
--------------
|
||||
|
||||
1.1. "Contributor"
|
||||
means each individual or legal entity that creates, contributes to
|
||||
the creation of, or owns Covered Software.
|
||||
|
||||
1.2. "Contributor Version"
|
||||
means the combination of the Contributions of others (if any) used
|
||||
by a Contributor and that particular Contributor's Contribution.
|
||||
|
||||
1.3. "Contribution"
|
||||
means Covered Software of a particular Contributor.
|
||||
|
||||
1.4. "Covered Software"
|
||||
means Source Code Form to which the initial Contributor has attached
|
||||
the notice in Exhibit A, the Executable Form of such Source Code
|
||||
Form, and Modifications of such Source Code Form, in each case
|
||||
including portions thereof.
|
||||
|
||||
1.5. "Incompatible With Secondary Licenses"
|
||||
means
|
||||
|
||||
(a) that the initial Contributor has attached the notice described
|
||||
in Exhibit B to the Covered Software; or
|
||||
|
||||
(b) that the Covered Software was made available under the terms of
|
||||
version 1.1 or earlier of the License, but not also under the
|
||||
terms of a Secondary License.
|
||||
|
||||
1.6. "Executable Form"
|
||||
means any form of the work other than Source Code Form.
|
||||
|
||||
1.7. "Larger Work"
|
||||
means a work that combines Covered Software with other material, in
|
||||
a separate file or files, that is not Covered Software.
|
||||
|
||||
1.8. "License"
|
||||
means this document.
|
||||
|
||||
1.9. "Licensable"
|
||||
means having the right to grant, to the maximum extent possible,
|
||||
whether at the time of the initial grant or subsequently, any and
|
||||
all of the rights conveyed by this License.
|
||||
|
||||
1.10. "Modifications"
|
||||
means any of the following:
|
||||
|
||||
(a) any file in Source Code Form that results from an addition to,
|
||||
deletion from, or modification of the contents of Covered
|
||||
Software; or
|
||||
|
||||
(b) any new file in Source Code Form that contains any Covered
|
||||
Software.
|
||||
|
||||
1.11. "Patent Claims" of a Contributor
|
||||
means any patent claim(s), including without limitation, method,
|
||||
process, and apparatus claims, in any patent Licensable by such
|
||||
Contributor that would be infringed, but for the grant of the
|
||||
License, by the making, using, selling, offering for sale, having
|
||||
made, import, or transfer of either its Contributions or its
|
||||
Contributor Version.
|
||||
|
||||
1.12. "Secondary License"
|
||||
means either the GNU General Public License, Version 2.0, the GNU
|
||||
Lesser General Public License, Version 2.1, the GNU Affero General
|
||||
Public License, Version 3.0, or any later versions of those
|
||||
licenses.
|
||||
|
||||
1.13. "Source Code Form"
|
||||
means the form of the work preferred for making modifications.
|
||||
|
||||
1.14. "You" (or "Your")
|
||||
means an individual or a legal entity exercising rights under this
|
||||
License. For legal entities, "You" includes any entity that
|
||||
controls, is controlled by, or is under common control with You. For
|
||||
purposes of this definition, "control" means (a) the power, direct
|
||||
or indirect, to cause the direction or management of such entity,
|
||||
whether by contract or otherwise, or (b) ownership of more than
|
||||
fifty percent (50%) of the outstanding shares or beneficial
|
||||
ownership of such entity.
|
||||
|
||||
2. License Grants and Conditions
|
||||
--------------------------------
|
||||
|
||||
2.1. Grants
|
||||
|
||||
Each Contributor hereby grants You a world-wide, royalty-free,
|
||||
non-exclusive license:
|
||||
|
||||
(a) under intellectual property rights (other than patent or trademark)
|
||||
Licensable by such Contributor to use, reproduce, make available,
|
||||
modify, display, perform, distribute, and otherwise exploit its
|
||||
Contributions, either on an unmodified basis, with Modifications, or
|
||||
as part of a Larger Work; and
|
||||
|
||||
(b) under Patent Claims of such Contributor to make, use, sell, offer
|
||||
for sale, have made, import, and otherwise transfer either its
|
||||
Contributions or its Contributor Version.
|
||||
|
||||
2.2. Effective Date
|
||||
|
||||
The licenses granted in Section 2.1 with respect to any Contribution
|
||||
become effective for each Contribution on the date the Contributor first
|
||||
distributes such Contribution.
|
||||
|
||||
2.3. Limitations on Grant Scope
|
||||
|
||||
The licenses granted in this Section 2 are the only rights granted under
|
||||
this License. No additional rights or licenses will be implied from the
|
||||
distribution or licensing of Covered Software under this License.
|
||||
Notwithstanding Section 2.1(b) above, no patent license is granted by a
|
||||
Contributor:
|
||||
|
||||
(a) for any code that a Contributor has removed from Covered Software;
|
||||
or
|
||||
|
||||
(b) for infringements caused by: (i) Your and any other third party's
|
||||
modifications of Covered Software, or (ii) the combination of its
|
||||
Contributions with other software (except as part of its Contributor
|
||||
Version); or
|
||||
|
||||
(c) under Patent Claims infringed by Covered Software in the absence of
|
||||
its Contributions.
|
||||
|
||||
This License does not grant any rights in the trademarks, service marks,
|
||||
or logos of any Contributor (except as may be necessary to comply with
|
||||
the notice requirements in Section 3.4).
|
||||
|
||||
2.4. Subsequent Licenses
|
||||
|
||||
No Contributor makes additional grants as a result of Your choice to
|
||||
distribute the Covered Software under a subsequent version of this
|
||||
License (see Section 10.2) or under the terms of a Secondary License (if
|
||||
permitted under the terms of Section 3.3).
|
||||
|
||||
2.5. Representation
|
||||
|
||||
Each Contributor represents that the Contributor believes its
|
||||
Contributions are its original creation(s) or it has sufficient rights
|
||||
to grant the rights to its Contributions conveyed by this License.
|
||||
|
||||
2.6. Fair Use
|
||||
|
||||
This License is not intended to limit any rights You have under
|
||||
applicable copyright doctrines of fair use, fair dealing, or other
|
||||
equivalents.
|
||||
|
||||
2.7. Conditions
|
||||
|
||||
Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted
|
||||
in Section 2.1.
|
||||
|
||||
3. Responsibilities
|
||||
-------------------
|
||||
|
||||
3.1. Distribution of Source Form
|
||||
|
||||
All distribution of Covered Software in Source Code Form, including any
|
||||
Modifications that You create or to which You contribute, must be under
|
||||
the terms of this License. You must inform recipients that the Source
|
||||
Code Form of the Covered Software is governed by the terms of this
|
||||
License, and how they can obtain a copy of this License. You may not
|
||||
attempt to alter or restrict the recipients' rights in the Source Code
|
||||
Form.
|
||||
|
||||
3.2. Distribution of Executable Form
|
||||
|
||||
If You distribute Covered Software in Executable Form then:
|
||||
|
||||
(a) such Covered Software must also be made available in Source Code
|
||||
Form, as described in Section 3.1, and You must inform recipients of
|
||||
the Executable Form how they can obtain a copy of such Source Code
|
||||
Form by reasonable means in a timely manner, at a charge no more
|
||||
than the cost of distribution to the recipient; and
|
||||
|
||||
(b) You may distribute such Executable Form under the terms of this
|
||||
License, or sublicense it under different terms, provided that the
|
||||
license for the Executable Form does not attempt to limit or alter
|
||||
the recipients' rights in the Source Code Form under this License.
|
||||
|
||||
3.3. Distribution of a Larger Work
|
||||
|
||||
You may create and distribute a Larger Work under terms of Your choice,
|
||||
provided that You also comply with the requirements of this License for
|
||||
the Covered Software. If the Larger Work is a combination of Covered
|
||||
Software with a work governed by one or more Secondary Licenses, and the
|
||||
Covered Software is not Incompatible With Secondary Licenses, this
|
||||
License permits You to additionally distribute such Covered Software
|
||||
under the terms of such Secondary License(s), so that the recipient of
|
||||
the Larger Work may, at their option, further distribute the Covered
|
||||
Software under the terms of either this License or such Secondary
|
||||
License(s).
|
||||
|
||||
3.4. Notices
|
||||
|
||||
You may not remove or alter the substance of any license notices
|
||||
(including copyright notices, patent notices, disclaimers of warranty,
|
||||
or limitations of liability) contained within the Source Code Form of
|
||||
the Covered Software, except that You may alter any license notices to
|
||||
the extent required to remedy known factual inaccuracies.
|
||||
|
||||
3.5. Application of Additional Terms
|
||||
|
||||
You may choose to offer, and to charge a fee for, warranty, support,
|
||||
indemnity or liability obligations to one or more recipients of Covered
|
||||
Software. However, You may do so only on Your own behalf, and not on
|
||||
behalf of any Contributor. You must make it absolutely clear that any
|
||||
such warranty, support, indemnity, or liability obligation is offered by
|
||||
You alone, and You hereby agree to indemnify every Contributor for any
|
||||
liability incurred by such Contributor as a result of warranty, support,
|
||||
indemnity or liability terms You offer. You may include additional
|
||||
disclaimers of warranty and limitations of liability specific to any
|
||||
jurisdiction.
|
||||
|
||||
4. Inability to Comply Due to Statute or Regulation
|
||||
---------------------------------------------------
|
||||
|
||||
If it is impossible for You to comply with any of the terms of this
|
||||
License with respect to some or all of the Covered Software due to
|
||||
statute, judicial order, or regulation then You must: (a) comply with
|
||||
the terms of this License to the maximum extent possible; and (b)
|
||||
describe the limitations and the code they affect. Such description must
|
||||
be placed in a text file included with all distributions of the Covered
|
||||
Software under this License. Except to the extent prohibited by statute
|
||||
or regulation, such description must be sufficiently detailed for a
|
||||
recipient of ordinary skill to be able to understand it.
|
||||
|
||||
5. Termination
|
||||
--------------
|
||||
|
||||
5.1. The rights granted under this License will terminate automatically
|
||||
if You fail to comply with any of its terms. However, if You become
|
||||
compliant, then the rights granted under this License from a particular
|
||||
Contributor are reinstated (a) provisionally, unless and until such
|
||||
Contributor explicitly and finally terminates Your grants, and (b) on an
|
||||
ongoing basis, if such Contributor fails to notify You of the
|
||||
non-compliance by some reasonable means prior to 60 days after You have
|
||||
come back into compliance. Moreover, Your grants from a particular
|
||||
Contributor are reinstated on an ongoing basis if such Contributor
|
||||
notifies You of the non-compliance by some reasonable means, this is the
|
||||
first time You have received notice of non-compliance with this License
|
||||
from such Contributor, and You become compliant prior to 30 days after
|
||||
Your receipt of the notice.
|
||||
|
||||
5.2. If You initiate litigation against any entity by asserting a patent
|
||||
infringement claim (excluding declaratory judgment actions,
|
||||
counter-claims, and cross-claims) alleging that a Contributor Version
|
||||
directly or indirectly infringes any patent, then the rights granted to
|
||||
You by any and all Contributors for the Covered Software under Section
|
||||
2.1 of this License shall terminate.
|
||||
|
||||
5.3. In the event of termination under Sections 5.1 or 5.2 above, all
|
||||
end user license agreements (excluding distributors and resellers) which
|
||||
have been validly granted by You or Your distributors under this License
|
||||
prior to termination shall survive termination.
|
||||
|
||||
************************************************************************
|
||||
* *
|
||||
* 6. Disclaimer of Warranty *
|
||||
* ------------------------- *
|
||||
* *
|
||||
* Covered Software is provided under this License on an "as is" *
|
||||
* basis, without warranty of any kind, either expressed, implied, or *
|
||||
* statutory, including, without limitation, warranties that the *
|
||||
* Covered Software is free of defects, merchantable, fit for a *
|
||||
* particular purpose or non-infringing. The entire risk as to the *
|
||||
* quality and performance of the Covered Software is with You. *
|
||||
* Should any Covered Software prove defective in any respect, You *
|
||||
* (not any Contributor) assume the cost of any necessary servicing, *
|
||||
* repair, or correction. This disclaimer of warranty constitutes an *
|
||||
* essential part of this License. No use of any Covered Software is *
|
||||
* authorized under this License except under this disclaimer. *
|
||||
* *
|
||||
************************************************************************
|
||||
|
||||
************************************************************************
|
||||
* *
|
||||
* 7. Limitation of Liability *
|
||||
* -------------------------- *
|
||||
* *
|
||||
* Under no circumstances and under no legal theory, whether tort *
|
||||
* (including negligence), contract, or otherwise, shall any *
|
||||
* Contributor, or anyone who distributes Covered Software as *
|
||||
* permitted above, be liable to You for any direct, indirect, *
|
||||
* special, incidental, or consequential damages of any character *
|
||||
* including, without limitation, damages for lost profits, loss of *
|
||||
* goodwill, work stoppage, computer failure or malfunction, or any *
|
||||
* and all other commercial damages or losses, even if such party *
|
||||
* shall have been informed of the possibility of such damages. This *
|
||||
* limitation of liability shall not apply to liability for death or *
|
||||
* personal injury resulting from such party's negligence to the *
|
||||
* extent applicable law prohibits such limitation. Some *
|
||||
* jurisdictions do not allow the exclusion or limitation of *
|
||||
* incidental or consequential damages, so this exclusion and *
|
||||
* limitation may not apply to You. *
|
||||
* *
|
||||
************************************************************************
|
||||
|
||||
8. Litigation
|
||||
-------------
|
||||
|
||||
Any litigation relating to this License may be brought only in the
|
||||
courts of a jurisdiction where the defendant maintains its principal
|
||||
place of business and such litigation shall be governed by laws of that
|
||||
jurisdiction, without reference to its conflict-of-law provisions.
|
||||
Nothing in this Section shall prevent a party's ability to bring
|
||||
cross-claims or counter-claims.
|
||||
|
||||
9. Miscellaneous
|
||||
----------------
|
||||
|
||||
This License represents the complete agreement concerning the subject
|
||||
matter hereof. If any provision of this License is held to be
|
||||
unenforceable, such provision shall be reformed only to the extent
|
||||
necessary to make it enforceable. Any law or regulation which provides
|
||||
that the language of a contract shall be construed against the drafter
|
||||
shall not be used to construe this License against a Contributor.
|
||||
|
||||
10. Versions of the License
|
||||
---------------------------
|
||||
|
||||
10.1. New Versions
|
||||
|
||||
Mozilla Foundation is the license steward. Except as provided in Section
|
||||
10.3, no one other than the license steward has the right to modify or
|
||||
publish new versions of this License. Each version will be given a
|
||||
distinguishing version number.
|
||||
|
||||
10.2. Effect of New Versions
|
||||
|
||||
You may distribute the Covered Software under the terms of the version
|
||||
of the License under which You originally received the Covered Software,
|
||||
or under the terms of any subsequent version published by the license
|
||||
steward.
|
||||
|
||||
10.3. Modified Versions
|
||||
|
||||
If you create software not governed by this License, and you want to
|
||||
create a new license for such software, you may create and use a
|
||||
modified version of this License if you rename the license and remove
|
||||
any references to the name of the license steward (except to note that
|
||||
such modified license differs from this License).
|
||||
|
||||
10.4. Distributing Source Code Form that is Incompatible With Secondary
|
||||
Licenses
|
||||
|
||||
If You choose to distribute Source Code Form that is Incompatible With
|
||||
Secondary Licenses under the terms of this version of the License, the
|
||||
notice described in Exhibit B of this License must be attached.
|
||||
|
||||
Exhibit A - Source Code Form License Notice
|
||||
-------------------------------------------
|
||||
|
||||
This Source Code Form is subject to the terms of the Mozilla Public
|
||||
License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
|
||||
If it is not possible or desirable to put the notice in a particular
|
||||
file, then You may include the notice in a location (such as a LICENSE
|
||||
file in a relevant directory) where a recipient would be likely to look
|
||||
for such a notice.
|
||||
|
||||
You may add additional accurate notices of copyright ownership.
|
||||
|
||||
Exhibit B - "Incompatible With Secondary Licenses" Notice
|
||||
---------------------------------------------------------
|
||||
|
||||
This Source Code Form is "Incompatible With Secondary Licenses", as
|
||||
defined by the Mozilla Public License, v. 2.0.
|
17
README.md
17
README.md
@ -2,20 +2,3 @@
|
||||
|
||||
|
||||
[](https://travis-ci.org/musicdsp/audio-algo-drain)
|
||||
|
||||
License (MPL v2.0)
|
||||
=====================
|
||||
Copyright ewolsa Edouard DUPIN
|
||||
|
||||
Licensed under the Mozilla Public License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
https://www.mozilla.org/MPL/2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
|
||||
|
@ -1,7 +1,7 @@
|
||||
/** @file
|
||||
* @author Edouard DUPIN
|
||||
* @copyright 2011, Edouard DUPIN, all right reserved
|
||||
* @license MPL v2.0 (see license file)
|
||||
* @license APACHE v2.0 (see license file)
|
||||
*/
|
||||
|
||||
#include <etk/types.hpp>
|
||||
|
@ -1,17 +1,14 @@
|
||||
/** @file
|
||||
* @author Edouard DUPIN
|
||||
* @copyright 2011, Edouard DUPIN, all right reserved
|
||||
* @license MPL v2.0 (see license file)
|
||||
* @license APACHE v2.0 (see license file)
|
||||
*/
|
||||
#pragma once
|
||||
|
||||
#include <ememory/memory.hpp>
|
||||
#include <etk/types.hpp>
|
||||
#include <audio/algo/drain/BiQuadType.hpp>
|
||||
#include <etk/Pair.hpp>
|
||||
extern "C" {
|
||||
#include <math.h>
|
||||
}
|
||||
#include <cmath>
|
||||
#ifndef M_LN10
|
||||
#define M_LN10 2.30258509299404568402
|
||||
#endif
|
||||
@ -66,8 +63,8 @@ namespace audio {
|
||||
_qualityFactor = 0.01;
|
||||
}
|
||||
double norm;
|
||||
double V = etk::pow(10.0, etk::abs(_gain) / 20.0);
|
||||
double K = etk::tan(M_PI * _frequencyCut / _sampleRate);
|
||||
double V = std::pow(10.0, std::abs(_gain) / 20.0);
|
||||
double K = std::tan(M_PI * _frequencyCut / _sampleRate);
|
||||
switch (_type) {
|
||||
case biQuadType_none:
|
||||
m_a[0] = 1.0;
|
||||
@ -128,35 +125,35 @@ namespace audio {
|
||||
case biQuadType_lowShelf:
|
||||
if (_gain >= 0) {
|
||||
norm = 1.0 / (1.0 + M_SQRT2 * K + K * K);
|
||||
m_a[0] = (1.0 + etk::sqrt(2.0*V) * K + V * K * K) * norm;
|
||||
m_a[0] = (1.0 + std::sqrt(2.0*V) * K + V * K * K) * norm;
|
||||
m_a[1] = 2.0 * (V * K * K - 1.0) * norm;
|
||||
m_a[2] = (1.0 - etk::sqrt(2.0*V) * K + V * K * K) * norm;
|
||||
m_a[2] = (1.0 - std::sqrt(2.0*V) * K + V * K * K) * norm;
|
||||
m_b[0] = 2.0 * (K * K - 1.0) * norm;
|
||||
m_b[1] = (1.0 - M_SQRT2 * K + K * K) * norm;
|
||||
} else {
|
||||
norm = 1.0 / (1.0 + etk::sqrt(2.0*V) * K + V * K * K);
|
||||
norm = 1.0 / (1.0 + std::sqrt(2.0*V) * K + V * K * K);
|
||||
m_a[0] = (1.0 + M_SQRT2 * K + K * K) * norm;
|
||||
m_a[1] = 2.0 * (K * K - 1.0) * norm;
|
||||
m_a[2] = (1.0 - M_SQRT2 * K + K * K) * norm;
|
||||
m_b[0] = 2.0 * (V * K * K - 1.0) * norm;
|
||||
m_b[1] = (1.0 - etk::sqrt(2.0*V) * K + V * K * K) * norm;
|
||||
m_b[1] = (1.0 - std::sqrt(2.0*V) * K + V * K * K) * norm;
|
||||
}
|
||||
break;
|
||||
case biQuadType_highShelf:
|
||||
if (_gain >= 0) {
|
||||
norm = 1.0 / (1.0 + M_SQRT2 * K + K * K);
|
||||
m_a[0] = (V + etk::sqrt(2.0*V) * K + K * K) * norm;
|
||||
m_a[0] = (V + std::sqrt(2.0*V) * K + K * K) * norm;
|
||||
m_a[1] = 2.0 * (K * K - V) * norm;
|
||||
m_a[2] = (V - etk::sqrt(2.0*V) * K + K * K) * norm;
|
||||
m_a[2] = (V - std::sqrt(2.0*V) * K + K * K) * norm;
|
||||
m_b[0] = 2.0 * (K * K - 1.0) * norm;
|
||||
m_b[1] = (1.0 - M_SQRT2 * K + K * K) * norm;
|
||||
} else {
|
||||
norm = 1.0 / (V + etk::sqrt(2.0*V) * K + K * K);
|
||||
norm = 1.0 / (V + std::sqrt(2.0*V) * K + K * K);
|
||||
m_a[0] = (1.0 + M_SQRT2 * K + K * K) * norm;
|
||||
m_a[1] = 2.0 * (K * K - 1.0) * norm;
|
||||
m_a[2] = (1.0 - M_SQRT2 * K + K * K) * norm;
|
||||
m_b[0] = 2.0 * (K * K - V) * norm;
|
||||
m_b[1] = (V - etk::sqrt(2.0*V) * K + K * K) * norm;
|
||||
m_b[1] = (V - std::sqrt(2.0*V) * K + K * K) * norm;
|
||||
}
|
||||
break;
|
||||
}
|
||||
@ -185,13 +182,13 @@ namespace audio {
|
||||
/**
|
||||
* @brief Get direct Coefficients
|
||||
*/
|
||||
etk::Vector<TYPE> getCoef() {
|
||||
etk::Vector<TYPE> out;
|
||||
out.pushBack(m_a[0]);
|
||||
out.pushBack(m_a[1]);
|
||||
out.pushBack(m_a[2]);
|
||||
out.pushBack(m_b[0]);
|
||||
out.pushBack(m_b[1]);
|
||||
std::vector<TYPE> getCoef() {
|
||||
std::vector<TYPE> out;
|
||||
out.push_back(m_a[0]);
|
||||
out.push_back(m_a[1]);
|
||||
out.push_back(m_a[2]);
|
||||
out.push_back(m_b[0]);
|
||||
out.push_back(m_b[1]);
|
||||
return out;
|
||||
}
|
||||
/**
|
||||
@ -252,8 +249,8 @@ namespace audio {
|
||||
* @param[in] _sampleRate input qample rate
|
||||
* @retrun list of frequency/power in dB
|
||||
*/
|
||||
etk::Vector<etk::Pair<float,float> > calculateTheory(double _sampleRate){
|
||||
etk::Vector<etk::Pair<float,float> > out;
|
||||
std::vector<std::pair<float,float> > calculateTheory(double _sampleRate){
|
||||
std::vector<std::pair<float,float> > out;
|
||||
double norm;
|
||||
bool buildLinear = true;
|
||||
size_t len = 512;
|
||||
@ -264,14 +261,14 @@ namespace audio {
|
||||
w = iii / (len - 1.0) * M_PI;
|
||||
} else {
|
||||
// 0.001 to 1, times pi, log scale
|
||||
w = etk::exp(etk::log(1.0 / 0.001) * iii / (len - 1.0)) * 0.001 * M_PI;
|
||||
w = std::exp(std::log(1.0 / 0.001) * iii / (len - 1.0)) * 0.001 * M_PI;
|
||||
}
|
||||
double freq = iii / (len - 1.0) * _sampleRate / 2.0;
|
||||
double phi = etk::pow(etk::sin(w/2.0), 2.0);
|
||||
double y = etk::log( etk::pow((m_a[0]+m_a[1]+m_a[2]).getDouble(), 2.0)
|
||||
double phi = std::pow(std::sin(w/2.0), 2.0);
|
||||
double y = std::log( std::pow((m_a[0]+m_a[1]+m_a[2]).getDouble(), 2.0)
|
||||
- 4.0*((m_a[0]*m_a[1]).getDouble() + 4.0*(m_a[0]*m_a[2]).getDouble() + (m_a[1]*m_a[2]).getDouble())*phi
|
||||
+ 16.0*(m_a[0]*m_a[2]).getDouble()*phi*phi)
|
||||
- etk::log( etk::pow(1.0+(m_b[0]+m_b[1]).getDouble(), 2.0)
|
||||
- std::log( std::pow(1.0+(m_b[0]+m_b[1]).getDouble(), 2.0)
|
||||
- 4.0*((m_b[0]).getDouble() + 4.0*(m_b[1]).getDouble() + (m_b[0]*m_b[1]).getDouble())*phi
|
||||
+ 16.0*m_b[1].getDouble()*phi*phi);
|
||||
y = y * 10.0 / M_LN10;
|
||||
@ -279,7 +276,7 @@ namespace audio {
|
||||
y = -200.0;
|
||||
}
|
||||
//APPL_DEBUG("theory = " << freq << " power=" << y);
|
||||
out.pushBack(etk::makePair<float,float>(freq, y));
|
||||
out.push_back(std::make_pair<float,float>(freq, y));
|
||||
}
|
||||
return out;
|
||||
}
|
||||
|
@ -1,7 +1,7 @@
|
||||
/** @file
|
||||
* @author Edouard DUPIN
|
||||
* @copyright 2011, Edouard DUPIN, all right reserved
|
||||
* @license MPL v2.0 (see license file)
|
||||
* @license APACHE v2.0 (see license file)
|
||||
*/
|
||||
|
||||
#include <etk/types.hpp>
|
||||
@ -22,10 +22,10 @@ static int32_t listValuesSize = sizeof(listValues)/sizeof(char*);
|
||||
|
||||
|
||||
namespace etk {
|
||||
template<> etk::String toString<enum audio::algo::drain::biQuadType>(const enum audio::algo::drain::biQuadType& _variable) {
|
||||
template<> std::string to_string<enum audio::algo::drain::biQuadType>(const enum audio::algo::drain::biQuadType& _variable) {
|
||||
return listValues[_variable];
|
||||
}
|
||||
template <> bool from_string<enum audio::algo::drain::biQuadType>(enum audio::algo::drain::biQuadType& _variableRet, const etk::String& _value) {
|
||||
template <> bool from_string<enum audio::algo::drain::biQuadType>(enum audio::algo::drain::biQuadType& _variableRet, const std::string& _value) {
|
||||
for (int32_t iii=0; iii<listValuesSize; ++iii) {
|
||||
if (_value == listValues[iii]) {
|
||||
_variableRet = static_cast<enum audio::algo::drain::biQuadType>(iii);
|
||||
|
@ -1,7 +1,7 @@
|
||||
/** @file
|
||||
* @author Edouard DUPIN
|
||||
* @copyright 2011, Edouard DUPIN, all right reserved
|
||||
* @license MPL v2.0 (see license file)
|
||||
* @license APACHE v2.0 (see license file)
|
||||
*/
|
||||
#pragma once
|
||||
|
||||
|
@ -1,7 +1,7 @@
|
||||
/** @file
|
||||
* @author Edouard DUPIN
|
||||
* @copyright 2011, Edouard DUPIN, all right reserved
|
||||
* @license MPL v2.0 (see license file)
|
||||
* @license APACHE v2.0 (see license file)
|
||||
*/
|
||||
|
||||
#include <audio/algo/drain/Equalizer.hpp>
|
||||
@ -74,11 +74,11 @@ namespace audio {
|
||||
virtual bool addBiquad(int32_t _idChannel, audio::algo::drain::biQuadType _type, double _frequencyCut, double _qualityFactor, double _gain) = 0;
|
||||
public:
|
||||
// for debug & tools only
|
||||
virtual etk::Vector<etk::Pair<float,float> > calculateTheory() = 0;
|
||||
virtual std::vector<std::pair<float,float> > calculateTheory() = 0;
|
||||
};
|
||||
template<typename TYPE> class EqualizerPrivateType : public audio::algo::drain::EqualizerPrivate {
|
||||
protected:
|
||||
etk::Vector<etk::Vector<audio::algo::drain::BiQuad<TYPE> > > m_biquads;
|
||||
std::vector<std::vector<audio::algo::drain::BiQuad<TYPE> > > m_biquads;
|
||||
public:
|
||||
/**
|
||||
* @brief Constructor
|
||||
@ -122,7 +122,7 @@ namespace audio {
|
||||
bq.setBiquadCoef(_a0, _a1, _a2, _b0, _b1);
|
||||
// add this bequad for every Channel:
|
||||
for (size_t iii=0; iii<m_biquads.size(); ++iii) {
|
||||
m_biquads[iii].pushBack(bq);
|
||||
m_biquads[iii].push_back(bq);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
@ -131,7 +131,7 @@ namespace audio {
|
||||
bq.setBiquad(_type, _frequencyCut, _qualityFactor, _gain, m_sampleRate);
|
||||
// add this bequad for every Channel:
|
||||
for (size_t iii=0; iii<m_biquads.size(); ++iii) {
|
||||
m_biquads[iii].pushBack(bq);
|
||||
m_biquads[iii].push_back(bq);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
@ -139,7 +139,7 @@ namespace audio {
|
||||
audio::algo::drain::BiQuad<TYPE> bq;
|
||||
bq.setBiquadCoef(_a0, _a1, _a2, _b0, _b1);
|
||||
if (_idChannel<m_biquads.size()) {
|
||||
m_biquads[_idChannel].pushBack(bq);
|
||||
m_biquads[_idChannel].push_back(bq);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
@ -147,17 +147,17 @@ namespace audio {
|
||||
audio::algo::drain::BiQuad<TYPE> bq;
|
||||
bq.setBiquad(_type, _frequencyCut, _qualityFactor, _gain, m_sampleRate);
|
||||
if (_idChannel<m_biquads.size()) {
|
||||
m_biquads[_idChannel].pushBack(bq);
|
||||
m_biquads[_idChannel].push_back(bq);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
virtual etk::Vector<etk::Pair<float,float> > calculateTheory() {
|
||||
etk::Vector<etk::Pair<float,float> > out;
|
||||
virtual std::vector<std::pair<float,float> > calculateTheory() {
|
||||
std::vector<std::pair<float,float> > out;
|
||||
for (size_t iii=0; iii<m_biquads[0].size(); ++iii) {
|
||||
if (iii == 0) {
|
||||
out = m_biquads[0][iii].calculateTheory(m_sampleRate);
|
||||
} else {
|
||||
etk::Vector<etk::Pair<float,float> > tmp = m_biquads[0][iii].calculateTheory(m_sampleRate);
|
||||
std::vector<std::pair<float,float> > tmp = m_biquads[0][iii].calculateTheory(m_sampleRate);
|
||||
for (size_t jjj=0; jjj< out.size(); ++jjj) {
|
||||
out[jjj].second += tmp[jjj].second;
|
||||
}
|
||||
@ -186,7 +186,7 @@ void audio::algo::drain::Equalizer::init(float _sampleRate, int8_t _nbChannel, e
|
||||
case audio::format_double:
|
||||
{
|
||||
m_private = ememory::makeShared<EqualizerPrivateType<audio::double_t> >();
|
||||
if (m_private == null) {
|
||||
if (m_private == nullptr) {
|
||||
AA_DRAIN_ERROR("can not allocate private data...");
|
||||
return;
|
||||
}
|
||||
@ -196,7 +196,7 @@ void audio::algo::drain::Equalizer::init(float _sampleRate, int8_t _nbChannel, e
|
||||
case audio::format_float:
|
||||
{
|
||||
m_private = ememory::makeShared<EqualizerPrivateType<audio::float_t> >();
|
||||
if (m_private == null) {
|
||||
if (m_private == nullptr) {
|
||||
AA_DRAIN_ERROR("can not allocate private data...");
|
||||
return;
|
||||
}
|
||||
@ -206,7 +206,7 @@ void audio::algo::drain::Equalizer::init(float _sampleRate, int8_t _nbChannel, e
|
||||
case audio::format_int8:
|
||||
{
|
||||
m_private = ememory::makeShared<EqualizerPrivateType<audio::int8_8_t> >();
|
||||
if (m_private == null) {
|
||||
if (m_private == nullptr) {
|
||||
AA_DRAIN_ERROR("can not allocate private data...");
|
||||
return;
|
||||
}
|
||||
@ -216,7 +216,7 @@ void audio::algo::drain::Equalizer::init(float _sampleRate, int8_t _nbChannel, e
|
||||
case audio::format_int8_on_int16:
|
||||
{
|
||||
m_private = ememory::makeShared<EqualizerPrivateType<audio::int8_16_t> >();
|
||||
if (m_private == null) {
|
||||
if (m_private == nullptr) {
|
||||
AA_DRAIN_ERROR("can not allocate private data...");
|
||||
return;
|
||||
}
|
||||
@ -226,7 +226,7 @@ void audio::algo::drain::Equalizer::init(float _sampleRate, int8_t _nbChannel, e
|
||||
case audio::format_int16:
|
||||
{
|
||||
m_private = ememory::makeShared<EqualizerPrivateType<audio::int16_16_t> >();
|
||||
if (m_private == null) {
|
||||
if (m_private == nullptr) {
|
||||
AA_DRAIN_ERROR("can not allocate private data...");
|
||||
return;
|
||||
}
|
||||
@ -236,7 +236,7 @@ void audio::algo::drain::Equalizer::init(float _sampleRate, int8_t _nbChannel, e
|
||||
case audio::format_int16_on_int32:
|
||||
{
|
||||
m_private = ememory::makeShared<EqualizerPrivateType<audio::int16_32_t> >();
|
||||
if (m_private == null) {
|
||||
if (m_private == nullptr) {
|
||||
AA_DRAIN_ERROR("can not allocate private data...");
|
||||
return;
|
||||
}
|
||||
@ -246,7 +246,7 @@ void audio::algo::drain::Equalizer::init(float _sampleRate, int8_t _nbChannel, e
|
||||
case audio::format_int24_on_int32:
|
||||
{
|
||||
m_private = ememory::makeShared<EqualizerPrivateType<audio::int24_32_t> >();
|
||||
if (m_private == null) {
|
||||
if (m_private == nullptr) {
|
||||
AA_DRAIN_ERROR("can not allocate private data...");
|
||||
return;
|
||||
}
|
||||
@ -256,7 +256,7 @@ void audio::algo::drain::Equalizer::init(float _sampleRate, int8_t _nbChannel, e
|
||||
case audio::format_int32:
|
||||
{
|
||||
m_private = ememory::makeShared<EqualizerPrivateType<audio::int32_32_t> >();
|
||||
if (m_private == null) {
|
||||
if (m_private == nullptr) {
|
||||
AA_DRAIN_ERROR("can not allocate private data...");
|
||||
return;
|
||||
}
|
||||
@ -266,7 +266,7 @@ void audio::algo::drain::Equalizer::init(float _sampleRate, int8_t _nbChannel, e
|
||||
case audio::format_int32_on_int64:
|
||||
{
|
||||
m_private = ememory::makeShared<EqualizerPrivateType<audio::int32_64_t> >();
|
||||
if (m_private == null) {
|
||||
if (m_private == nullptr) {
|
||||
AA_DRAIN_ERROR("can not allocate private data...");
|
||||
return;
|
||||
}
|
||||
@ -276,7 +276,7 @@ void audio::algo::drain::Equalizer::init(float _sampleRate, int8_t _nbChannel, e
|
||||
case audio::format_int64:
|
||||
{
|
||||
m_private = ememory::makeShared<EqualizerPrivateType<audio::int32_64_t> >();
|
||||
if (m_private == null) {
|
||||
if (m_private == nullptr) {
|
||||
AA_DRAIN_ERROR("can not allocate private data...");
|
||||
return;
|
||||
}
|
||||
@ -286,27 +286,27 @@ void audio::algo::drain::Equalizer::init(float _sampleRate, int8_t _nbChannel, e
|
||||
}
|
||||
}
|
||||
void audio::algo::drain::Equalizer::reset() {
|
||||
if (m_private == null) {
|
||||
if (m_private == nullptr) {
|
||||
AA_DRAIN_ERROR("Equalizer does not init ...");
|
||||
return;
|
||||
}
|
||||
m_private->reset();
|
||||
}
|
||||
|
||||
etk::Vector<enum audio::format> audio::algo::drain::Equalizer::getSupportedFormat() {
|
||||
etk::Vector<enum audio::format> out = audio::algo::drain::Equalizer::getNativeSupportedFormat();
|
||||
std::vector<enum audio::format> audio::algo::drain::Equalizer::getSupportedFormat() {
|
||||
std::vector<enum audio::format> out = audio::algo::drain::Equalizer::getNativeSupportedFormat();
|
||||
|
||||
return out;
|
||||
}
|
||||
|
||||
etk::Vector<enum audio::format> audio::algo::drain::Equalizer::getNativeSupportedFormat() {
|
||||
etk::Vector<enum audio::format> out;
|
||||
out.pushBack(audio::format_float);
|
||||
std::vector<enum audio::format> audio::algo::drain::Equalizer::getNativeSupportedFormat() {
|
||||
std::vector<enum audio::format> out;
|
||||
out.push_back(audio::format_float);
|
||||
return out;
|
||||
}
|
||||
|
||||
void audio::algo::drain::Equalizer::process(void* _output, const void* _input, size_t _nbChunk) {
|
||||
if (m_private == null) {
|
||||
if (m_private == nullptr) {
|
||||
AA_DRAIN_ERROR("Equalizer does not init ...");
|
||||
return;
|
||||
}
|
||||
@ -314,14 +314,14 @@ void audio::algo::drain::Equalizer::process(void* _output, const void* _input, s
|
||||
}
|
||||
|
||||
bool audio::algo::drain::Equalizer::addBiquad(double _a0, double _a1, double _a2, double _b0, double _b1) {
|
||||
if (m_private == null) {
|
||||
if (m_private == nullptr) {
|
||||
AA_DRAIN_ERROR("Equalizer does not init ...");
|
||||
return false;
|
||||
}
|
||||
return m_private->addBiquad(_a0, _a1, _a2, _b0, _b1);
|
||||
}
|
||||
bool audio::algo::drain::Equalizer::addBiquad(int32_t _idChannel, double _a0, double _a1, double _a2, double _b0, double _b1) {
|
||||
if (m_private == null) {
|
||||
if (m_private == nullptr) {
|
||||
AA_DRAIN_ERROR("Equalizer does not init ...");
|
||||
return false;
|
||||
}
|
||||
@ -329,24 +329,24 @@ bool audio::algo::drain::Equalizer::addBiquad(int32_t _idChannel, double _a0, do
|
||||
}
|
||||
|
||||
bool audio::algo::drain::Equalizer::addBiquad(audio::algo::drain::biQuadType _type, double _frequencyCut, double _qualityFactor, double _gain) {
|
||||
if (m_private == null) {
|
||||
if (m_private == nullptr) {
|
||||
AA_DRAIN_ERROR("Equalizer does not init ...");
|
||||
return false;
|
||||
}
|
||||
return m_private->addBiquad(_type, _frequencyCut, _qualityFactor, _gain);
|
||||
}
|
||||
bool audio::algo::drain::Equalizer::addBiquad(int32_t _idChannel, audio::algo::drain::biQuadType _type, double _frequencyCut, double _qualityFactor, double _gain) {
|
||||
if (m_private == null) {
|
||||
if (m_private == nullptr) {
|
||||
AA_DRAIN_ERROR("Equalizer does not init ...");
|
||||
return false;
|
||||
}
|
||||
return m_private->addBiquad(_idChannel, _type, _frequencyCut, _qualityFactor, _gain);
|
||||
}
|
||||
|
||||
etk::Vector<etk::Pair<float,float> > audio::algo::drain::Equalizer::calculateTheory() {
|
||||
if (m_private == null) {
|
||||
std::vector<std::pair<float,float> > audio::algo::drain::Equalizer::calculateTheory() {
|
||||
if (m_private == nullptr) {
|
||||
AA_DRAIN_ERROR("Equalizer does not init ...");
|
||||
return etk::Vector<etk::Pair<float,float> >();
|
||||
return std::vector<std::pair<float,float> >();
|
||||
}
|
||||
return m_private->calculateTheory();
|
||||
}
|
||||
|
@ -1,16 +1,15 @@
|
||||
/** @file
|
||||
* @author Edouard DUPIN
|
||||
* @copyright 2011, Edouard DUPIN, all right reserved
|
||||
* @license MPL v2.0 (see license file)
|
||||
* @license APACHE v2.0 (see license file)
|
||||
*/
|
||||
#pragma once
|
||||
|
||||
#include <etk/types.hpp>
|
||||
#include <ememory/memory.hpp>
|
||||
#include <etk/Vector.hpp>
|
||||
#include <vector>
|
||||
#include <audio/format.hpp>
|
||||
#include <audio/algo/drain/BiQuadType.hpp>
|
||||
#include <etk/Pair.hpp>
|
||||
|
||||
namespace audio {
|
||||
namespace algo {
|
||||
@ -42,12 +41,12 @@ namespace audio {
|
||||
* @brief Get list of format suported in input.
|
||||
* @return list of supported format
|
||||
*/
|
||||
virtual etk::Vector<enum audio::format> getSupportedFormat();
|
||||
virtual std::vector<enum audio::format> getSupportedFormat();
|
||||
/**
|
||||
* @brief Get list of algorithm format suported. No format convertion.
|
||||
* @return list of supported format
|
||||
*/
|
||||
virtual etk::Vector<enum audio::format> getNativeSupportedFormat();
|
||||
virtual std::vector<enum audio::format> getNativeSupportedFormat();
|
||||
/**
|
||||
* @brief Main input algo process.
|
||||
* @param[in,out] _output Output data.
|
||||
@ -73,7 +72,7 @@ namespace audio {
|
||||
bool addBiquad(int32_t _idChannel, audio::algo::drain::biQuadType _type, double _frequencyCut, double _qualityFactor, double _gain);
|
||||
public:
|
||||
// for debug & tools only
|
||||
etk::Vector<etk::Pair<float,float> > calculateTheory();
|
||||
std::vector<std::pair<float,float> > calculateTheory();
|
||||
protected:
|
||||
ememory::SharedPtr<EqualizerPrivate> m_private; //!< private data (abstract the type of the data flow).
|
||||
};
|
||||
|
@ -1,7 +1,7 @@
|
||||
/** @file
|
||||
* @author Edouard DUPIN
|
||||
* @copyright 2011, Edouard DUPIN, all right reserved
|
||||
* @license MPL v2.0 (see license file)
|
||||
* @license APACHE v2.0 (see license file)
|
||||
*/
|
||||
|
||||
#include "debug.hpp"
|
||||
|
@ -1,7 +1,7 @@
|
||||
/** @file
|
||||
* @author Edouard DUPIN
|
||||
* @copyright 2011, Edouard DUPIN, all right reserved
|
||||
* @license MPL v2.0 (see license file)
|
||||
* @license APACHE v2.0 (see license file)
|
||||
*/
|
||||
#pragma once
|
||||
|
||||
|
@ -1,5 +1,5 @@
|
||||
#!/usr/bin/python
|
||||
import realog.debug as debug
|
||||
import lutin.debug as debug
|
||||
import lutin.tools as tools
|
||||
|
||||
|
||||
@ -13,7 +13,7 @@ def get_desc():
|
||||
return "test drain audio algo"
|
||||
|
||||
def get_licence():
|
||||
return "MPL-2"
|
||||
return "APACHE-2"
|
||||
|
||||
def get_compagny_type():
|
||||
return "com"
|
||||
|
@ -1,5 +1,5 @@
|
||||
#!/usr/bin/python
|
||||
import realog.debug as debug
|
||||
import lutin.debug as debug
|
||||
import lutin.tools as tools
|
||||
|
||||
|
||||
@ -10,7 +10,7 @@ def get_desc():
|
||||
return "drain basic algorithm"
|
||||
|
||||
def get_licence():
|
||||
return "MPL-2"
|
||||
return "APACHE-2"
|
||||
|
||||
|
||||
def get_compagny_type():
|
||||
|
@ -1,54 +1,54 @@
|
||||
/** @file
|
||||
* @author Edouard DUPIN
|
||||
* @copyright 2011, Edouard DUPIN, all right reserved
|
||||
* @license MPL v2.0 (see license file)
|
||||
* @license APACHE v2.0 (see license file)
|
||||
*/
|
||||
|
||||
#include <test-debug/debug.hpp>
|
||||
#include <etk/etk.hpp>
|
||||
#include <audio/algo/drain/Equalizer.hpp>
|
||||
#include <echrono/echrono.hpp>
|
||||
#include <ethread/Thread.hpp>
|
||||
#include <ethread/tools.hpp>
|
||||
#include <echrono/Steady.hpp>
|
||||
#include <echrono/Duration.hpp>
|
||||
#include <etk/os/FSNode.hpp>
|
||||
#include <chrono>
|
||||
#include <thread>
|
||||
|
||||
|
||||
|
||||
class Performance {
|
||||
private:
|
||||
echrono::Steady m_timeStart;
|
||||
echrono::Steady m_timeStop;
|
||||
echrono::Duration m_totalTimeProcessing;
|
||||
echrono::Duration m_minProcessing;
|
||||
echrono::Duration m_maxProcessing;
|
||||
std::chrono::steady_clock::time_point m_timeStart;
|
||||
std::chrono::steady_clock::time_point m_timeStop;
|
||||
std::chrono::nanoseconds m_totalTimeProcessing;
|
||||
std::chrono::nanoseconds m_minProcessing;
|
||||
std::chrono::nanoseconds m_maxProcessing;
|
||||
int32_t m_totalIteration;
|
||||
public:
|
||||
Performance() :
|
||||
m_totalTimeProcessing(echrono::nanoseconds(0)),
|
||||
m_minProcessing(echrono::nanoseconds(99999999999999LL)),
|
||||
m_maxProcessing(echrono::nanoseconds(0)),
|
||||
m_totalTimeProcessing(0),
|
||||
m_minProcessing(99999999999999LL),
|
||||
m_maxProcessing(0),
|
||||
m_totalIteration(0) {
|
||||
|
||||
}
|
||||
void tic() {
|
||||
m_timeStart = echrono::Steady::now();
|
||||
m_timeStart = std::chrono::steady_clock::now();
|
||||
}
|
||||
void toc() {
|
||||
m_timeStop = echrono::Steady::now();
|
||||
echrono::Duration time = m_timeStop - m_timeStart;
|
||||
m_minProcessing = etk::min(m_minProcessing, time);
|
||||
m_maxProcessing = etk::max(m_maxProcessing, time);
|
||||
m_timeStop = std::chrono::steady_clock::now();
|
||||
std::chrono::nanoseconds time = m_timeStop - m_timeStart;
|
||||
m_minProcessing = std::min(m_minProcessing, time);
|
||||
m_maxProcessing = std::max(m_maxProcessing, time);
|
||||
m_totalTimeProcessing += time;
|
||||
m_totalIteration++;
|
||||
|
||||
}
|
||||
|
||||
echrono::Duration getTotalTimeProcessing() {
|
||||
std::chrono::nanoseconds getTotalTimeProcessing() {
|
||||
return m_totalTimeProcessing;
|
||||
}
|
||||
echrono::Duration getMinProcessing() {
|
||||
std::chrono::nanoseconds getMinProcessing() {
|
||||
return m_minProcessing;
|
||||
}
|
||||
echrono::Duration getMaxProcessing() {
|
||||
std::chrono::nanoseconds getMaxProcessing() {
|
||||
return m_maxProcessing;
|
||||
}
|
||||
int32_t getTotalIteration() {
|
||||
@ -58,9 +58,9 @@ class Performance {
|
||||
};
|
||||
|
||||
float performanceEqualizerType(audio::format _type) {
|
||||
etk::Vector<float> input;
|
||||
std::vector<float> input;
|
||||
input.resize(1024, 0);
|
||||
etk::Vector<float> output;
|
||||
std::vector<float> output;
|
||||
output.resize(input.size()*10, 0);
|
||||
double sampleRate = 48000;
|
||||
{
|
||||
@ -87,16 +87,16 @@ float performanceEqualizerType(audio::format _type) {
|
||||
size_t sizeOut = output.size();
|
||||
algo.process(&output[0], &input[0], input.size());
|
||||
perfo.toc();
|
||||
ethread::sleepMilliSeconds((1));
|
||||
std::this_thread::sleep_for(std::chrono::milliseconds(1));
|
||||
}
|
||||
TEST_INFO(" blockSize=" << input.size() << " sample");
|
||||
TEST_INFO(" min < avg < max =" << perfo.getMinProcessing() << " < "
|
||||
<< perfo.getTotalTimeProcessing().toSeconds()*1000000000.0/perfo.getTotalIteration() << "ns < "
|
||||
<< perfo.getMaxProcessing());
|
||||
float avg = (float(((perfo.getTotalTimeProcessing().toSeconds()*1000000000.0/perfo.getTotalIteration())*sampleRate)/double(input.size()))/1000000000.0)*100.0;
|
||||
TEST_INFO(" min < avg < max= " << (float((perfo.getMinProcessing().toSeconds()*1000000000.0*sampleRate)/double(input.size()))/1000000000.0)*100.0 << "% < "
|
||||
TEST_INFO(" min < avg < max =" << perfo.getMinProcessing().count() << "ns < "
|
||||
<< perfo.getTotalTimeProcessing().count()/perfo.getTotalIteration() << "ns < "
|
||||
<< perfo.getMaxProcessing().count() << "ns ");
|
||||
float avg = (float(((perfo.getTotalTimeProcessing().count()/perfo.getTotalIteration())*sampleRate)/double(input.size()))/1000000000.0)*100.0;
|
||||
TEST_INFO(" min < avg < max= " << (float((perfo.getMinProcessing().count()*sampleRate)/double(input.size()))/1000000000.0)*100.0 << "% < "
|
||||
<< avg << "% < "
|
||||
<< (float((perfo.getMaxProcessing().toSeconds()*1000000000.0*sampleRate)/double(input.size()))/1000000000.0)*100.0 << "%");
|
||||
<< (float((perfo.getMaxProcessing().count()*sampleRate)/double(input.size()))/1000000000.0)*100.0 << "%");
|
||||
TEST_PRINT("type=" << _type << ": " << avg << "%");
|
||||
return avg;
|
||||
}
|
||||
@ -116,17 +116,17 @@ void performanceEqualizer() {
|
||||
int main(int _argc, const char** _argv) {
|
||||
// the only one init for etk:
|
||||
etk::init(_argc, _argv);
|
||||
etk::String inputName = "";
|
||||
etk::String outputName = "output.raw";
|
||||
std::string inputName = "";
|
||||
std::string outputName = "output.raw";
|
||||
bool performance = false;
|
||||
bool perf = false;
|
||||
int64_t sampleRateIn = 48000;
|
||||
int64_t sampleRateOut = 48000;
|
||||
int32_t nbChan = 1;
|
||||
int32_t quality = 4;
|
||||
etk::String test = "";
|
||||
std::string test = "";
|
||||
for (int32_t iii=0; iii<_argc ; ++iii) {
|
||||
etk::String data = _argv[iii];
|
||||
std::string data = _argv[iii];
|
||||
if (etk::start_with(data,"--in=")) {
|
||||
inputName = &data[5];
|
||||
} else if (etk::start_with(data,"--out=")) {
|
||||
@ -178,10 +178,10 @@ int main(int _argc, const char** _argv) {
|
||||
exit(-1);
|
||||
}
|
||||
TEST_INFO("Read input:");
|
||||
etk::Vector<int16_t> inputData = etk::FSNodeReadAllDataType<int16_t>(inputName);
|
||||
std::vector<int16_t> inputData = etk::FSNodeReadAllDataType<int16_t>(inputName);
|
||||
TEST_INFO(" " << inputData.size() << " samples");
|
||||
// resize output :
|
||||
etk::Vector<int16_t> output;
|
||||
std::vector<int16_t> output;
|
||||
output.resize(inputData.size()*sampleRateOut/sampleRateIn+5000, 0);
|
||||
// process in chunk of 256 samples
|
||||
int32_t blockSize = 256*nbChan;
|
||||
@ -203,7 +203,7 @@ int main(int _argc, const char** _argv) {
|
||||
algo.process(&output[outputPosition], availlableSize, &inputData[iii*blockSize], blockSize, audio::format_int16);
|
||||
if (perf == true) {
|
||||
perfo.toc();
|
||||
ethread::sleepMilliSeconds((1));
|
||||
std::this_thread::sleep_for(std::chrono::milliseconds(1));
|
||||
}
|
||||
outputPosition += availlableSize*nbChan;
|
||||
}
|
||||
|
@ -1,9 +1,6 @@
|
||||
|
||||
extern "C" {
|
||||
#include <stdio.h>
|
||||
#include <math.h>
|
||||
#include <stdint.h>
|
||||
}
|
||||
#include <cstdio>
|
||||
#include <cmath>
|
||||
#include <cstdint>
|
||||
// http://www.labbookpages.co.uk/audio/beamforming/delaySum.html
|
||||
// Number of angle points to calculate
|
||||
#define ANGLE_RESOLUTION 100000
|
||||
@ -11,8 +8,9 @@ extern "C" {
|
||||
|
||||
#include <etk/etk.hpp>
|
||||
#include <test-debug/debug.hpp>
|
||||
#include <etk/os/FSNode.hpp>
|
||||
#include <etk/math/Vector3D.hpp>
|
||||
#include <etk/uri/uri.hpp>
|
||||
#include <etk/math/Matrix4.hpp>
|
||||
|
||||
const double speedSound = 340.29; // m/s
|
||||
|
||||
@ -155,12 +153,12 @@ const double distanceEar = 3;
|
||||
int main(int argc, const char *argv[]) {
|
||||
etk::init(argc, argv);
|
||||
TEST_INFO("start calculation");
|
||||
ememory::SharedPtr<etk::io::Interface> fileIO = etk::uri::get(etk::Path("beamPattern.dat"));
|
||||
if (fileIO->open(etk::io::OpenMode::Write) == false) {
|
||||
TEST_ERROR("Can not open file...");
|
||||
return -1;
|
||||
}
|
||||
etk::FSNode node("beamPattern.dat");
|
||||
node.fileOpenWrite();
|
||||
|
||||
double freq = 3000.0; // Signal frequency in Hz
|
||||
|
||||
|
||||
double basicApplyDelay[posCount];
|
||||
for (int32_t iii=0; iii<posCount; iii++) {
|
||||
basicApplyDelay[iii] = 0.0f;
|
||||
@ -189,9 +187,9 @@ int main(int argc, const char *argv[]) {
|
||||
}
|
||||
char ploppp[4096];
|
||||
sprintf(ploppp, "%d %f %f %f %f\n", aaa, angle, angleRad, output, logOutput);
|
||||
fileIO->puts(ploppp);
|
||||
node.filePuts(ploppp);
|
||||
}
|
||||
fileIO->close();
|
||||
node.fileClose();
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -1,8 +1,6 @@
|
||||
extern "C" {
|
||||
#include <stdio.h>
|
||||
#include <math.h>
|
||||
#include <stdint.h>
|
||||
}
|
||||
#include <cstdio>
|
||||
#include <cmath>
|
||||
#include <cstdint>
|
||||
// http://www.labbookpages.co.uk/audio/beamforming/delaySum.html
|
||||
|
||||
// Number of freq points to calculate
|
||||
@ -15,9 +13,10 @@ extern "C" {
|
||||
// gnuplot> call 'freqResp.gnuplot'
|
||||
|
||||
#include <etk/etk.hpp>
|
||||
#include <etk/uri/uri.hpp>
|
||||
#include <test-debug/debug.hpp>
|
||||
#include <etk/os/FSNode.hpp>
|
||||
#include <etk/math/Vector3D.hpp>
|
||||
#include <etk/math/Matrix4.hpp>
|
||||
|
||||
const double speedSound = 340.29; // m/s
|
||||
|
||||
@ -154,11 +153,8 @@ const double distanceEar = 3;
|
||||
int main(int argc, const char *argv[]) {
|
||||
etk::init(argc, argv);
|
||||
TEST_INFO("start calculation");
|
||||
ememory::SharedPtr<etk::io::Interface> fileIO = etk::uri::get(etk::Path("freqResp.dat"));
|
||||
if (fileIO->open(etk::io::OpenMode::Write) == false) {
|
||||
TEST_ERROR("Can not open file...");
|
||||
return -1;
|
||||
}
|
||||
etk::FSNode node("freqResp.dat");
|
||||
node.fileOpenWrite();
|
||||
double basicApplyDelay[posCount];
|
||||
for (int32_t iii=0; iii<posCount; iii++) {
|
||||
basicApplyDelay[iii] = 0.0f;
|
||||
@ -189,10 +185,10 @@ int main(int argc, const char *argv[]) {
|
||||
}
|
||||
char ploppp[4096];
|
||||
sprintf(ploppp, "%f %f %f\n", angle, freq, logOutput);
|
||||
fileIO->puts(ploppp);
|
||||
node.filePuts(ploppp);
|
||||
}
|
||||
fileIO->puts("\n");
|
||||
node.filePuts("\n");
|
||||
}
|
||||
fileIO->close();
|
||||
node.fileClose();
|
||||
return 0;
|
||||
}
|
@ -1,5 +1,5 @@
|
||||
#!/usr/bin/python
|
||||
import realog.debug as debug
|
||||
import lutin.debug as debug
|
||||
import lutin.tools as tools
|
||||
|
||||
|
||||
@ -13,7 +13,7 @@ def get_desc():
|
||||
return "audio algo drain tools"
|
||||
|
||||
def get_licence():
|
||||
return "MPL-2"
|
||||
return "APACHE-2"
|
||||
|
||||
def get_compagny_type():
|
||||
return "com"
|
||||
|
@ -1,5 +1,5 @@
|
||||
#!/usr/bin/python
|
||||
import realog.debug as debug
|
||||
import lutin.debug as debug
|
||||
import lutin.tools as tools
|
||||
|
||||
|
||||
@ -13,7 +13,7 @@ def get_desc():
|
||||
return "audio algo drain tools"
|
||||
|
||||
def get_licence():
|
||||
return "MPL-2"
|
||||
return "APACHE-2"
|
||||
|
||||
def get_compagny_type():
|
||||
return "com"
|
||||
|
@ -1 +1 @@
|
||||
1.0.0
|
||||
0.2.0
|
Loading…
x
Reference in New Issue
Block a user