• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            夜貓子

            夜貓子
            隨筆 - 5, 文章 - 1, 評(píng)論 - 1, 引用 - 0
            數(shù)據(jù)加載中……

            語(yǔ)音的前置處理(一)

            1.簡(jiǎn)介

            語(yǔ)音在采集和傳輸過(guò)程中,由于語(yǔ)音源的差異、信道的衰減、噪聲的干擾以及遠(yuǎn)近效應(yīng),導(dǎo)致信號(hào)幅度相差很大。所有在語(yǔ)音處理之前我們需要對(duì)語(yǔ)音數(shù)據(jù)進(jìn)行前置處理,包括預(yù)處理(AGC、VAD、回音消除)、重采樣和噪聲抑制。

            所有的代碼都是基于speex開(kāi)源庫(kù),具體內(nèi)容可以參考http://speex.org/。

            本開(kāi)發(fā)手冊(cè)暫時(shí)只提供AGC的接口和測(cè)試代碼,其他陸續(xù)添加進(jìn)來(lái)。

            2.接口說(shuō)明

            2.1  介紹

            預(yù)處理模塊包括自動(dòng)增益控制、靜音檢測(cè)和回音消除。以下是接口函數(shù),具體參考speex\ speex_preprocess.h。

             

            函數(shù)名稱(chēng)

            功能簡(jiǎn)介

            speex_preprocess_state_init

            創(chuàng)建預(yù)處理器

            speex_preprocess_state_destroy

            銷(xiāo)毀預(yù)處理器

            speex_preprocess_run

            處理一幀數(shù)據(jù)

            speex_preprocess

            處理一幀數(shù)據(jù)(廢棄的)

            speex_preprocess_estimate_update

            更新預(yù)處理器

            speex_preprocess_ctl

            設(shè)置和讀取預(yù)處理器的參數(shù)

             

            2.1.1  speex_preprocess_state_init

            函數(shù)原形

            SpeexPreprocessState *speex_preprocess_state_init(int frame_sizeint sampling_rate);

            功能

            創(chuàng)建預(yù)處理器

            參數(shù)

            Frmae_size   [in]每幀的大?。ńㄗh幀長(zhǎng)為20ms

            Sample_rate  [in]采樣率(支持8k、16k44k

            返回值

            成功返回預(yù)處理器指針,失敗返回NULL

            說(shuō)明

            加入是16k的語(yǔ)音數(shù)據(jù),幀長(zhǎng)20ms等于320個(gè)采樣

             

            2.1.2  speex_preprocess_state_destroy

            函數(shù)原形

            void speex_preprocess_state_destroy(SpeexPreprocessState *st);

            功能

            銷(xiāo)毀預(yù)處理器

            參數(shù)

            St           [in]處理器指針

            返回值

            Void

            說(shuō)明

             

             

            2.1.3  speex_preprocess_run

            函數(shù)原形

            int speex_preprocess_run(SpeexPreprocessState *stspx_int16_t *x);

            功能

            處理一幀語(yǔ)音數(shù)據(jù)

            參數(shù)

            St           [in]處理器指針

            X            [in|out]數(shù)據(jù)緩存,處理后的數(shù)據(jù)也存入該緩存中

            返回值

            如果VAD打開(kāi),返回值為1表示有語(yǔ)音,為0表示靜音或者噪音

            說(shuō)明

             

             

            2.1.4  speex_preprocess

            函數(shù)原形

            int speex_preprocess(SpeexPreprocessState *stspx_int16_t *xspx_int32_t *echo);

            功能

            處理一幀語(yǔ)音數(shù)據(jù)(廢棄的函數(shù),簡(jiǎn)介調(diào)用speex_preprocess_run

            參數(shù)

            St           [in]處理器指針

            X            [in|out]數(shù)據(jù)緩存,處理后的數(shù)據(jù)也存入該緩存中     

            返回值

             

            說(shuō)明

             

             

            2.1.5  speex_preprocess_estimate_update

            函數(shù)原形

            void speex_preprocess_estimate_update(SpeexPreprocessState *stspx_int16_t *x);

            功能

            更新預(yù)處理器,不會(huì)計(jì)算輸出語(yǔ)音

            參數(shù)

            St           [in]處理器指針

            X            [in]數(shù)據(jù)緩存

            返回值

            Void

            說(shuō)明

             

             

            2.1.6  speex_preprocess_ctl

            函數(shù)原形

            int speex_preprocess_ctl(SpeexPreprocessState *stint requestvoid *ptr);

            功能

            設(shè)置預(yù)處理器的參數(shù)

            參數(shù)

            St           [in]處理器指針

            Request      [in]參數(shù)的類(lèi)型(由宏來(lái)代表不同的參數(shù))

            Ptr          [in|out]參數(shù)的值(設(shè)置參數(shù)時(shí)為in,獲得參數(shù)參數(shù)時(shí)為out,這個(gè)由宏決定)

            返回值

            成功返回0,失敗返回-1(表明未知的請(qǐng)求參數(shù))

            說(shuō)明

            以下數(shù)標(biāo)識(shí)參數(shù)類(lèi)型的宏

            /** Set preprocessor denoiser state */

            #define SPEEX_PREPROCESS_SET_DENOISE 0

            /** Get preprocessor denoiser state */

            #define SPEEX_PREPROCESS_GET_DENOISE 1

             

            /** Set preprocessor Automatic Gain Control state */

            #define SPEEX_PREPROCESS_SET_AGC 2

            /** Get preprocessor Automatic Gain Control state */

            #define SPEEX_PREPROCESS_GET_AGC 3

             

            /** Set preprocessor Voice Activity Detection state */

            #define SPEEX_PREPROCESS_SET_VAD 4

            /** Get preprocessor Voice Activity Detection state */

            #define SPEEX_PREPROCESS_GET_VAD 5

             

            /** Set preprocessor Automatic Gain Control level (float) */

            #define SPEEX_PREPROCESS_SET_AGC_LEVEL 6

            /** Get preprocessor Automatic Gain Control level (float) */

            #define SPEEX_PREPROCESS_GET_AGC_LEVEL 7

             

            /** Set preprocessor dereverb state */

            #define SPEEX_PREPROCESS_SET_DEREVERB 8

            /** Get preprocessor dereverb state */

            #define SPEEX_PREPROCESS_GET_DEREVERB 9

             

            /** Set preprocessor dereverb level */

            #define SPEEX_PREPROCESS_SET_DEREVERB_LEVEL 10

            /** Get preprocessor dereverb level */

            #define SPEEX_PREPROCESS_GET_DEREVERB_LEVEL 11

             

            /** Set preprocessor dereverb decay */

            #define SPEEX_PREPROCESS_SET_DEREVERB_DECAY 12

            /** Get preprocessor dereverb decay */

            #define SPEEX_PREPROCESS_GET_DEREVERB_DECAY 13

             

            /** Set probability required for the VAD to go from silence to voice */

            #define SPEEX_PREPROCESS_SET_PROB_START 14

            /** Get probability required for the VAD to go from silence to voice */

            #define SPEEX_PREPROCESS_GET_PROB_START 15

             

            /** Set probability required for the VAD to stay in the voice state (integer percent) */

            #define SPEEX_PREPROCESS_SET_PROB_CONTINUE 16

            /** Get probability required for the VAD to stay in the voice state (integer percent) */

            #define SPEEX_PREPROCESS_GET_PROB_CONTINUE 17

             

            /** Set maximum attenuation of the noise in dB (negative number) */

            #define SPEEX_PREPROCESS_SET_NOISE_SUPPRESS 18

            /** Get maximum attenuation of the noise in dB (negative number) */

            #define SPEEX_PREPROCESS_GET_NOISE_SUPPRESS 19

             

            /** Set maximum attenuation of the residual echo in dB (negative number) */

            #define SPEEX_PREPROCESS_SET_ECHO_SUPPRESS 20

            /** Get maximum attenuation of the residual echo in dB (negative number) */

            #define SPEEX_PREPROCESS_GET_ECHO_SUPPRESS 21

             

            /** Set maximum attenuation of the residual echo in dB when near end is active (negative number) */

            #define SPEEX_PREPROCESS_SET_ECHO_SUPPRESS_ACTIVE 22

            /** Get maximum attenuation of the residual echo in dB when near end is active (negative number) */

            #define SPEEX_PREPROCESS_GET_ECHO_SUPPRESS_ACTIVE 23

             

            /** Set the corresponding echo canceller state so that residual echo suppression can be performed (NULL for no residual echo suppression) */

            #define SPEEX_PREPROCESS_SET_ECHO_STATE 24

            /** Get the corresponding echo canceller state */

            #define SPEEX_PREPROCESS_GET_ECHO_STATE 25

             

            /** Set maximal gain increase in dB/second (int32) */

            #define SPEEX_PREPROCESS_SET_AGC_INCREMENT 26

             

            /** Get maximal gain increase in dB/second (int32) */

            #define SPEEX_PREPROCESS_GET_AGC_INCREMENT 27

             

            /** Set maximal gain decrease in dB/second (int32) */

            #define SPEEX_PREPROCESS_SET_AGC_DECREMENT 28

             

            /** Get maximal gain decrease in dB/second (int32) */

            #define SPEEX_PREPROCESS_GET_AGC_DECREMENT 29

             

            /** Set maximal gain in dB (int32) */

            #define SPEEX_PREPROCESS_SET_AGC_MAX_GAIN 30

             

            /** Get maximal gain in dB (int32) */

            #define SPEEX_PREPROCESS_GET_AGC_MAX_GAIN 31

             

            /*  Can't set loudness */

            /** Get loudness */

            #define SPEEX_PREPROCESS_GET_AGC_LOUDNESS 33

             

            /*  Can't set gain */

            /** Get current gain (int32 percent) */

            #define SPEEX_PREPROCESS_GET_AGC_GAIN 35

             

            /*  Can't set spectrum size */

            /** Get spectrum size for power spectrum (int32) */

            #define SPEEX_PREPROCESS_GET_PSD_SIZE 37

             

            /*  Can't set power spectrum */

            /** Get power spectrum (int32[] of squared values) */

            #define SPEEX_PREPROCESS_GET_PSD 39

             

            /*  Can't set noise size */

            /** Get spectrum size for noise estimate (int32)  */

            #define SPEEX_PREPROCESS_GET_NOISE_PSD_SIZE 41

             

            /*  Can't set noise estimate */

            /** Get noise estimate (int32[] of squared values) */

            #define SPEEX_PREPROCESS_GET_NOISE_PSD 43

             

            /* Can't set speech probability */

            /** Get speech probability in last frame (int32).  */

            #define SPEEX_PREPROCESS_GET_PROB 45

             

            /** Set preprocessor Automatic Gain Control level (int32) */

            #define SPEEX_PREPROCESS_SET_AGC_TARGET 46

            /** Get preprocessor Automatic Gain Control level (int32) */

            #define SPEEX_PREPROCESS_GET_AGC_TARGET 47

             

            3.實(shí)例代碼

            3.1  AGC

            #define NN 320

            /*

                語(yǔ)音數(shù)據(jù)為單通道、16bit、16k

            */

            int _tmain(int argc_TCHARargv[])

            {

             

                 short in[NN];

                 int i;

                 SpeexPreprocessState *st;

                 int count=0;

                 float f;

             

                 st = speex_preprocess_state_init(NN, 16000);

                

                 i=1;

                 speex_preprocess_ctl(stSPEEX_PREPROCESS_SET_AGC, &i);

                 f=16000;

                 speex_preprocess_ctl(stSPEEX_PREPROCESS_SET_AGC_LEVEL, &f);

             

             

                 while (1)

                 {

                     int vad;

                     fread(insizeof(short), NNstdin);

                     if (feof(stdin))

                          break;

                     vad = speex_preprocess_run(stin);

                     //fprintf (stderr, "%d\n", vad);

                     fwrite(insizeof(short), NNstdout);

                     count++;

                 }

                 speex_preprocess_state_destroy(st);

             

                 return 0;

            }

            posted on 2012-05-22 23:00 夜貓子 閱讀(1025) 評(píng)論(0)  編輯 收藏 引用


            只有注冊(cè)用戶(hù)登錄后才能發(fā)表評(píng)論。
            網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問(wèn)   Chat2DB   管理


            久久精品中文騷妇女内射| 久久无码高潮喷水| 国产高潮国产高潮久久久91| 高清免费久久午夜精品| 国产福利电影一区二区三区久久久久成人精品综合 | 久久免费视频观看| 久久精品无码免费不卡| 国产精品99久久久精品无码 | 国内精品久久久久影院亚洲| 午夜精品久久久久久影视777| 无码人妻久久一区二区三区蜜桃 | 日韩影院久久| 国产高潮国产高潮久久久| 久久精品国产一区二区三区| 亚洲国产一成人久久精品| 亚洲午夜精品久久久久久人妖| 青青草原综合久久大伊人| 久久亚洲综合色一区二区三区| 精品人妻伦九区久久AAA片69| 久久被窝电影亚洲爽爽爽| 久久精品国产99久久无毒不卡| 久久久久亚洲AV无码网站| 久久66热人妻偷产精品9| 伊人久久大香线焦综合四虎| 少妇久久久久久久久久| 无码8090精品久久一区| 国产午夜福利精品久久| 久久久精品人妻一区二区三区蜜桃 | 久久久久久久波多野结衣高潮| 一本大道久久a久久精品综合| 久久久久久久97| 久久精品国产99久久久古代| 日日狠狠久久偷偷色综合0 | 亚洲伊人久久精品影院| 中文字幕无码久久精品青草| 国产999精品久久久久久| 精品国产福利久久久| 精品综合久久久久久888蜜芽| 久久er国产精品免费观看2| 亚洲国产一成久久精品国产成人综合| 久久国产精品成人影院|