OSDN Git Service

First commitment for the BlackTank LPC1769.
[blacktank/blacktank.git] / audio_effect.c
1 /**
2  * @file audio_effect.c
3  * @brief コーデックから受け取ったデータに対して、実際の信号処理を施す。
4  * @date 2011/02/19
5  * @author: Takemasa Nakamura (Modified: Shinichiro Nakamura)
6  */
7
8 #include "i2s_subsystem.h"
9 #include "audio_effect.h"
10
11 void audio_effect_through(
12         const effect_param_t *param,
13         const AUDIOSAMPLE *in_left,
14         const AUDIOSAMPLE *in_right,
15         AUDIOSAMPLE *out_left,
16         AUDIOSAMPLE *out_right)
17 {
18     const int var0 = param->var0;
19     const int var1 = param->var1;
20     *out_left = ((*in_left) >> 10) * var0;
21     *out_right = ((*in_right) >> 10) * var1;
22 }
23
24 /**
25  * オーディオエフェクト(ボーカルキャンセル)を実行する。
26  *
27  * @param param エフェクトパラメータ。
28  * @param in_left 入力データ。(L)
29  * @param in_right 入力データ。(R)
30  * @param out_left 出力データ。(L)
31  * @param out_right 出力データ。(R)
32  */
33 void audio_effect_vocal_cancel(
34         const effect_param_t *param,
35         const AUDIOSAMPLE *in_left,
36         const AUDIOSAMPLE *in_right,
37         AUDIOSAMPLE *out_left,
38         AUDIOSAMPLE *out_right)
39 {
40     const int var0 = param->var0;
41     const int var1 = param->var1;
42     const AUDIOSAMPLE mix = ((*in_left) - (*in_right)) >> 1;
43     *out_left = (mix >> 10) * var0;
44     *out_right = (mix >> 10) * var1;
45 }
46
47 /**
48  * オーディオエフェクト(FIR: Finite Impulse Response)を実行する。
49  *
50  * @param param エフェクトパラメータ。
51  * @param in_left 入力データ。(L)
52  * @param in_right 入力データ。(R)
53  * @param out_left 出力データ。(L)
54  * @param out_right 出力データ。(R)
55  */
56 void audio_effect_fir(
57         const effect_param_t *param,
58         const AUDIOSAMPLE *in_left,
59         const AUDIOSAMPLE *in_right,
60         AUDIOSAMPLE *out_left,
61         AUDIOSAMPLE *out_right)
62 {
63     /** @todo FIRフィルタを挿入する。 */
64 }
65
66 /**
67  * オーディオエフェクト(IIR: Infinite Impulse Response)を実行する。
68  *
69  * @param param エフェクトパラメータ。
70  * @param in_left 入力データ。(L)
71  * @param in_right 入力データ。(R)
72  * @param out_left 出力データ。(L)
73  * @param out_right 出力データ。(R)
74  */
75 void audio_effect_iir(
76         const effect_param_t *param,
77         const AUDIOSAMPLE *in_left,
78         const AUDIOSAMPLE *in_right,
79         AUDIOSAMPLE *out_left,
80         AUDIOSAMPLE *out_right)
81 {
82     /** @todo IIRフィルタを挿入する。 */
83 }
84