Skip to content
GitLab
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
Stefan Strogin
flac
Commits
b4c13d9c
Commit
b4c13d9c
authored
Apr 25, 2006
by
Josh Coalson
Browse files
*** empty log message ***
parent
6be6fe6d
Changes
2
Hide whitespace changes
Inline
Side-by-side
src/libFLAC/include/private/window.h
0 → 100644
View file @
b4c13d9c
/* libFLAC - Free Lossless Audio Codec library
* Copyright (C) 2006 Josh Coalson
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* - Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* - Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* - Neither the name of the Xiph.org Foundation nor the names of its
* contributors may be used to endorse or promote products derived from
* this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#ifndef FLAC__PRIVATE__WINDOW_H
#define FLAC__PRIVATE__WINDOW_H
#ifdef HAVE_CONFIG_H
#include
<config.h>
#endif
#include
"private/float.h"
#include
"FLAC/format.h"
#ifndef FLAC__INTEGER_ONLY_LIBRARY
/*
* FLAC__window_*()
* --------------------------------------------------------------------
* Calculates window coefficients according to different apodization
* functions.
*
* OUT window[0,L-1]
* IN L (number of points in window)
*/
void
FLAC__window_bartlett
(
FLAC__real
*
window
,
const
FLAC__int32
L
);
void
FLAC__window_bartlett_hann
(
FLAC__real
*
window
,
const
FLAC__int32
L
);
void
FLAC__window_blackman
(
FLAC__real
*
window
,
const
FLAC__int32
L
);
void
FLAC__window_blackman_harris_4term_92db_sidelobe
(
FLAC__real
*
window
,
const
FLAC__int32
L
);
void
FLAC__window_connes
(
FLAC__real
*
window
,
const
FLAC__int32
L
);
void
FLAC__window_flattop
(
FLAC__real
*
window
,
const
FLAC__int32
L
);
void
FLAC__window_gauss
(
FLAC__real
*
window
,
const
FLAC__int32
L
,
const
FLAC__real
stddev
);
/* 0.0 < stddev <= 0.5 */
void
FLAC__window_hamming
(
FLAC__real
*
window
,
const
FLAC__int32
L
);
void
FLAC__window_hann
(
FLAC__real
*
window
,
const
FLAC__int32
L
);
void
FLAC__window_kaiser_bessel
(
FLAC__real
*
window
,
const
FLAC__int32
L
);
void
FLAC__window_nuttall
(
FLAC__real
*
window
,
const
FLAC__int32
L
);
void
FLAC__window_rectangle
(
FLAC__real
*
window
,
const
FLAC__int32
L
);
void
FLAC__window_triangle
(
FLAC__real
*
window
,
const
FLAC__int32
L
);
void
FLAC__window_tukey
(
FLAC__real
*
window
,
const
FLAC__int32
L
,
const
FLAC__real
p
);
void
FLAC__window_welch
(
FLAC__real
*
window
,
const
FLAC__int32
L
);
#endif
/* !defined FLAC__INTEGER_ONLY_LIBRARY */
#endif
src/libFLAC/window.c
0 → 100644
View file @
b4c13d9c
/* libFLAC - Free Lossless Audio Codec library
* Copyright (C) 2006 Josh Coalson
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* - Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* - Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* - Neither the name of the Xiph.org Foundation nor the names of its
* contributors may be used to endorse or promote products derived from
* this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include
<math.h>
#include
"FLAC/assert.h"
#include
"FLAC/format.h"
#include
"private/window.h"
#ifndef FLAC__INTEGER_ONLY_LIBRARY
void
FLAC__window_bartlett
(
FLAC__real
*
window
,
const
FLAC__int32
L
)
{
const
FLAC__int32
N
=
L
-
1
;
FLAC__int32
n
;
if
(
L
&
1
)
{
for
(
n
=
0
;
n
<=
N
/
2
;
n
++
)
window
[
n
]
=
2
.
0
f
*
n
/
(
float
)
N
;
for
(;
n
<=
N
;
n
++
)
window
[
n
]
=
2
.
0
f
-
2
.
0
f
*
n
/
(
float
)
N
;
}
else
{
for
(
n
=
0
;
n
<=
L
/
2
-
1
;
n
++
)
window
[
n
]
=
2
.
0
f
*
n
/
(
float
)
N
;
for
(;
n
<=
N
;
n
++
)
window
[
n
]
=
2
.
0
f
-
2
.
0
f
*
(
N
-
n
)
/
(
float
)
N
;
}
}
void
FLAC__window_bartlett_hann
(
FLAC__real
*
window
,
const
FLAC__int32
L
)
{
const
FLAC__int32
N
=
L
-
1
;
FLAC__int32
n
;
for
(
n
=
0
;
n
<
L
;
n
++
)
window
[
n
]
=
0
.
62
f
-
0
.
48
f
*
fabs
((
float
)
n
/
(
float
)
N
+
0
.
5
f
)
+
0
.
38
f
*
cos
(
2
.
0
f
*
M_PI
*
((
float
)
n
/
(
float
)
N
+
0
.
5
f
));
}
void
FLAC__window_blackman
(
FLAC__real
*
window
,
const
FLAC__int32
L
)
{
const
FLAC__int32
N
=
L
-
1
;
FLAC__int32
n
;
for
(
n
=
0
;
n
<
L
;
n
++
)
window
[
n
]
=
0
.
42
f
-
0
.
5
f
*
cos
(
2
.
0
f
*
M_PI
*
n
/
N
)
+
0
.
08
f
*
cos
(
4
.
0
f
*
M_PI
*
n
/
N
);
}
/* 4-term -92dB side-lobe */
void
FLAC__window_blackman_harris_4term_92db_sidelobe
(
FLAC__real
*
window
,
const
FLAC__int32
L
)
{
const
FLAC__int32
N
=
L
-
1
;
FLAC__int32
n
;
for
(
n
=
0
;
n
<=
N
;
n
++
)
window
[
n
]
=
0
.
35875
f
-
0
.
48829
f
*
cos
(
2
.
0
f
*
M_PI
*
n
/
N
)
+
0
.
14128
f
*
cos
(
4
.
0
f
*
M_PI
*
n
/
N
)
-
0
.
0116
8
f
*
cos
(
6
.
0
f
*
M_PI
*
n
/
N
);
}
void
FLAC__window_connes
(
FLAC__real
*
window
,
const
FLAC__int32
L
)
{
const
FLAC__int32
N
=
L
-
1
;
const
double
N2
=
(
double
)
N
/
2
.;
FLAC__int32
n
;
for
(
n
=
0
;
n
<=
N
;
n
++
)
{
double
k
=
((
double
)
n
-
N2
)
/
N2
;
k
=
1
.
0
f
-
k
*
k
;
window
[
n
]
=
k
*
k
;
}
}
void
FLAC__window_flattop
(
FLAC__real
*
window
,
const
FLAC__int32
L
)
{
const
FLAC__int32
N
=
L
-
1
;
FLAC__int32
n
;
for
(
n
=
0
;
n
<
L
;
n
++
)
window
[
n
]
=
1
.
0
f
-
1
.
93
f
*
cos
(
2
.
0
f
*
M_PI
*
n
/
N
)
+
1
.
29
f
*
cos
(
4
.
0
f
*
M_PI
*
n
/
N
)
-
0
.
388
f
*
cos
(
6
.
0
f
*
M_PI
*
n
/
N
)
+
0
.
0322
f
*
cos
(
8
.
0
f
*
M_PI
*
n
/
N
);
}
void
FLAC__window_gauss
(
FLAC__real
*
window
,
const
FLAC__int32
L
,
const
FLAC__real
stddev
)
{
const
FLAC__int32
N
=
L
-
1
;
const
double
N2
=
(
double
)
N
/
2
.;
FLAC__int32
n
;
for
(
n
=
0
;
n
<=
N
;
n
++
)
{
const
double
k
=
((
double
)
n
-
N2
)
/
(
stddev
*
N2
);
window
[
n
]
=
exp
(
-
0
.
5
f
*
k
*
k
);
}
}
void
FLAC__window_hamming
(
FLAC__real
*
window
,
const
FLAC__int32
L
)
{
const
FLAC__int32
N
=
L
-
1
;
FLAC__int32
n
;
for
(
n
=
0
;
n
<
L
;
n
++
)
window
[
n
]
=
0
.
54
f
-
0
.
46
f
*
cos
(
2
.
0
f
*
M_PI
*
n
/
N
);
}
void
FLAC__window_hann
(
FLAC__real
*
window
,
const
FLAC__int32
L
)
{
const
FLAC__int32
N
=
L
-
1
;
FLAC__int32
n
;
for
(
n
=
0
;
n
<
L
;
n
++
)
window
[
n
]
=
0
.
5
f
-
0
.
5
f
*
cos
(
2
.
0
f
*
M_PI
*
n
/
N
);
}
void
FLAC__window_kaiser_bessel
(
FLAC__real
*
window
,
const
FLAC__int32
L
)
{
const
FLAC__int32
N
=
L
-
1
;
FLAC__int32
n
;
for
(
n
=
0
;
n
<
L
;
n
++
)
window
[
n
]
=
0
.
402
f
-
0
.
498
f
*
cos
(
2
.
0
f
*
M_PI
*
n
/
N
)
+
0
.
098
f
*
cos
(
4
.
0
f
*
M_PI
*
n
/
N
)
-
0
.
001
f
*
cos
(
6
.
0
f
*
M_PI
*
n
/
N
);
}
void
FLAC__window_nuttall
(
FLAC__real
*
window
,
const
FLAC__int32
L
)
{
const
FLAC__int32
N
=
L
-
1
;
FLAC__int32
n
;
for
(
n
=
0
;
n
<
L
;
n
++
)
window
[
n
]
=
0
.
3635819
f
-
0
.
4891775
f
*
cos
(
2
.
0
f
*
M_PI
*
n
/
N
)
+
0
.
1365995
f
*
cos
(
4
.
0
f
*
M_PI
*
n
/
N
)
-
0
.
0106411
f
*
cos
(
6
.
0
f
*
M_PI
*
n
/
N
);
}
void
FLAC__window_rectangle
(
FLAC__real
*
window
,
const
FLAC__int32
L
)
{
FLAC__int32
n
;
for
(
n
=
0
;
n
<
L
;
n
++
)
window
[
n
]
=
1
.
0
f
;
}
void
FLAC__window_triangle
(
FLAC__real
*
window
,
const
FLAC__int32
L
)
{
FLAC__int32
n
;
if
(
L
&
1
)
{
for
(
n
=
1
;
n
<=
L
+
1
/
2
;
n
++
)
window
[
n
-
1
]
=
2
.
0
f
*
n
/
((
float
)
L
+
1
.
0
f
);
for
(;
n
<=
L
;
n
++
)
window
[
n
-
1
]
=
-
(
float
)(
2
*
(
L
-
n
+
1
))
/
((
float
)
L
+
1
.
0
f
);
}
else
{
for
(
n
=
1
;
n
<=
L
/
2
;
n
++
)
window
[
n
-
1
]
=
2
.
0
f
*
n
/
(
float
)
L
;
for
(;
n
<=
L
;
n
++
)
window
[
n
-
1
]
=
((
float
)(
2
*
(
L
-
n
))
+
1
.
0
f
)
/
(
float
)
L
;
}
}
void
FLAC__window_tukey
(
FLAC__real
*
window
,
const
FLAC__int32
L
,
const
FLAC__real
p
)
{
if
(
p
<=
0
.
0
)
FLAC__window_rectangle
(
window
,
L
);
else
if
(
p
>=
1
.
0
)
FLAC__window_hann
(
window
,
L
);
else
{
const
FLAC__int32
Np
=
(
FLAC__int32
)(
p
/
2
.
0
f
*
L
)
-
1
;
FLAC__int32
n
;
/* start with rectangle... */
FLAC__window_rectangle
(
window
,
L
);
/* ...replace ends with hann */
if
(
Np
>
0
)
{
for
(
n
=
0
;
n
<=
Np
;
n
++
)
{
window
[
n
]
=
0
.
5
f
-
0
.
5
f
*
cos
(
M_PI
*
n
/
Np
);
window
[
L
-
Np
-
1
+
n
]
=
0
.
5
f
-
0
.
5
f
*
cos
(
M_PI
*
(
n
+
Np
)
/
Np
);
}
}
}
}
void
FLAC__window_welch
(
FLAC__real
*
window
,
const
FLAC__int32
L
)
{
const
FLAC__int32
N
=
L
-
1
;
const
double
N2
=
(
double
)
N
/
2
.;
FLAC__int32
n
;
for
(
n
=
0
;
n
<=
N
;
n
++
)
{
const
double
k
=
((
double
)
n
-
N2
)
/
N2
;
window
[
n
]
=
1
.
0
f
-
k
*
k
;
}
}
#endif
/* !defined FLAC__INTEGER_ONLY_LIBRARY */
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment