OSDN Git Service

AD7999によるボリューム読み取りのAPIを実装した
[uzume/uzume_bfin.git] / uzume_prototype / uzume_callback.c
1 /**
2  * @file uzume_callback.c
3  * @brief オーディオ信号処理を行うユーザー・コールバック
4  * 
5  */
6 #include "t_services.h"
7 #include "kernel_id.h"
8 #include "uzume.h"
9 #include "ad7999.h"
10 /**
11  * @brief 信号処理初期化関数
12  * @param count @ref codec_callback()に渡される引数配列のサイズ
13  * @ingroup AUDIO
14  * 
15  * この関数は@ref codec_callback()に先立って一度だけ呼び出される。フィルタの構築や
16  * 変数の初期化に使う。count引数の値は@ref codec_callback()のcount引数と同じである。
17  */
18 void init_audio( int count )
19 {
20
21 }
22 /**
23  * @brief 信号処理関数
24  * @param in0_left 左チャンネル0入力配列
25  * @param in0_right 右チャンネル0入力配列
26  * @param out0_left 左チャンネル0出力配列
27  * @param out0_right 右チャンネル0出力配列
28  * @ingroup AUDIO
29  * 
30  * ユーザーが信号処理を行う関数。オーディオ信号に同期して呼び出される。それぞれの引数は
31  * 引数countがあらわす個数だけデータを持っている。データは24bit符号付整数。32bit変数に
32  * 左詰で渡される。
33  * 
34  * この関数はステレオ信号を2系統あつかえる。すなわち、系統0と系統1がそれぞれ左右チャンネルを持つ。
35  * 
36  * この関数が使う資源で、あらかじめ初期化が必要なものは、@ref codec_callback_init()の
37  * 中で初期化しておく。
38  */
39 void process_audio( 
40                         AUDIOSAMPLE input_left[],
41                         AUDIOSAMPLE input_right[],
42                         AUDIOSAMPLE output_left[],
43                         AUDIOSAMPLE output_right[]
44                         )
45 {
46                 // ループ変数
47         int sample;
48         FX32 volume;
49
50             // ch 0 のボリューム値(32bit)
51         volume = get_volume(0)>>15;
52         
53                 // count個のサンプルすべてを処理する
54         for ( sample = 0; sample < UZUME_BLOCKSIZE; sample++ ){
55                 output_left[sample]  = (input_left[sample]>>16) *  volume;
56                 output_right[sample] = (input_right[sample]>>16) * volume;
57         }
58 }
59