webRTC中回声消除(AEC)模块编译时aec_rdft.c文件报错:
webRTC中回声消除(AEC)模块编译时aec_rdft.c文件报错。
原因是:
局部变量ip跟全局变量冲突的问题,可以将局部变量重新命名一下,就可以通过编译了。
aec_rdft.c修改以后文件代码为:
/*
* http://www.kurims.kyoto-u.ac.jp/~ooura/fft.html
* Copyright Takuya OOURA, 1996-2001
*
* You may use, copy, modify and distribute this code for any purpose (include
* commercial use) and without fee. Please refer to this package when you modify
* this code.
*
* Changes by the WebRTC authors:
* - Trivial type modifications.
* - Minimal code subset to do rdft of length 128.
* - Optimizations because of known length.
*
* All changes are covered by the WebRTC license and IP grant:
* Use of this source code is governed by a BSD-style license
* that can be found in the LICENSE file in the root of the source
* tree. An additional intellectual property rights grant can be found
* in the file PATENTS. All contributing project authors may
* be found in the AUTHORS file in the root of the source tree.
*/ #include "webrtc/modules/audio_processing/aec/aec_rdft.h" #include <math.h> #include "webrtc/system_wrappers/interface/cpu_features_wrapper.h"
#include "webrtc/typedefs.h" // constants shared by all paths (C, SSE2).
float rdft_w[];
// constants used by the C path.
float rdft_wk3ri_first[];
float rdft_wk3ri_second[];
// constants used by SSE2 but initialized in C path.
ALIGN16_BEG float ALIGN16_END rdft_wk1r[];
ALIGN16_BEG float ALIGN16_END rdft_wk2r[];
ALIGN16_BEG float ALIGN16_END rdft_wk3r[];
ALIGN16_BEG float ALIGN16_END rdft_wk1i[];
ALIGN16_BEG float ALIGN16_END rdft_wk2i[];
ALIGN16_BEG float ALIGN16_END rdft_wk3i[];
ALIGN16_BEG float ALIGN16_END cftmdl_wk1r[]; static int ip[]; static void bitrv2_32(int* ip1, float* a) {
const int n = ;
int j, j1, k, k1, m, m2;
float xr, xi, yr, yi; ip1[] = ;
{
int l = n;
m = ;
while ((m << ) < l) {
l >>= ;
for (j = ; j < m; j++) {
ip1[m + j] = ip1[j] + l;
}
m <<= ;
}
}
m2 = * m;
for (k = ; k < m; k++) {
for (j = ; j < k; j++) {
j1 = * j + ip1[k];
k1 = * k + ip1[j];
xr = a[j1];
xi = a[j1 + ];
yr = a[k1];
yi = a[k1 + ];
a[j1] = yr;
a[j1 + ] = yi;
a[k1] = xr;
a[k1 + ] = xi;
j1 += m2;
k1 += * m2;
xr = a[j1];
xi = a[j1 + ];
yr = a[k1];
yi = a[k1 + ];
a[j1] = yr;
a[j1 + ] = yi;
a[k1] = xr;
a[k1 + ] = xi;
j1 += m2;
k1 -= m2;
xr = a[j1];
xi = a[j1 + ];
yr = a[k1];
yi = a[k1 + ];
a[j1] = yr;
a[j1 + ] = yi;
a[k1] = xr;
a[k1 + ] = xi;
j1 += m2;
k1 += * m2;
xr = a[j1];
xi = a[j1 + ];
yr = a[k1];
yi = a[k1 + ];
a[j1] = yr;
a[j1 + ] = yi;
a[k1] = xr;
a[k1 + ] = xi;
}
j1 = * k + m2 + ip1[k];
k1 = j1 + m2;
xr = a[j1];
xi = a[j1 + ];
yr = a[k1];
yi = a[k1 + ];
a[j1] = yr;
a[j1 + ] = yi;
a[k1] = xr;
a[k1 + ] = xi;
}
} static void bitrv2_128(float* a) {
/*
Following things have been attempted but are no faster:
(a) Storing the swap indexes in a LUT (index calculations are done
for 'free' while waiting on memory/L1).
(b) Consolidate the load/store of two consecutive floats by a 64 bit
integer (execution is memory/L1 bound).
(c) Do a mix of floats and 64 bit integer to maximize register
utilization (execution is memory/L1 bound).
(d) Replacing ip[i] by ((k<<31)>>25) + ((k >> 1)<<5).
(e) Hard-coding of the offsets to completely eliminates index
calculations.
*/ unsigned int j, j1, k, k1;
float xr, xi, yr, yi; static const int ip2[] = {, , , };
for (k = ; k < ; k++) {
for (j = ; j < k; j++) {
j1 = * j + ip2[k];
k1 = * k + ip2[j];
xr = a[j1 + ];
xi = a[j1 + ];
yr = a[k1 + ];
yi = a[k1 + ];
a[j1 + ] = yr;
a[j1 + ] = yi;
a[k1 + ] = xr;
a[k1 + ] = xi;
j1 += ;
k1 += ;
xr = a[j1 + ];
xi = a[j1 + ];
yr = a[k1 + ];
yi = a[k1 + ];
a[j1 + ] = yr;
a[j1 + ] = yi;
a[k1 + ] = xr;
a[k1 + ] = xi;
j1 += ;
k1 -= ;
xr = a[j1 + ];
xi = a[j1 + ];
yr = a[k1 + ];
yi = a[k1 + ];
a[j1 + ] = yr;
a[j1 + ] = yi;
a[k1 + ] = xr;
a[k1 + ] = xi;
j1 += ;
k1 += ;
xr = a[j1 + ];
xi = a[j1 + ];
yr = a[k1 + ];
yi = a[k1 + ];
a[j1 + ] = yr;
a[j1 + ] = yi;
a[k1 + ] = xr;
a[k1 + ] = xi;
}
j1 = * k + + ip2[k];
k1 = j1 + ;
xr = a[j1 + ];
xi = a[j1 + ];
yr = a[k1 + ];
yi = a[k1 + ];
a[j1 + ] = yr;
a[j1 + ] = yi;
a[k1 + ] = xr;
a[k1 + ] = xi;
}
} static void makewt_32(void) {
const int nw = ;
int j, nwh;
float delta, x, y; ip[] = nw;
ip[] = ;
nwh = nw >> ;
delta = atanf(1.0f) / nwh;
rdft_w[] = ;
rdft_w[] = ;
rdft_w[nwh] = cosf(delta * nwh);
rdft_w[nwh + ] = rdft_w[nwh];
for (j = ; j < nwh; j += ) {
x = cosf(delta * j);
y = sinf(delta * j);
rdft_w[j] = x;
rdft_w[j + ] = y;
rdft_w[nw - j] = y;
rdft_w[nw - j + ] = x;
}
bitrv2_32(ip + , rdft_w); // pre-calculate constants used by cft1st_128 and cftmdl_128...
cftmdl_wk1r[] = rdft_w[];
cftmdl_wk1r[] = rdft_w[];
cftmdl_wk1r[] = rdft_w[];
cftmdl_wk1r[] = -rdft_w[];
{
int k1; for (k1 = , j = ; j < ; j += , k1 += ) {
const int k2 = * k1;
const float wk2r = rdft_w[k1 + ];
const float wk2i = rdft_w[k1 + ];
float wk1r, wk1i;
// ... scalar version.
wk1r = rdft_w[k2 + ];
wk1i = rdft_w[k2 + ];
rdft_wk3ri_first[k1 + ] = wk1r - * wk2i * wk1i;
rdft_wk3ri_first[k1 + ] = * wk2i * wk1r - wk1i;
wk1r = rdft_w[k2 + ];
wk1i = rdft_w[k2 + ];
rdft_wk3ri_second[k1 + ] = wk1r - * wk2r * wk1i;
rdft_wk3ri_second[k1 + ] = * wk2r * wk1r - wk1i;
// ... vector version.
rdft_wk1r[k2 + ] = rdft_w[k2 + ];
rdft_wk1r[k2 + ] = rdft_w[k2 + ];
rdft_wk1r[k2 + ] = rdft_w[k2 + ];
rdft_wk1r[k2 + ] = rdft_w[k2 + ];
rdft_wk2r[k2 + ] = rdft_w[k1 + ];
rdft_wk2r[k2 + ] = rdft_w[k1 + ];
rdft_wk2r[k2 + ] = -rdft_w[k1 + ];
rdft_wk2r[k2 + ] = -rdft_w[k1 + ];
rdft_wk3r[k2 + ] = rdft_wk3ri_first[k1 + ];
rdft_wk3r[k2 + ] = rdft_wk3ri_first[k1 + ];
rdft_wk3r[k2 + ] = rdft_wk3ri_second[k1 + ];
rdft_wk3r[k2 + ] = rdft_wk3ri_second[k1 + ];
rdft_wk1i[k2 + ] = -rdft_w[k2 + ];
rdft_wk1i[k2 + ] = rdft_w[k2 + ];
rdft_wk1i[k2 + ] = -rdft_w[k2 + ];
rdft_wk1i[k2 + ] = rdft_w[k2 + ];
rdft_wk2i[k2 + ] = -rdft_w[k1 + ];
rdft_wk2i[k2 + ] = rdft_w[k1 + ];
rdft_wk2i[k2 + ] = -rdft_w[k1 + ];
rdft_wk2i[k2 + ] = rdft_w[k1 + ];
rdft_wk3i[k2 + ] = -rdft_wk3ri_first[k1 + ];
rdft_wk3i[k2 + ] = rdft_wk3ri_first[k1 + ];
rdft_wk3i[k2 + ] = -rdft_wk3ri_second[k1 + ];
rdft_wk3i[k2 + ] = rdft_wk3ri_second[k1 + ];
}
}
} static void makect_32(void) {
float* c = rdft_w + ;
const int nc = ;
int j, nch;
float delta; ip[] = nc;
nch = nc >> ;
delta = atanf(1.0f) / nch;
c[] = cosf(delta * nch);
c[nch] = 0.5f * c[];
for (j = ; j < nch; j++) {
c[j] = 0.5f * cosf(delta * j);
c[nc - j] = 0.5f * sinf(delta * j);
}
} static void cft1st_128_C(float* a) {
const int n = ;
int j, k1, k2;
float wk1r, wk1i, wk2r, wk2i, wk3r, wk3i;
float x0r, x0i, x1r, x1i, x2r, x2i, x3r, x3i; x0r = a[] + a[];
x0i = a[] + a[];
x1r = a[] - a[];
x1i = a[] - a[];
x2r = a[] + a[];
x2i = a[] + a[];
x3r = a[] - a[];
x3i = a[] - a[];
a[] = x0r + x2r;
a[] = x0i + x2i;
a[] = x0r - x2r;
a[] = x0i - x2i;
a[] = x1r - x3i;
a[] = x1i + x3r;
a[] = x1r + x3i;
a[] = x1i - x3r;
wk1r = rdft_w[];
x0r = a[] + a[];
x0i = a[] + a[];
x1r = a[] - a[];
x1i = a[] - a[];
x2r = a[] + a[];
x2i = a[] + a[];
x3r = a[] - a[];
x3i = a[] - a[];
a[] = x0r + x2r;
a[] = x0i + x2i;
a[] = x2i - x0i;
a[] = x0r - x2r;
x0r = x1r - x3i;
x0i = x1i + x3r;
a[] = wk1r * (x0r - x0i);
a[] = wk1r * (x0r + x0i);
x0r = x3i + x1r;
x0i = x3r - x1i;
a[] = wk1r * (x0i - x0r);
a[] = wk1r * (x0i + x0r);
k1 = ;
for (j = ; j < n; j += ) {
k1 += ;
k2 = * k1;
wk2r = rdft_w[k1 + ];
wk2i = rdft_w[k1 + ];
wk1r = rdft_w[k2 + ];
wk1i = rdft_w[k2 + ];
wk3r = rdft_wk3ri_first[k1 + ];
wk3i = rdft_wk3ri_first[k1 + ];
x0r = a[j + ] + a[j + ];
x0i = a[j + ] + a[j + ];
x1r = a[j + ] - a[j + ];
x1i = a[j + ] - a[j + ];
x2r = a[j + ] + a[j + ];
x2i = a[j + ] + a[j + ];
x3r = a[j + ] - a[j + ];
x3i = a[j + ] - a[j + ];
a[j + ] = x0r + x2r;
a[j + ] = x0i + x2i;
x0r -= x2r;
x0i -= x2i;
a[j + ] = wk2r * x0r - wk2i * x0i;
a[j + ] = wk2r * x0i + wk2i * x0r;
x0r = x1r - x3i;
x0i = x1i + x3r;
a[j + ] = wk1r * x0r - wk1i * x0i;
a[j + ] = wk1r * x0i + wk1i * x0r;
x0r = x1r + x3i;
x0i = x1i - x3r;
a[j + ] = wk3r * x0r - wk3i * x0i;
a[j + ] = wk3r * x0i + wk3i * x0r;
wk1r = rdft_w[k2 + ];
wk1i = rdft_w[k2 + ];
wk3r = rdft_wk3ri_second[k1 + ];
wk3i = rdft_wk3ri_second[k1 + ];
x0r = a[j + ] + a[j + ];
x0i = a[j + ] + a[j + ];
x1r = a[j + ] - a[j + ];
x1i = a[j + ] - a[j + ];
x2r = a[j + ] + a[j + ];
x2i = a[j + ] + a[j + ];
x3r = a[j + ] - a[j + ];
x3i = a[j + ] - a[j + ];
a[j + ] = x0r + x2r;
a[j + ] = x0i + x2i;
x0r -= x2r;
x0i -= x2i;
a[j + ] = -wk2i * x0r - wk2r * x0i;
a[j + ] = -wk2i * x0i + wk2r * x0r;
x0r = x1r - x3i;
x0i = x1i + x3r;
a[j + ] = wk1r * x0r - wk1i * x0i;
a[j + ] = wk1r * x0i + wk1i * x0r;
x0r = x1r + x3i;
x0i = x1i - x3r;
a[j + ] = wk3r * x0r - wk3i * x0i;
a[j + ] = wk3r * x0i + wk3i * x0r;
}
} static void cftmdl_128_C(float* a) {
const int l = ;
const int n = ;
const int m = ;
int j0, j1, j2, j3, k, k1, k2, m2;
float wk1r, wk1i, wk2r, wk2i, wk3r, wk3i;
float x0r, x0i, x1r, x1i, x2r, x2i, x3r, x3i; for (j0 = ; j0 < l; j0 += ) {
j1 = j0 + ;
j2 = j0 + ;
j3 = j0 + ;
x0r = a[j0 + ] + a[j1 + ];
x0i = a[j0 + ] + a[j1 + ];
x1r = a[j0 + ] - a[j1 + ];
x1i = a[j0 + ] - a[j1 + ];
x2r = a[j2 + ] + a[j3 + ];
x2i = a[j2 + ] + a[j3 + ];
x3r = a[j2 + ] - a[j3 + ];
x3i = a[j2 + ] - a[j3 + ];
a[j0 + ] = x0r + x2r;
a[j0 + ] = x0i + x2i;
a[j2 + ] = x0r - x2r;
a[j2 + ] = x0i - x2i;
a[j1 + ] = x1r - x3i;
a[j1 + ] = x1i + x3r;
a[j3 + ] = x1r + x3i;
a[j3 + ] = x1i - x3r;
}
wk1r = rdft_w[];
for (j0 = m; j0 < l + m; j0 += ) {
j1 = j0 + ;
j2 = j0 + ;
j3 = j0 + ;
x0r = a[j0 + ] + a[j1 + ];
x0i = a[j0 + ] + a[j1 + ];
x1r = a[j0 + ] - a[j1 + ];
x1i = a[j0 + ] - a[j1 + ];
x2r = a[j2 + ] + a[j3 + ];
x2i = a[j2 + ] + a[j3 + ];
x3r = a[j2 + ] - a[j3 + ];
x3i = a[j2 + ] - a[j3 + ];
a[j0 + ] = x0r + x2r;
a[j0 + ] = x0i + x2i;
a[j2 + ] = x2i - x0i;
a[j2 + ] = x0r - x2r;
x0r = x1r - x3i;
x0i = x1i + x3r;
a[j1 + ] = wk1r * (x0r - x0i);
a[j1 + ] = wk1r * (x0r + x0i);
x0r = x3i + x1r;
x0i = x3r - x1i;
a[j3 + ] = wk1r * (x0i - x0r);
a[j3 + ] = wk1r * (x0i + x0r);
}
k1 = ;
m2 = * m;
for (k = m2; k < n; k += m2) {
k1 += ;
k2 = * k1;
wk2r = rdft_w[k1 + ];
wk2i = rdft_w[k1 + ];
wk1r = rdft_w[k2 + ];
wk1i = rdft_w[k2 + ];
wk3r = rdft_wk3ri_first[k1 + ];
wk3i = rdft_wk3ri_first[k1 + ];
for (j0 = k; j0 < l + k; j0 += ) {
j1 = j0 + ;
j2 = j0 + ;
j3 = j0 + ;
x0r = a[j0 + ] + a[j1 + ];
x0i = a[j0 + ] + a[j1 + ];
x1r = a[j0 + ] - a[j1 + ];
x1i = a[j0 + ] - a[j1 + ];
x2r = a[j2 + ] + a[j3 + ];
x2i = a[j2 + ] + a[j3 + ];
x3r = a[j2 + ] - a[j3 + ];
x3i = a[j2 + ] - a[j3 + ];
a[j0 + ] = x0r + x2r;
a[j0 + ] = x0i + x2i;
x0r -= x2r;
x0i -= x2i;
a[j2 + ] = wk2r * x0r - wk2i * x0i;
a[j2 + ] = wk2r * x0i + wk2i * x0r;
x0r = x1r - x3i;
x0i = x1i + x3r;
a[j1 + ] = wk1r * x0r - wk1i * x0i;
a[j1 + ] = wk1r * x0i + wk1i * x0r;
x0r = x1r + x3i;
x0i = x1i - x3r;
a[j3 + ] = wk3r * x0r - wk3i * x0i;
a[j3 + ] = wk3r * x0i + wk3i * x0r;
}
wk1r = rdft_w[k2 + ];
wk1i = rdft_w[k2 + ];
wk3r = rdft_wk3ri_second[k1 + ];
wk3i = rdft_wk3ri_second[k1 + ];
for (j0 = k + m; j0 < l + (k + m); j0 += ) {
j1 = j0 + ;
j2 = j0 + ;
j3 = j0 + ;
x0r = a[j0 + ] + a[j1 + ];
x0i = a[j0 + ] + a[j1 + ];
x1r = a[j0 + ] - a[j1 + ];
x1i = a[j0 + ] - a[j1 + ];
x2r = a[j2 + ] + a[j3 + ];
x2i = a[j2 + ] + a[j3 + ];
x3r = a[j2 + ] - a[j3 + ];
x3i = a[j2 + ] - a[j3 + ];
a[j0 + ] = x0r + x2r;
a[j0 + ] = x0i + x2i;
x0r -= x2r;
x0i -= x2i;
a[j2 + ] = -wk2i * x0r - wk2r * x0i;
a[j2 + ] = -wk2i * x0i + wk2r * x0r;
x0r = x1r - x3i;
x0i = x1i + x3r;
a[j1 + ] = wk1r * x0r - wk1i * x0i;
a[j1 + ] = wk1r * x0i + wk1i * x0r;
x0r = x1r + x3i;
x0i = x1i - x3r;
a[j3 + ] = wk3r * x0r - wk3i * x0i;
a[j3 + ] = wk3r * x0i + wk3i * x0r;
}
}
} static void cftfsub_128(float* a) {
int j, j1, j2, j3, l;
float x0r, x0i, x1r, x1i, x2r, x2i, x3r, x3i; cft1st_128(a);
cftmdl_128(a);
l = ;
for (j = ; j < l; j += ) {
j1 = j + l;
j2 = j1 + l;
j3 = j2 + l;
x0r = a[j] + a[j1];
x0i = a[j + ] + a[j1 + ];
x1r = a[j] - a[j1];
x1i = a[j + ] - a[j1 + ];
x2r = a[j2] + a[j3];
x2i = a[j2 + ] + a[j3 + ];
x3r = a[j2] - a[j3];
x3i = a[j2 + ] - a[j3 + ];
a[j] = x0r + x2r;
a[j + ] = x0i + x2i;
a[j2] = x0r - x2r;
a[j2 + ] = x0i - x2i;
a[j1] = x1r - x3i;
a[j1 + ] = x1i + x3r;
a[j3] = x1r + x3i;
a[j3 + ] = x1i - x3r;
}
} static void cftbsub_128(float* a) {
int j, j1, j2, j3, l;
float x0r, x0i, x1r, x1i, x2r, x2i, x3r, x3i; cft1st_128(a);
cftmdl_128(a);
l = ; for (j = ; j < l; j += ) {
j1 = j + l;
j2 = j1 + l;
j3 = j2 + l;
x0r = a[j] + a[j1];
x0i = -a[j + ] - a[j1 + ];
x1r = a[j] - a[j1];
x1i = -a[j + ] + a[j1 + ];
x2r = a[j2] + a[j3];
x2i = a[j2 + ] + a[j3 + ];
x3r = a[j2] - a[j3];
x3i = a[j2 + ] - a[j3 + ];
a[j] = x0r + x2r;
a[j + ] = x0i - x2i;
a[j2] = x0r - x2r;
a[j2 + ] = x0i + x2i;
a[j1] = x1r - x3i;
a[j1 + ] = x1i - x3r;
a[j3] = x1r + x3i;
a[j3 + ] = x1i + x3r;
}
} static void rftfsub_128_C(float* a) {
const float* c = rdft_w + ;
int j1, j2, k1, k2;
float wkr, wki, xr, xi, yr, yi; for (j1 = , j2 = ; j2 < ; j1 += , j2 += ) {
k2 = - j2;
k1 = - j1;
wkr = 0.5f - c[k1];
wki = c[j1];
xr = a[j2 + ] - a[k2 + ];
xi = a[j2 + ] + a[k2 + ];
yr = wkr * xr - wki * xi;
yi = wkr * xi + wki * xr;
a[j2 + ] -= yr;
a[j2 + ] -= yi;
a[k2 + ] += yr;
a[k2 + ] -= yi;
}
} static void rftbsub_128_C(float* a) {
const float* c = rdft_w + ;
int j1, j2, k1, k2;
float wkr, wki, xr, xi, yr, yi; a[] = -a[];
for (j1 = , j2 = ; j2 < ; j1 += , j2 += ) {
k2 = - j2;
k1 = - j1;
wkr = 0.5f - c[k1];
wki = c[j1];
xr = a[j2 + ] - a[k2 + ];
xi = a[j2 + ] + a[k2 + ];
yr = wkr * xr + wki * xi;
yi = wkr * xi - wki * xr;
a[j2 + ] = a[j2 + ] - yr;
a[j2 + ] = yi - a[j2 + ];
a[k2 + ] = yr + a[k2 + ];
a[k2 + ] = yi - a[k2 + ];
}
a[] = -a[];
} void aec_rdft_forward_128(float* a) {
float xi;
bitrv2_128(a);
cftfsub_128(a);
rftfsub_128(a);
xi = a[] - a[];
a[] += a[];
a[] = xi;
} void aec_rdft_inverse_128(float* a) {
a[] = 0.5f * (a[] - a[]);
a[] -= a[];
rftbsub_128(a);
bitrv2_128(a);
cftbsub_128(a);
} // code path selection
rft_sub_128_t cft1st_128;
rft_sub_128_t cftmdl_128;
rft_sub_128_t rftfsub_128;
rft_sub_128_t rftbsub_128; void aec_rdft_init(void) {
cft1st_128 = cft1st_128_C;
cftmdl_128 = cftmdl_128_C;
rftfsub_128 = rftfsub_128_C;
rftbsub_128 = rftbsub_128_C;
#if defined(WEBRTC_ARCH_X86_FAMILY)
if (WebRtc_GetCPUInfo(kSSE2)) {
aec_rdft_init_sse2();
}
#endif
// init library constants.
makewt_32();
makect_32();
}
webRTC中回声消除(AEC)模块编译时aec_rdft.c文件报错:的更多相关文章
- Maven构建项目时index.jsp文件报错
错误为:The superclass "javax.servlet.http.HttpServlet" was not found on the Java Build Path 原 ...
- Eclipse导入maven项目时,pom-xml文件报错处理方法
报错如下: Cannot read lifecycle mapping metadata for artifact org.apache.maven.plugins 解决方法: 出现该错误是因为jar ...
- webrtc 的回声抵消(aec、aecm)算法简介(转)
webrtc 的回声抵消(aec.aecm)算法简介 webrtc 的回声抵消(aec.aecm)算法主要包括以下几个重要模块:1.回声时延估计 2.NLMS(归一化最小均方自适应算法) ...
- 拓展 - Webrtc 的回声抵消(aec、aecm)算法简介
webrtc 的回声抵消(aec.aecm)算法简介 原文链接:丢失.不好意思 webrtc 的回声抵消(aec.aecm)算法主要包括以下几个重要模块:1.回声时延估计 2.NLMS( ...
- C#编译器优化那点事 c# 如果一个对象的值为null,那么它调用扩展方法时为甚么不报错 webAPI 控制器(Controller)太多怎么办? .NET MVC项目设置包含Areas中的页面为默认启动页 (五)Net Core使用静态文件 学习ASP.NET Core Razor 编程系列八——并发处理
C#编译器优化那点事 使用C#编写程序,给最终用户的程序,是需要使用release配置的,而release配置和debug配置,有一个关键区别,就是release的编译器优化默认是启用的.优化代码 ...
- Python模块学习之xlrd 读取Excel时传入formatting_info=True报错:NotImplementedError: formatting_info=True not yet implemented
问题:xlrd读取Excel时传入 formatting_info=True 报错 之前我们使用读取xls文件的时候都是使用的xlrd库,但是这个库只能操作 .xls格式,对于后来的 .xlsx的版本 ...
- python踩坑系列之导入包时下划红线及报错“No module named”问题
python踩坑系列之导入包时下划红线及报错“No module named”问题 使用pycharm编写Python时,自己写了一个包(commontool),在同级另一个路径下(fileshand ...
- 安装php时,make步骤报错make: *** [ext/gd/gd.lo] Error 1
安装PHP时,make步骤报错make: *** [ext/gd/gd.lo] Error 1 /usr/local/src/LAMP+memcahed+catci/php-5.4.0/ext/gd/ ...
- php中读取中文文件夹及文件报错
php读取时出现中文乱码 一般php输出中出现中文乱码我们可用 header ('content:text/html;charset="utf-8"'); php中读取中文文件夹及 ...
随机推荐
- 解决pjax加载页面不执行js插件的问题
个人博客 地址:http://www.wenhaofan.com/article/20180913220425 介绍 在使用jquery.pjax的时候发现加载页面时不会执行其中的layui以及jqu ...
- .gitignore文件说明-git提交时可忽略的文件
在我们平时做项目时,总有一些文件不想提交到服务器的版本管理上 这时就要设置相应的忽略规则,来忽略这些文件的提交 规则 作用/mtk 过滤整个文件夹*.zip 过滤所有.zip文件/mtk/do.c 过 ...
- RN开发-JSX基础语法
1.环境 react.js react-dom.js browser.min.js(解码器) 2.载入方式 内联.外联 ...
- 执行python程序的方式
1.交互器 程序不能永久保存 主要用于简单的语法测试相关 2.文件执行
- Python之二:基础知识
1.常量: 1.1.数:5.1.23.9.25e-3 4种类型的数——整数.长整数.浮点数和复数 2是一个整数的例子. 长整数不过是大一些的整数. 3.23和52.3E-4是浮点数的例子.E标记表示1 ...
- api接口出现Provisional headers are shown,
问题分析:根据反馈可以知道,发起请求,但服务器未及时响应,原因可能是超时,或者被拦截
- pandas包学习笔记
目录 zip Importing & exporting data Plotting with pandas Visual exploratory data analysis 折线图 散点图 ...
- 忘记本地MySQL数据库密码的解决方法
平台:win7 1.打开cmd窗口,进入 MySQL的安装目录. 2.停止MySQL的服务.已经停止了. 右键MySQL,看到启动是可点击的,证明MySQL服务已停止运行. 3.将root用户对数据库 ...
- vs2010安装
1.网盘上2010安装包可用,先下载到电脑上,然后找到setup文件,安装即可 2.下载插件,基本的文本对齐,tab键补齐等功能 3.测试hello world程序 4.出现的问题 一个文件夹下有多个 ...
- 安装proxmox VE(PVE)教程
proxmox VE,又叫PVE,全称是 Proxmox Virtual Environment 官网地址:https://www.proxmox.com/en/ 1)在官网下载PVE最新镜像,笔者下 ...