• R/O
  • HTTP
  • SSH
  • HTTPS

Commit

Tags
Keine Tags

Frequently used words (click to add to your profile)

javac++androidlinuxc#windowsobjective-ccocoa誰得qtpythonphprubygameguibathyscaphec計画中(planning stage)翻訳omegatframeworktwitterdomtestvb.netdirectxゲームエンジンbtronarduinopreviewer

Uzumeを正式リリースするまでの一時的な保管場所


Commit MetaInfo

Revisiona7e7ef0194ec6d60a64036bbe5d6e7a48b3e3d16 (tree)
Zeit2013-01-03 13:48:25
Autorsuikan <suikan@user...>
Commitersuikan

Log Message

フランジャーを実装した

Ändern Zusammenfassung

Diff

--- a/uzume_prototype/Makefile
+++ b/uzume_prototype/Makefile
@@ -116,10 +116,10 @@ UTASK_CFG = $(UNAME).cfg
116116 UTASK_DIR = $(SRCDIR)/library
117117 UTASK_ASMOBJS =
118118 ifdef USE_CXX
119- UTASK_CXXOBJS = $(UNAME).o
119+ UTASK_CXXOBJS = $(UNAME).o flanger.o
120120 UTASK_COBJS =
121121 else
122- UTASK_COBJS = $(UNAME).o
122+ UTASK_COBJS = $(UNAME).o flanger.o
123123 endif
124124 UTASK_CFLAGS =
125125 UTASK_LIBS =
--- a/uzume_prototype/Makefile.depend
+++ b/uzume_prototype/Makefile.depend
@@ -797,6 +797,20 @@ uzume_app.o: kernel/include/kernel.h kernel/include/t_services.h \
797797 /opt/uClinux2011R1RC4/bfin-elf/bin/../lib/gcc/bfin-elf/4.3.5/include/stddef.h \
798798 kernel/config/blackfin/bsp_amakusa592/sys_defs.h \
799799 kernel/include/t_stddef.h
800+flanger.o: \
801+ /opt/uClinux2011R1RC4/bfin-elf/bin/../lib/gcc/bfin-elf/4.3.5/../../../../bfin-elf/include/gcc.h \
802+ /opt/uClinux2011R1RC4/bfin-elf/bin/../lib/gcc/bfin-elf/4.3.5/../../../../bfin-elf/include/r2x16_typedef.h \
803+ /opt/uClinux2011R1RC4/bfin-elf/bin/../lib/gcc/bfin-elf/4.3.5/../../../../bfin-elf/include/fract2float_conv.h \
804+ /opt/uClinux2011R1RC4/bfin-elf/bin/../lib/gcc/bfin-elf/4.3.5/../../../../bfin-elf/include/fr2x16_typedef.h \
805+ /opt/uClinux2011R1RC4/bfin-elf/bin/../lib/gcc/bfin-elf/4.3.5/../../../../bfin-elf/include/fract_math.h \
806+ /opt/uClinux2011R1RC4/bfin-elf/bin/../lib/gcc/bfin-elf/4.3.5/../../../../bfin-elf/include/raw_typedef.h \
807+ /opt/uClinux2011R1RC4/bfin-elf/bin/../lib/gcc/bfin-elf/4.3.5/../../../../bfin-elf/include/r2x16_base.h \
808+ /opt/uClinux2011R1RC4/bfin-elf/bin/../lib/gcc/bfin-elf/4.3.5/../../../../bfin-elf/include/fract.h \
809+ /opt/uClinux2011R1RC4/bfin-elf/bin/../lib/gcc/bfin-elf/4.3.5/../../../../bfin-elf/include/fr2x16_math.h \
810+ /opt/uClinux2011R1RC4/bfin-elf/bin/../lib/gcc/bfin-elf/4.3.5/../../../../bfin-elf/include/fr2x16_base.h \
811+ flanger.h \
812+ /opt/uClinux2011R1RC4/bfin-elf/bin/../lib/gcc/bfin-elf/4.3.5/../../../../bfin-elf/include/fract_typedef.h \
813+ flanger.c
800814 timer.o: \
801815 /opt/uClinux2011R1RC4/bfin-elf/bin/../lib/gcc/bfin-elf/4.3.5/../../../../bfin-elf/include/defBF59x_base.h \
802816 kernel/include/kernel.h kernel/include/timer.h \
--- a/uzume_prototype/configure-project
+++ b/uzume_prototype/configure-project
@@ -3,6 +3,6 @@ cd kernel/cfg
33 make depend
44 make
55 popd
6-kernel/configure -C blackfin -S bsp_amakusa592 -A uzume_app
6+kernel/configure -C blackfin -S bsp_amakusa592 -A uzume_app -U "flanger.o"
77 make depend
88 make clean
--- /dev/null
+++ b/uzume_prototype/flanger.c
@@ -0,0 +1,51 @@
1+/*
2+ * flanger.c
3+ *
4+ * Created on: 2013/01/03
5+ * Author: takemasa
6+ */
7+
8+#include "flanger.h"
9+
10+void flanger_init( struct TFLANGER * flanger )
11+{
12+ int i;
13+
14+ for ( i=0; i< FLANGER_MAX_DELAY; i++)
15+ flanger->delayline[i] = 0;
16+ flanger->delayhead = 0;
17+
18+}
19+
20+/**
21+ * @brief ディレイライン実装用の内部関数
22+ * @param flanger フランジャー実体
23+ * @param sample ディレイラインに入力する最新サンプル
24+ * @param delay 出力を取り出す位置 [0 .. 1)
25+ * @param feedback
26+ * @param mix
27+ * @return delayで指示され対地にあるサンプル
28+ * @details
29+ */
30+fract32 flanger_process( struct TFLANGER * flanger, fract32 sample, fract32 delay, fract32 feedback, fract32 mix)
31+
32+{
33+ int delay_pos;
34+ fract32 delayed_sample;
35+ // 固定小数値のディレイ量を遅延インデックスに変換する
36+ delay_pos = mult_fr1x32x32( delay, FLANGER_MAX_DELAY) + flanger->delayhead;
37+ // 循環バッファのポインタにするための丸め
38+ delay_pos = ( delay_pos >= FLANGER_MAX_DELAY ) ? delay_pos - FLANGER_MAX_DELAY : delay_pos;
39+ // 遅延バッファから遅延値を取り出す
40+ delayed_sample = flanger->delayline[delay_pos];
41+
42+ // サンプル挿入点を更新
43+ flanger->delayhead--;
44+ if ( flanger->delayhead < 0)
45+ flanger->delayhead = FLANGER_MAX_DELAY -1 ;
46+
47+ flanger->delayline[flanger->delayhead] = add_fr1x32( mult_fr1x32x32( sample, feedback ), delayed_sample );
48+
49+ return add_fr1x32( mult_fr1x32x32( delayed_sample, mix), sample);
50+
51+}
--- a/uzume_prototype/flanger.h
+++ b/uzume_prototype/flanger.h
@@ -10,22 +10,29 @@
1010
1111 #include <fract.h>
1212
13-#define FLANGER_MAX_DELAY
13+#define FLANGER_MAX_DELAY 2400
1414
15-struct {
15+struct TFLANGER{
1616 fract32 delayline[FLANGER_MAX_DELAY];
1717 int delayhead;
18-}TFlanger;
18+};
1919
2020 /**
2121 * @brief フランジャーの初期化
22- * @param franger
22+ * @param franger 初期化したいflangerへのポインタ
2323 */
24-void flanger_init(struct TFlanger * flanger );
24+void flanger_init(struct TFLANGER * flanger );
2525
2626 /**
27- *
27+ * @brief ディレイライン実装用の内部関数
28+ * @param flanger フランジャー実体
29+ * @param sample ディレイラインに入力する最新サンプル
30+ * @param delay ディレイラインの出力を取り出す位置 [0 .. 1)
31+ * @param feedback ディレイライン出力から入力へのフィードバック量
32+ * @param mix ディレイライン出力と入力サンプルのミックス係数
33+ * @return delayで指示され対地にあるサンプル
34+ * @details
2835 */
29-fract32 flanter_process( struct TFlanger * flanger, fract32 sample, fract32 feedback, fract32 mix);
36+fract32 flanger_process( struct TFLANGER * flanger, fract32 sample, fract32 delay, fract32 feedback, fract32 mix);
3037
3138 #endif /* FLANGER_H_ */
--- a/uzume_prototype/uzume_callback.c
+++ b/uzume_prototype/uzume_callback.c
@@ -8,6 +8,10 @@
88 #include "kernel_id.h"
99 #include "uzume.h"
1010 #include "i2s_subsystem.h"
11+#include "flanger.h"
12+
13+struct TFLANGER flanger;
14+
1115 /**
1216 * @brief 信号処理初期化関数
1317 * @ingroup AUDIO
@@ -18,6 +22,8 @@
1822 void init_audio( void )
1923 {
2024 /* ブロックサイズは UZUME_BLOCKSIZE マクロを使用すればわかる */
25+
26+ flanger_init( &flanger );
2127 }
2228 /**
2329 * @brief 信号処理関数
@@ -50,10 +56,16 @@ void process_audio(
5056 // ch 0 のボリューム値(32bit)
5157 volume = get_volume(0)>>15;
5258
53- // count個のサンプルすべてを処理する
59+ // UZUME_BLOCKSIZE個のサンプルすべてを処理する
5460 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;
61+ output_left[sample] = output_right[sample] =
62+ flanger_process(
63+ & flanger, // flanger entity
64+ add_fr1x32( input_left[sample], input_right[sample] ), // input
65+ get_volume(0), // delay
66+ get_volume(1), // feedback
67+ get_volume(2) // mix
68+ );
5769 }
5870 }
5971