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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? plc.h

?? ppciaxclient softphone
?? H
字號:
/*
 * 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 ------------------------------------------------------------*/

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美成人三级在线| 日韩色视频在线观看| 午夜精品成人在线视频| 2020国产精品自拍| 91久久久免费一区二区| 韩国视频一区二区| 亚洲精品久久久蜜桃| 久久久久久免费毛片精品| 一道本成人在线| 国产成人精品免费视频网站| 五月综合激情网| 亚洲免费观看高清完整版在线观看熊 | 国产精品网曝门| 在线观看日韩一区| 成人va在线观看| 国产精品自在欧美一区| 五月天中文字幕一区二区| 综合中文字幕亚洲| 国产亚洲精品7777| 精品国产一区二区三区不卡| 欧美系列在线观看| 97超碰欧美中文字幕| 国产成人精品网址| 麻豆视频观看网址久久| 亚洲午夜国产一区99re久久| 中文字幕日本乱码精品影院| 久久久久久久久久久电影| 日韩亚洲欧美在线| 欧美日韩高清一区二区三区| 欧美在线观看视频在线| 日本精品一级二级| 色综合久久88色综合天天6| 97久久久精品综合88久久| 成人小视频在线| 波多野洁衣一区| 成人污污视频在线观看| 成人免费视频播放| 国产盗摄精品一区二区三区在线 | 日韩欧美国产综合| 亚洲精品免费电影| 国产精品国产a| 国产精品网站在线观看| 国产网站一区二区三区| 国产午夜亚洲精品不卡| 久久久亚洲综合| 国产视频一区二区三区在线观看| 亚洲精品在线观| 久久久99精品久久| 国产夜色精品一区二区av| 国产欧美一区二区三区在线老狼 | 69堂成人精品免费视频| 欧美日韩中字一区| 91精品国产欧美日韩| 欧美一区二区三区四区视频 | 亚洲视频综合在线| 一区二区三区在线免费播放| 亚洲一区二区三区四区在线| 亚洲午夜精品一区二区三区他趣| 午夜精品久久久久久久蜜桃app| 亚洲6080在线| 久久精品久久久精品美女| 精品一区二区在线视频| 国产成人精品综合在线观看| 国产成人综合视频| 97aⅴ精品视频一二三区| 欧美做爰猛烈大尺度电影无法无天| 91蜜桃在线免费视频| 欧美日韩一区二区电影| 日韩一区二区高清| 久久精品视频一区二区三区| 中文字幕一区在线观看| 亚洲成人av一区二区三区| 日韩avvvv在线播放| 国产精品亚洲一区二区三区妖精 | 91影院在线免费观看| 欧美视频在线观看一区| 日韩一区二区高清| 国产欧美一区二区精品秋霞影院| 亚洲欧美视频在线观看视频| 日韩高清电影一区| 国产精品1区2区| 在线免费观看视频一区| 日韩欧美国产一二三区| 最近日韩中文字幕| 奇米四色…亚洲| 不卡一卡二卡三乱码免费网站| 精品视频全国免费看| 久久蜜桃av一区精品变态类天堂 | 26uuu色噜噜精品一区二区| 国产精品成人免费| 青青草成人在线观看| 成人听书哪个软件好| 欧美日韩在线播放一区| 国产日韩精品一区二区浪潮av | 一区二区在线观看不卡| 蜜臀av一区二区在线免费观看| jlzzjlzz亚洲女人18| 884aa四虎影成人精品一区| 欧美国产一区视频在线观看| 亚洲国产精品久久久久婷婷884| 国产精品18久久久久久久久| 在线观看一区日韩| 欧美国产1区2区| 美腿丝袜亚洲一区| 欧美怡红院视频| 欧美激情一区二区三区四区| 男人的j进女人的j一区| 在线观看欧美日本| 国产精品久久久久久亚洲伦 | 综合婷婷亚洲小说| 国产一区二区不卡在线| 欧美精品久久天天躁| 亚洲另类中文字| 国产91精品一区二区| 欧美成人猛片aaaaaaa| 亚洲图片欧美一区| 91原创在线视频| 国产精品丝袜91| 国产自产高清不卡| 日韩欧美色综合| 日本欧美加勒比视频| 欧美亚洲日本国产| 一区二区三区免费观看| 99久久国产综合精品女不卡| 欧美精彩视频一区二区三区| 国产一区二区三区高清播放| 欧美zozozo| 久色婷婷小香蕉久久| 6080国产精品一区二区| 偷偷要91色婷婷| 欧美日韩dvd在线观看| 亚洲一区二区三区四区在线| 欧洲生活片亚洲生活在线观看| 亚洲久草在线视频| 99久久精品情趣| 亚洲视频每日更新| 91免费在线播放| 一区二区三区在线观看视频| 91麻豆视频网站| 一区二区三区在线看| 欧美少妇bbb| 视频一区中文字幕国产| 8x8x8国产精品| 喷水一区二区三区| 日韩欧美高清一区| 精品在线亚洲视频| 久久精品亚洲精品国产欧美kt∨| 丁香婷婷综合五月| 亚洲欧洲av在线| 在线观看三级视频欧美| 午夜欧美2019年伦理| 日韩一级精品视频在线观看| 国产又粗又猛又爽又黄91精品| 久久久另类综合| 成人精品国产一区二区4080| 日韩美女久久久| 欧美美女网站色| 久久 天天综合| 国产精品欧美一级免费| 色视频成人在线观看免| 日韩影院精彩在线| 久久久久久久国产精品影院| 波多野结衣一区二区三区 | 91精品欧美久久久久久动漫| 麻豆国产91在线播放| 国产清纯白嫩初高生在线观看91 | 亚洲观看高清完整版在线观看| 欧美日韩国产综合一区二区| 麻豆免费看一区二区三区| 国产色一区二区| 91成人在线精品| 免费在线一区观看| 欧美国产一区视频在线观看| 在线免费视频一区二区| 久久激情五月激情| 中文字幕在线观看一区| 欧美日韩黄视频| 国产成人av一区二区| 亚洲国产综合在线| 久久久精品人体av艺术| 在线观看亚洲精品| 狠狠色丁香久久婷婷综合丁香| 亚洲欧洲在线观看av| 欧美一区二区黄| 91麻豆精品在线观看| 日本一道高清亚洲日美韩| 国产精品毛片无遮挡高清| 777亚洲妇女| av电影一区二区| 激情图区综合网| 一区二区高清在线| 久久精品男人的天堂| 欧美精品色一区二区三区| 成人国产精品免费| 捆绑调教美女网站视频一区| 一区二区三区蜜桃| 欧美国产精品v| 日韩一区二区免费电影| 在线视频综合导航| 国产精品亚洲一区二区三区在线|