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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? headset_tones.c

?? bluelab 3.52 里面的立體聲程序源代碼
?? C
?? 第 1 頁 / 共 2 頁
字號:
    AUDIO_NOTE(REST, QUAVER_TRIPLET),
    AUDIO_NOTE(G5 , MINIM_TRIPLET),  
    AUDIO_NOTE(REST, QUAVER),
    AUDIO_NOTE(G5 , MINIM_TRIPLET),
    
    AUDIO_END
};

/* Major Scale ring tone (default) */
static const audio_note tone_ring_default_delayed[] =
{
    AUDIO_TEMPO(300), AUDIO_VOLUME(64), AUDIO_TIMBRE(sine),

    AUDIO_NOTE(REST, SEMIBREVE),
    AUDIO_NOTE(REST, SEMIBREVE),
    AUDIO_NOTE(REST, SEMIBREVE),
    AUDIO_NOTE(E6,QUAVER),                                    
    AUDIO_NOTE(FS6,QUAVER),                                           
    AUDIO_NOTE(GS6,QUAVER),                           
    AUDIO_NOTE(A6,QUAVER),                            
    AUDIO_NOTE(B6,QUAVER),                                            
    AUDIO_NOTE(CS7,QUAVER),                           
    AUDIO_NOTE(DS7,QUAVER),                                           
    AUDIO_NOTE(E7,QUAVER),    

    AUDIO_END
};

/* Twilight ring tone */
static const audio_note tone_ring_twilight_delayed[] =
{
    AUDIO_TEMPO(180), AUDIO_VOLUME(64), AUDIO_TIMBRE(sine),
    
    AUDIO_NOTE(REST, SEMIBREVE),
    AUDIO_NOTE(REST, CROTCHET),
    AUDIO_NOTE(E7, QUAVER),
    AUDIO_NOTE(F7, QUAVER),
    AUDIO_NOTE(E7, QUAVER),
    AUDIO_NOTE(C7, QUAVER),
    AUDIO_NOTE(E7, QUAVER),
    AUDIO_NOTE(F7, QUAVER),
    AUDIO_NOTE(E7, QUAVER),
    AUDIO_NOTE(C7, QUAVER),

    AUDIO_END
};

static const audio_note tone_mute_reminder_delayed[] =
		
		
{
	AUDIO_TEMPO(400), AUDIO_VOLUME(64), AUDIO_TIMBRE(sine),
	
    AUDIO_TEMPO(600), AUDIO_VOLUME(64), AUDIO_TIMBRE(sine),
    AUDIO_NOTE(REST, SEMIQUAVER),
    AUDIO_TEMPO(120), AUDIO_VOLUME(64), AUDIO_TIMBRE(sine),
    AUDIO_NOTE(G5, CROTCHET),
    AUDIO_NOTE(REST, CROTCHET),
    AUDIO_NOTE(G5, CROTCHET),
    AUDIO_END
};

static const audio_note tone_call_end_delayed[] =
{
    AUDIO_TEMPO(120), AUDIO_VOLUME(64), AUDIO_TIMBRE(sine),
   	AUDIO_NOTE(REST, SEMIBREVE),
    AUDIO_NOTE(REST, SEMIQUAVER),
 	AUDIO_NOTE(FS7 , CROTCHET),
    
    AUDIO_END
};

/********************************************************************************
    The tones array
*********************************************************************************/

#define NUM_FIXED_TONES (12)
#define ABORT_TONE      (0)
#define ABORT_TIME      (4000)

static const audio_note * const gFixedTones [ (NUM_FIXED_TONES * 2) ] = 
{
    /* Immediate tones */
    tone_power_on,
    tone_power_off,
    tone_error,
    tone_button_press,
    tone_battery_low,
    tone_vol_limit,
    tone_connect,
	tone_mute_reminder,
    tone_pairing,
	tone_call_end,
    tone_ring_default,
    tone_ring_twilight,
	
    /* Delayed tones */
    tone_power_on_delayed,
    tone_power_off_delayed,
    tone_error_delayed,
    tone_button_press_delayed,
    tone_battery_low_delayed,
    tone_vol_limit_delayed,
    tone_connect_delayed,
	tone_mute_reminder_delayed,
    tone_pairing_delayed,
	tone_call_end_delayed,
    tone_ring_default_delayed,
    tone_ring_twilight_delayed
	
};


/****************************************************************************
NAME    
    TonesHandler
    
DESCRIPTION
  	Message handler - arrived at on completion of a tone playback - deletes any queued messages
    and attempts to reconnect the last used audio (av or sco), if it existed.
    
    
RETURNS
    void
*/
static void TonesHandler ( Task task, MessageId id, Message message )
{
    headsetTaskData *app = (headsetTaskData *) getAppTask() ;
    
    /* No need to abort tone playing now we have got to the end-of-tone handler */
    MessageCancelAll(&app->theSoundTask, ABORT_TONE);
    
    TONES_DEBUG(("TONE: Tones handler id:0x%x  pcm:0x%x\n",id,app->pcm_audio_state));
    
	if (app->headset_power_state == power_state_powering_down)
        /* If we are powering down, want to turn the amp off asap */
        MessageSendLater(getAppTask(), APP_AMP_IDLE_IND, 0, 0);
	else
        /* Start the timer to shut down the audio amp */
        MessageSendLater(getAppTask(), APP_AMP_IDLE_IND, 0, AMP_IDLE_TIMER);
	
    switch (app->pcm_audio_state)
    {
    case pcm_tone_to_av:
        /* Connect up AV to PCM, only if SLC is not happening or the headset is powering off*/
        setPcmState(app, pcm_av);
        if (!app->headset_connecting_hfp && app->media_sink && (app->hfp_state != headsetOutgoingCallEstablish) && 
			(app->headset_power_state != power_state_powering_down)&&!(app->voice.voice_recognition_enabled))
            avHeadsetAvStreamStart(app);
        break;

    case pcm_tone_to_sco:
        /* Connect up SCO to PCM and restore HF Volume */
        setPcmState(app, pcm_sco);
        if ((app->sco_sink) && (app->headset_power_state != power_state_powering_down))
            hfpSetupScoRouting(app);
        break;

    case pcm_tone:
        /* Restore HF Volume (which is the default if no AV in use) */
        setPcmState(app, pcm_none);
        headsetUpdateVolume(app->codec_task, app->speaker_volume.hfp_volume);
        break;

    case pcm_ringing:
        /* End of incoming ring */
        setPcmState(app, pcm_ring);
        break;

    case pcm_ring:
        break;
        
    case pcm_sco:
        /* Case where SCO is established while a ring is still playing. 
           Need to cancel the amp shut off timer. */
        MessageCancelAll(getAppTask(), APP_AMP_IDLE_IND);
        break;

    default:
        TONES_DEBUG(("TONE: Invalid pcm state!\n"));
        break;       
    }
    
    MessageFlushTask(&app->theSoundTask);
    
    if (app->amp.amp_powering_on)
        app->amp.amp_powering_on = 0;
}


/*****************************************************************************/
bool isTonePlaying(pcmAudioState state)
{
    return (state >= pcm_tone);
}

/*****************************************************************************/
bool isRingTone(pcmAudioState state)
{
    return ((state == pcm_ring) || (state == pcm_ringing));
}

/*****************************************************************************/
bool isRingOrTonePlaying(pcmAudioState state)
{
    return (state >= pcm_ringing);
}

/*****************************************************************************/
bool isRinging(pcmAudioState state)
{
    return (state == pcm_ringing);
}

/*****************************************************************************/
void tonesInit(headsetTaskData *app) 
{
    /*set up the callback message handler*/
    app->theSoundTask.handler = TonesHandler ; 
}

/*****************************************************************************/
void headsetPlayTone(headsetTaskData *app, toneType type_of_tone)
{
    Source stream_source;
    bool ring_success = FALSE;
    bool amp_inactive = FALSE;
    
    /* Tones can interrupt rings */
    if (!isRingOrTonePlaying(app->pcm_audio_state) || (isRinging(app->pcm_audio_state) && (type_of_tone != tone_type_ring)))               
    {
        TONES_DEBUG(("TONE: Play Tone type:0x%x  pcm:0x%x\n",type_of_tone,app->pcm_audio_state));

        if (!headsetIsAmpPowered(app))
        {
            amp_inactive = TRUE;   
            app->amp.amp_powering_on = 1;
            headsetPowerAmp(app, TRUE);
        }

        if (type_of_tone == tone_type_ring)
        {
            setPcmState(app, pcm_ringing);
            avHeadsetAvStreamStop(app,TRUE);
        }
        else
        {
            avHeadsetAvStreamStop(app,FALSE);
        }
        
        /* Cancel the timer to shut down the audio amp */
        MessageCancelAll(getAppTask(), APP_AMP_IDLE_IND);

        switch (app->pcm_audio_state)
        {
        case pcm_sco:   setPcmState(app, pcm_tone_to_sco); break;
        case pcm_av:    setPcmState(app, pcm_tone_to_av);  break;
        case pcm_ring:  if (type_of_tone != tone_type_ring) setPcmState(app, pcm_tone); break;
        case pcm_ringing:                                  break;
        default:        setPcmState(app, pcm_tone);        break;
        }
        
        /* Check if a tone is interrupting a ring */
        if (isRinging(app->pcm_audio_state) && (type_of_tone != tone_type_ring))
        {
            TONES_DEBUG(("TONE: Tone interrupted ring\n"));
            MessageFlushTask(&app->theSoundTask);
            setPcmState(app, pcm_tone);
        }         
       
#ifdef INCLUDE_CVC
        if (app->cvc.hfkdspready)
        {
            StreamDisconnect(0, StreamPcmSink(0));
        }
        else
        {
#endif

        /* Set volume to mute */
        headsetUpdateVolume(app->codec_task, 0);       
        codec_configure_mono_8000(app);
        
#ifdef INCLUDE_CVC
        }
#endif

        /* If a ring tone, then check features to get the required tune */
        if (type_of_tone == tone_type_ring)
            type_of_tone += app->features.ring_tone_select;
    
        /* If amp was turned off then play delayed tone, else play immediate tone */
        if (amp_inactive)
        {
            type_of_tone += NUM_FIXED_TONES;
            TONES_DEBUG(("TONE: Play delayed tone  type:%d\n",type_of_tone));
        }

        /* Set tone to required volume */
        headsetUpdateVolume(app->codec_task, 15);
        
	    stream_source = StreamAudioSource(gFixedTones[type_of_tone]);
 
        ring_success =  StreamConnectAndDispose(stream_source, StreamPcmSink(0));
    
        TONES_DEBUG(("TONE: Ring success %d\n",ring_success));
    
        /* send a message to indicate when the PCM connect disconnects */
        MessageSinkTask ( StreamPcmSink(0) , &app->theSoundTask )  ;
        /* The above line CAN fail so abort playing a tone after a certain time anyway,
           so that we don't get stuck in thinking a tone is playing.
        */
        MessageSendLater(&app->theSoundTask, ABORT_TONE, 0, ABORT_TIME);
    }
    else
    {
        TONES_DEBUG(("TONE: Tone already playing\n"));
        if (isTonePlaying(app->pcm_audio_state) && (type_of_tone != tone_type_ring))
        {
            if (app->amp.amp_powering_on)
            {
                APP_TONE_TO_PLAY_IND_T* message;
                TONES_DEBUG(("TONE: Play new tone once delayed tone played %d\n",type_of_tone));
                MessageCancelAll(getAppTask(), APP_TONE_TO_PLAY_IND);
	            message = malloc(sizeof(APP_TONE_TO_PLAY_IND_T));
	            message->id = type_of_tone;
                MessageSendConditionally(getAppTask(), APP_TONE_TO_PLAY_IND, message, &app->amp.amp_powering_on);
            }
            else
            {
                TONES_DEBUG(("TONE: Play new tone %d\n",type_of_tone));
                MessageFlushTask(&app->theSoundTask);
                MessageCancelAll(&app->theSoundTask, ABORT_TONE);
                StreamDisconnect(0, StreamPcmSink(0));
				/* Set tone to required volume in case someone else has altered it. */
        		headsetUpdateVolume(app->codec_task, 15);
                stream_source = StreamAudioSource(gFixedTones[type_of_tone]);
                ring_success =  StreamConnectAndDispose(stream_source, StreamPcmSink(0));
                MessageSinkTask ( StreamPcmSink(0) , &app->theSoundTask );
                MessageSendLater(&app->theSoundTask, ABORT_TONE, 0, ABORT_TIME);
            }
        }
    }
}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲午夜电影网| 国产精品日产欧美久久久久| 午夜激情久久久| 欧美久久久久久蜜桃| 日本美女视频一区二区| 日韩三级中文字幕| 国产黑丝在线一区二区三区| 日本一区二区电影| 欧洲精品一区二区三区在线观看| 亚洲国产精品尤物yw在线观看| 777午夜精品视频在线播放| 久久99精品久久久久婷婷| 国产亚洲精品免费| 色综合天天综合网国产成人综合天 | 韩国一区二区在线观看| 国产亚洲一区字幕| 在线观看日韩电影| 日本怡春院一区二区| 国产网站一区二区| 欧美伊人久久久久久久久影院 | 日韩欧美亚洲国产另类| 欧美在线观看你懂的| 日韩制服丝袜av| 欧美激情综合在线| 欧美在线观看一二区| 精东粉嫩av免费一区二区三区| 国产精品免费久久久久| 欧美日韩精品一区视频| 国产成人av福利| 亚洲成av人片在线观看| 国产欧美日韩视频一区二区| 欧美日韩亚洲国产综合| 国产成人精品亚洲午夜麻豆| 亚洲国产精品人人做人人爽| 久久久国产午夜精品| 欧美综合久久久| 国产另类ts人妖一区二区| 亚洲永久免费视频| 久久久99精品免费观看| 欧美视频在线不卡| 国产aⅴ综合色| 青青草国产精品亚洲专区无| 中文字幕一区二区三区蜜月| 日韩一区二区电影网| 91麻豆国产香蕉久久精品| 国产精品影音先锋| 视频一区在线播放| 亚洲一区欧美一区| 国产精品天天摸av网| 欧美不卡激情三级在线观看| 欧美中文字幕一二三区视频| 99视频在线精品| 国产一区美女在线| 午夜精品福利一区二区三区av | 欧美影视一区在线| 成人黄页在线观看| 国产一级精品在线| 免费久久99精品国产| 亚洲电影一级黄| 亚洲欧美激情视频在线观看一区二区三区 | 欧美日韩一区久久| 色综合色狠狠综合色| 成人高清免费观看| 成人小视频在线| 国产 欧美在线| 国产大陆a不卡| 国产成人av影院| 国产精品资源在线观看| 精品视频在线视频| 在线观看亚洲专区| 91尤物视频在线观看| 99久久免费视频.com| 福利电影一区二区| 从欧美一区二区三区| 粉嫩av一区二区三区粉嫩| 国产成人av影院| 国产v综合v亚洲欧| 成人app下载| 99久久777色| 欧洲日韩一区二区三区| 欧美美女喷水视频| 777a∨成人精品桃花网| 欧美一级一区二区| 亚洲精品一区二区三区精华液 | 婷婷综合久久一区二区三区| 亚洲成人综合网站| 日本亚洲电影天堂| 精品一区二区三区免费观看| 韩国v欧美v日本v亚洲v| 高清视频一区二区| 色婷婷综合久久久中文字幕| 欧美性大战久久久| 在线综合+亚洲+欧美中文字幕| 日韩欧美激情一区| 国产亚洲va综合人人澡精品 | 精品福利二区三区| 亚洲国产精品成人综合| 亚洲精选免费视频| 奇米精品一区二区三区四区| 精品一二三四在线| 欧美不卡123| 中文一区在线播放| 亚洲mv在线观看| 久久99国内精品| 91亚洲男人天堂| 欧美丰满少妇xxxxx高潮对白| 日韩精品一区二区三区在线播放 | 国产日产欧美一区| 亚洲欧美日韩在线不卡| 日本欧美加勒比视频| 高清在线成人网| 欧美日韩国产在线观看| 久久精品亚洲一区二区三区浴池| 一区精品在线播放| 日本伊人色综合网| 99热国产精品| 日韩欧美国产1| 亚洲免费在线视频一区 二区| 日韩成人精品在线| 99久久精品国产毛片| 欧美丰满嫩嫩电影| 国产精品久久久久影院亚瑟 | 亚洲成人久久影院| 国产成人一级电影| 911精品产国品一二三产区| 国产视频一区在线播放| 日精品一区二区三区| a级精品国产片在线观看| 69p69国产精品| 亚洲欧美国产毛片在线| 国产精品一二三区| 欧美精品一卡两卡| 一区二区视频在线看| 国产精品一区二区你懂的| 欧美美女一区二区三区| 亚洲人妖av一区二区| 精品亚洲porn| 欧美美女一区二区在线观看| 亚洲人快播电影网| 国产白丝精品91爽爽久久| 日韩免费一区二区三区在线播放| 一区二区成人在线视频| jizz一区二区| 精品国产免费人成电影在线观看四季| 一区二区三区中文在线观看| 国产黄色91视频| 精品人在线二区三区| 免费在线看成人av| 欧美日韩一区小说| 一个色综合网站| 91在线观看地址| 欧美韩日一区二区三区四区| 国模娜娜一区二区三区| 日韩午夜在线影院| 日韩电影在线免费看| 欧美日韩综合在线| 亚洲午夜一区二区三区| 色婷婷综合久久久久中文一区二区 | 国产一区二区精品久久91| 日韩欧美综合一区| 免费成人美女在线观看.| 538prom精品视频线放| 婷婷国产在线综合| 欧美精品三级日韩久久| 天堂va蜜桃一区二区三区漫画版| 日本丰满少妇一区二区三区| **网站欧美大片在线观看| 成人av电影在线播放| 中文无字幕一区二区三区 | 欧美色网一区二区| 亚洲午夜免费视频| 欧美日韩卡一卡二| 日韩激情中文字幕| 欧美一区二区三区四区在线观看| 日韩国产欧美在线视频| 欧美一区二区三区男人的天堂 | 国产综合色视频| 国产亚洲欧美在线| 波多野结衣亚洲| 亚洲免费av高清| 欧美日韩国产三级| 蜜芽一区二区三区| 欧美成人vr18sexvr| 国产成人免费网站| 国产精品乱人伦| 色综合久久99| 亚洲aaa精品| 精品嫩草影院久久| 春色校园综合激情亚洲| 亚洲一区在线观看免费观看电影高清| 欧美男人的天堂一二区| 久久99日本精品| 国产精品乱码人人做人人爱 | 国产麻豆精品一区二区| 国产精品天天看| 欧美日韩一区二区三区四区五区| 免费人成网站在线观看欧美高清| 国产欧美va欧美不卡在线| 色婷婷综合久久久久中文一区二区| 日韩国产欧美在线视频|