亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來(lái)到蟲(chóng)蟲(chóng)下載站! | ?? 資源下載 ?? 資源專(zhuān)輯 ?? 關(guān)于我們
? 蟲(chóng)蟲(chóng)下載站

?? plc.h

?? ppciaxclient softphone
?? H
字號(hào):
/*
 * SpanDSP - a series of DSP components for telephony
 *
 * plc.h
 *
 * Written by Steve Underwood <steveu@coppice.org>
 *
 * Copyright (C) 2004 Steve Underwood
 *
 * All rights reserved.
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation; either version 2 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, write to the Free Software
 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 *
 * This version may be optionally licenced under the GNU LGPL licence.
 * This version is disclaimed to DIGIUM for inclusion in the Asterisk project.
 */

/*! \file */

#if !defined(_PLC_H_)
#define _PLC_H_

#ifdef SOLARIS
#include <sys/int_types.h>
#else
#if defined(__OpenBSD__) || defined( __FreeBSD__)
#include <inttypes.h>
#elif defined(_MSC_VER)
typedef __int8 int8_t;
typedef __int16 int16_t;
typedef __int32 int32_t;
typedef unsigned __int8 uin8_t;
typedef unsigned __int16 uin16_t;
typedef unsigned __int32 uin32_t;
#else
#include <stdint.h>
#endif
#endif

/*! \page plc_page Packet loss concealment
\section plc_page_sec_1 What does it do?
The packet loss concealment module provides a suitable synthetic fill-in signal,
to minimise the audible effect of lost packets in VoIP applications. It is not
tied to any particular codec, and could be used with almost any codec which does not
specify its own procedure for packet loss concealment.

Where a codec specific concealment procedure exists, the algorithm is usually built
around knowledge of the characteristics of the particular codec. It will, therefore,
generally give better results for that particular codec than this generic concealer will.

\section plc_page_sec_2 How does it work?
While good packets are being received, the plc_rx() routine keeps a record of the trailing
section of the known speech signal. If a packet is missed, plc_fillin() is called to produce
a synthetic replacement for the real speech signal. The average mean difference function
(AMDF) is applied to the last known good signal, to determine its effective pitch.
Based on this, the last pitch period of signal is saved. Essentially, this cycle of speech
will be repeated over and over until the real speech resumes. However, several refinements
are needed to obtain smooth pleasant sounding results.

- The two ends of the stored cycle of speech will not always fit together smoothly. This can
  cause roughness, or even clicks, at the joins between cycles. To soften this, the
  1/4 pitch period of real speech preceeding the cycle to be repeated is blended with the last
  1/4 pitch period of the cycle to be repeated, using an overlap-add (OLA) technique (i.e.
  in total, the last 5/4 pitch periods of real speech are used).

- The start of the synthetic speech will not always fit together smoothly with the tail of
  real speech passed on before the erasure was identified. Ideally, we would like to modify
  the last 1/4 pitch period of the real speech, to blend it into the synthetic speech. However,
  it is too late for that. We could have delayed the real speech a little, but that would
  require more buffer manipulation, and hurt the efficiency of the no-lost-packets case
  (which we hope is the dominant case). Instead we use a degenerate form of OLA to modify
  the start of the synthetic data. The last 1/4 pitch period of real speech is time reversed,
  and OLA is used to blend it with the first 1/4 pitch period of synthetic speech. The result
  seems quite acceptable.

- As we progress into the erasure, the chances of the synthetic signal being anything like
  correct steadily fall. Therefore, the volume of the synthesized signal is made to decay
  linearly, such that after 50ms of missing audio it is reduced to silence.

- When real speech resumes, an extra 1/4 pitch period of sythetic speech is blended with the
  start of the real speech. If the erasure is small, this smoothes the transition. If the erasure
  is long, and the synthetic signal has faded to zero, the blending softens the start up of the
  real signal, avoiding a kind of "click" or "pop" effect that might occur with a sudden onset.

\section plc_page_sec_3 How do I use it?
Before audio is processed, call plc_init() to create an instance of the packet loss
concealer. For each received audio packet that is acceptable (i.e. not including those being
dropped for being too late) call plc_rx() to record the content of the packet. Note this may
modify the packet a little after a period of packet loss, to blend real synthetic data smoothly.
When a real packet is not available in time, call plc_fillin() to create a sythetic substitute.
That's it!
*/

#define SAMPLE_RATE     8000

/*! Minimum allowed pitch (66 Hz) */
#define PLC_PITCH_MIN           120
/*! Maximum allowed pitch (200 Hz) */
#define PLC_PITCH_MAX           40
/*! Maximum pitch OLA window */
#define PLC_PITCH_OVERLAP_MAX   (PLC_PITCH_MIN >> 2)
/*! The length over which the AMDF function looks for similarity (20 ms) */
#define CORRELATION_SPAN        160
/*! History buffer length. The buffer much also be at leat 1.25 times
    PLC_PITCH_MIN, but that is much smaller than the buffer needs to be for
    the pitch assessment. */
#define PLC_HISTORY_LEN         (CORRELATION_SPAN + PLC_PITCH_MIN)

typedef struct
{
    /*! Consecutive erased samples */
    int missing_samples;
    /*! Current offset into pitch period */
    int pitch_offset;
    /*! Pitch estimate */
    int pitch;
    /*! Buffer for a cycle of speech */
    float pitchbuf[PLC_PITCH_MIN];
    /*! History buffer */
    int16_t history[PLC_HISTORY_LEN];
    /*! Current pointer into the history buffer */
    int buf_ptr;
} plc_state_t;


#ifdef __cplusplus
extern "C" {
#endif

/*! Process a block of received audio samples.
    \brief Process a block of received audio samples.
    \param s The packet loss concealer context.
    \param amp The audio sample buffer.
    \param len The number of samples in the buffer.
    \return The number of samples in the buffer. */
int plc_rx(plc_state_t *s, int16_t amp[], int len);

/*! Fill-in a block of missing audio samples.
    \brief Fill-in a block of missing audio samples.
    \param s The packet loss concealer context.
    \param amp The audio sample buffer.
    \param len The number of samples to be synthesised.
    \return The number of samples synthesized. */
int plc_fillin(plc_state_t *s, int16_t amp[], int len);

/*! Process a block of received V.29 modem audio samples.
    \brief Process a block of received V.29 modem audio samples.
    \param s The packet loss concealer context.
    \param amp The audio sample buffer.
    \param len The number of samples in the buffer.
    \return A pointer to the he packet loss concealer context. */
plc_state_t *plc_init(plc_state_t *s);

#ifdef __cplusplus
}
#endif

#endif
/*- End of file ------------------------------------------------------------*/

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美日韩国产精品成人| 午夜伊人狠狠久久| 中文字幕制服丝袜一区二区三区| 久久久久久久久蜜桃| 久久久久久亚洲综合| 国产日韩亚洲欧美综合| 国产精品免费丝袜| 一区二区三区国产精品| 日韩精品亚洲一区| 国内精品久久久久影院色 | 日本二三区不卡| 欧美色图在线观看| 91精品国产欧美日韩| 精品国产电影一区二区| 久久久久久夜精品精品免费| 色婷婷香蕉在线一区二区| 成人午夜短视频| 日本韩国欧美国产| 欧美一级片在线| 国产人成亚洲第一网站在线播放| 亚洲欧洲一区二区在线播放| 亚洲在线中文字幕| 久久国产日韩欧美精品| 成人动漫视频在线| 欧美色图天堂网| 欧美精品一区二区久久久| 亚洲视频免费在线| 日韩av午夜在线观看| 国产成人av一区二区| 欧美日韩视频专区在线播放| 久久99精品一区二区三区| 成人毛片在线观看| 欧美一区二区三区色| 精品福利二区三区| 亚洲中国最大av网站| 另类专区欧美蜜桃臀第一页| 99久久国产综合精品女不卡| 欧美一区二区大片| 亚洲天堂2014| 精品一区二区三区免费| 色94色欧美sute亚洲线路一久| 欧美电影免费观看高清完整版在 | 亚洲欧洲在线观看av| 天堂成人国产精品一区| 国产高清在线精品| 欧美综合色免费| 国产午夜精品理论片a级大结局| 亚洲尤物视频在线| 国产福利不卡视频| 欧美一级片免费看| 亚洲私人黄色宅男| 国产在线一区二区| 欧美日韩另类一区| 亚洲色图欧美激情| 国产一区二三区| 欧美一区二区三区色| 中文字幕av不卡| 久久精品国产免费看久久精品| 在线视频国产一区| 欧美经典三级视频一区二区三区| 视频一区欧美精品| 色综合一个色综合| 国产日韩三级在线| 九一九一国产精品| 777精品伊人久久久久大香线蕉| 国产女同互慰高潮91漫画| 麻豆视频观看网址久久| 欧美性猛片aaaaaaa做受| 国产精品入口麻豆原神| 精品一区二区三区视频| 91福利在线看| 成人欧美一区二区三区白人 | 99久久伊人精品| 久久久久久久久岛国免费| 久久国产精品区| 欧美精品色一区二区三区| 一区二区成人在线| 国产精品视频你懂的| 国产综合久久久久久鬼色| 91精品国产综合久久国产大片| 亚洲国产一二三| 91国产精品成人| 亚洲免费在线电影| 一本色道久久加勒比精品| 国产精品久久99| 成人v精品蜜桃久久一区| 久久精品视频在线看| 国产精品自在在线| 精品欧美一区二区在线观看| 日韩中文字幕91| 欧美一卡二卡三卡| 美女网站在线免费欧美精品| 日韩一级视频免费观看在线| 日本aⅴ亚洲精品中文乱码| 51午夜精品国产| 蜜臀av一区二区在线免费观看| 欧美一区二区三区电影| 毛片一区二区三区| 久久久久国产免费免费| 国产成a人亚洲精品| 国产精品久线观看视频| 91蜜桃在线观看| 洋洋成人永久网站入口| 欧美日韩国产乱码电影| 日本不卡在线视频| 精品国产自在久精品国产| 国产成人午夜精品5599| 国产精品网曝门| 91啪亚洲精品| 亚洲福利视频一区| 日韩亚洲国产中文字幕欧美| 麻豆精品蜜桃视频网站| 精品福利一二区| 成人app软件下载大全免费| 亚洲人成在线观看一区二区| 欧美网站一区二区| 日本不卡一区二区三区高清视频| 精品久久久久久久久久久院品网 | 日韩欧美国产三级| 国产精品一级片在线观看| 综合电影一区二区三区 | 欧美日韩国产一级片| 六月丁香婷婷久久| 国产精品视频你懂的| 在线亚洲免费视频| 麻豆91精品91久久久的内涵| 国产欧美一区二区在线| 91黄视频在线| 国内精品久久久久影院薰衣草| 国产精品久久久久精k8| 欧美日韩www| 人禽交欧美网站| 中文字幕欧美区| 一区二区三区欧美日韩| 91精品国产福利在线观看| 国产一区二区三区免费看| 亚洲另类在线制服丝袜| 日韩免费高清电影| 97久久超碰精品国产| 日本91福利区| 《视频一区视频二区| 日韩美女天天操| 色综合久久88色综合天天免费| 日本vs亚洲vs韩国一区三区二区 | 国产精品三级久久久久三级| 欧美无人高清视频在线观看| 久久精品国产亚洲aⅴ | 美女诱惑一区二区| 综合自拍亚洲综合图不卡区| 日韩一卡二卡三卡国产欧美| 91欧美激情一区二区三区成人| 美女在线视频一区| 一区二区三区.www| 久久精品一区二区| 欧美日韩国产a| caoporn国产一区二区| 蜜臀久久久99精品久久久久久| 国产精品久久久久久久岛一牛影视 | 欧美性猛交xxxx乱大交退制版| 久久精品999| 亚洲一线二线三线久久久| 国产午夜精品在线观看| 91精品婷婷国产综合久久性色 | 处破女av一区二区| 蜜桃av一区二区三区电影| 亚洲精品中文字幕在线观看| 亚洲精品一区二区三区蜜桃下载| 欧美日免费三级在线| 成人黄色小视频| 国产一区二区不卡在线| 日韩av网站免费在线| 亚洲一区二区欧美| 1024亚洲合集| 国产精品青草综合久久久久99| 日韩三级在线免费观看| 欧美一区二区在线免费播放| 欧美剧情电影在线观看完整版免费励志电影 | 欧美日韩综合色| 在线观看国产91| 色香蕉久久蜜桃| 91极品美女在线| 欧洲av一区二区嗯嗯嗯啊| 色噜噜久久综合| 欧美亚洲动漫另类| 欧美日韩电影在线播放| 欧美精选一区二区| 欧美一卡二卡在线| 精品国产一区a| 国产亚洲欧美激情| 国产精品视频线看| 亚洲啪啪综合av一区二区三区| 亚洲人成网站色在线观看| 一区二区三区在线观看欧美| 亚洲一区视频在线| 日韩专区中文字幕一区二区| 日本亚洲电影天堂| 国内精品久久久久影院一蜜桃| 国产传媒一区在线| 99re免费视频精品全部| 在线一区二区视频|