青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

franksunny的個人技術(shù)空間
獲得人生中的成功需要的專注與堅持不懈多過天才與機(jī)會。 ——C.W. Wendte

 

聲音提示和震動提示的開發(fā)

 

聲音提示可以采用兩種方法:一種是利用系統(tǒng)自帶的CoeSoundPlayer類來實(shí)現(xiàn)單音鈴聲的播放;另一種則是利用S60提供的多媒體框架CMda*類來實(shí)現(xiàn)音頻播放。

關(guān)于聲音提示的使用

CoeSoundPlayer類使用

該類聲明于coesndpy.h頭文件,庫是cone.lib,最簡單的使用莫過于如下格式的代碼應(yīng)用

TBaSystemSoundType a(KSystemSoundMessageUID);

CoeSoundPlayer::PlaySoundNow(a);

在以上代碼的使用時,第一行聲明一個系統(tǒng)tone的類型,該類型聲明在bassnd.h文件中,同時在mmp中加上bafl.lib庫文件。通常這種簡單應(yīng)用,在模擬器上能夠聽到聲音(3rd MR版本的模擬器上都聽不到聲音),但是在真機(jī)上,基本聽不到聲音,一個原因據(jù)說是默認(rèn)的缺省音量被置成了KSystemSoundDefaultVolume,其值最大可以到100(我親測的結(jié)果是最小為0,沒有聲音,最大只能到10,超過10之后和傳負(fù)值一樣都會報MMFAudioClient 4的錯誤,程序也會Crash。所以關(guān)于這點(diǎn)最好還是有高人指點(diǎn)下)。另外bassnd.h中定義的類型還有KSystemSoundRingUID, KSystemSoundAlarmUID, KUidSystemSoundError, KUidSystemSoundEvent等,具體的效果,可以自己親測下。

 

稍微復(fù)雜一點(diǎn)的應(yīng)用代碼如下:

TBaSystemSoundType soundType(KSystemSoundMessageUID);

//TBaSystemSoundInfo::TTone soundTone(aFrequency, aDuration);

TBaSystemSoundInfo::TTone soundTone(1500, 3*1000*1000);

TBaSystemSoundInfo soundInfo(soundType, soundTone);

BaSystemSound::SetSoundL(CCoeEnv::Static()->FsSession(), soundInfo);

CoeSoundPlayer::PlaySoundNow(soundType);

在這里,我對音調(diào)不是很懂,但是aFrequency的值,經(jīng)人測試1003400是工作正常,效果很好(可能10003000最好), 36003800就變?nèi)趿耍偻系?/span>4000基本上已經(jīng)聽不到了。這種方法一般在真機(jī)上還是可以感受出來的,并非像第一種情況,只有模擬器上有效果。

 

只是長時間播放簡單的音調(diào)估計很刺耳,那么我們就可以通過事先設(shè)計好的rng文件來進(jìn)行播放單音鈴聲,具體代碼如下:

_LIT(KRingToneFileName1, "\\Data\\Sounds\\simple\\alarm.rng");

const TInt KRingingTypeSilent = 4; // Silent

TInt tRingingType (0);

CRepository* tRepository = CRepository::NewLC(KCRUidProfileEngine);

User::LeaveIfError( tRepository ->Get(KProEngActiveRingingType, tRingingType ) );

if ( tRingingType != KRingingTypeSilent )

{

       TBaSystemSoundType soundType(KSystemSoundRingUID);

       TBaSystemSoundName soundName(KRingToneFileName1);

       CompleteWithAppPath(soundName);

       TBaSystemSoundInfo soundInfo(soundType, soundName, 10,
        KSystemSoundDefaultPriority);

       BaSystemSound::SetSoundL(CCoeEnv::Static()->FsSession(), soundInfo);

       CoeSoundPlayer::PlaySoundNow(soundType);

       //CoeSoundPlayer::PlaySound(soundType);

}

CleanupStack::PopAndDestroy(); // tRepository

使用以上代碼需要注意的是alarm.rng文件必須要有,否則會沒有聲音傳出,該文件在FP2版本的模擬器路徑下沒有,可以在S60_3rd_MR\Epoc32\release\winscw\udeb\z\system\sounds\simple下找到,并將其拷貝到相應(yīng)的epoc32\release\winscw\udeb\z\system\sounds\simple下面即可。

注:另外,在這里雖然對情景模式是否靜音進(jìn)行了判斷,其實(shí)不判斷也是可以的,因?yàn)榍榫澳J皆O(shè)為靜音,仍然是可以播放出聲音來的。這點(diǎn)很不同于震動。

 

多媒體框架的使用

S60MMF(多媒體框架)提供了對音頻進(jìn)行播放、錄制和格式轉(zhuǎn)換等功能函數(shù),具體的功能類如下:

CMdaAudioPlayerUtility:音頻播放;

CMdaAudioRecorderUtility:音頻錄制;

CMdaAudioConvertUtility:音頻格式轉(zhuǎn)換;

CMdaAudioToneUtility:音調(diào)播放

CMdaAudioInputUtility/ CMdaAudioOutputUtility:音頻流操作

對于這一塊內(nèi)容的介紹在靈活使用EMCCsoft提供的AudioPlayer例子程序就會比較清楚,在這里就不多做展開了。唯一需要提醒的是,相應(yīng)的回調(diào)接口虛函數(shù)一定要實(shí)現(xiàn),否則不好控制。另設(shè)置音量的函數(shù)SetVolume也是只能在0~10之間,否則也會報MMFAudioClient 4錯誤。

 在用CMdaAudioPlayerUtility進(jìn)行音樂文件比如*.wav格式播放時,假如一個文件還沒有播放完,又開始播放一個新文件,也會引發(fā)MMFAudioClient 4的錯誤。

關(guān)于震動提示的使用

震動這個接口的發(fā)展歷史很奇特,Symbian OS v8.x之前沒有提供震動接口,之后開始使用CVibraControl類提供震動接口,而在Symbian OS v9.x之后在保留原有接口基礎(chǔ)上又提供了新的CHWRMVibra類來提供震動接口。

網(wǎng)上的代碼很多,常見形式如下:

// for S60 2nd FP2 and FP3

#include <vibractrl.h>  // CVibraControl, VibraCtrl.lib

 

void DoVibrateL( TUint16 aDuration )

{

  CVibraControl* control = VibraFactory::NewL();

  // get vibration setting in the user profile

  if ( CVibraControl::EVibraModeON == control->VibraSettings() ) 

  {

     control->StartVibraL( aDuration );

  }

 

  delete control;

  control = NULL;

}

 

// for S60 3rd

#include <hwrmvibra.h>  // CHWRMVibra, HWRMVibraClient.lib

 

void DoVibrateL( TInt aDuration )

{

  CHWRMVibra* vibra = CHWRMVibra::NewLC();

  // get vibration setting in the user profile

  if ( CHWRMVibra::EVibraModeON == vibra->VibraSettings() ) 

  {

     vibra->StartVibraL( aDuration );

  }

 

  CleanupStack::PopAndDestroy( vibra );

}

事實(shí)上如果原封不動拷貝如上代碼是實(shí)現(xiàn)不了震動功能的,因?yàn)椴还苁?/span>CHWRMVibra還是CVibraControl對象在被新建并調(diào)用完StartVibraL函數(shù)之后,立即就被析構(gòu)了,因?yàn)?/span>StartVibraL有類似異步函數(shù)的功能,并非阻塞在持續(xù)時間之內(nèi)才會返回,所以對象還沒起振就刪除了。

震動功能的實(shí)現(xiàn)代碼雖然簡單,但是要想震起來還是有點(diǎn)麻煩的,為此我在使用時除了以上問題,還遇到其它幾個問題:

當(dāng)前情景模式里震動提示設(shè)置為關(guān)時,顯然會因?yàn)?/span>

if ( CVibraControl::EVibraModeON == control->VibraSettings() )

if ( CHWRMVibra::EVibraModeON == vibra->VibraSettings() )

兩個條件判斷沒通過而沒有真實(shí)調(diào)用StartVibraL函數(shù),那么我如果將判斷去掉,始終讓其調(diào)用StartVibraL函數(shù)應(yīng)該也會震動的吧?

結(jié)果是震動函數(shù)返回-21KErrAccessDenied(拒絕接受),這和播放聲音提示時的效果完全兩樣,所以說讀情景配置模式里的參數(shù)在這里完全是必要的。

好,那就加判斷,總算執(zhí)行到了StartVibraL (TUint16 aDuration, TInt aIntensity)函數(shù),假如在這里aDuration超過KHWRMVibraMaxDuration,或者aIntensity不在-100100之間(這里的強(qiáng)度值是馬達(dá)的運(yùn)轉(zhuǎn)強(qiáng)度值,負(fù)值是馬達(dá)反轉(zhuǎn),有些文章說該值在+-30范圍內(nèi)會報-2KErrGeneral錯誤,但是自己用E65親測過,在+-30以內(nèi),沒有報錯,震動感不強(qiáng)烈而已,可能跟手機(jī)和具體硬件有關(guān)吧),那么震動效果又沒有起來,此時的震動函數(shù)返回為-6,即KErrAgument(錯誤要求)。

我們解決了以上兩個問題后,還有兩種特殊情況,一種是當(dāng)你的手機(jī)在充電時,如果調(diào)用正確的StartVibraL會返回-22錯誤,即KErrLocked(鎖閉)。以上幾種情況還好,雖然不震,但是你可以用TRAP機(jī)制捕獲錯誤碼,但是如果當(dāng)你是通過數(shù)據(jù)線的手機(jī)PC模式裝上軟件后沒有拔出數(shù)據(jù)線,就算使用TRAP返回時KErrNone,但是手機(jī)還是沒有震動起來,你就會頭大了,難道這個函數(shù)在當(dāng)前手機(jī)上不管用嗎?

事實(shí)是,當(dāng)你拔掉數(shù)據(jù)線,居然震動來了。

唉,問題總算解決了,代碼雖簡單,但是實(shí)現(xiàn)卻并不簡單啊。

 

posted on 2009-08-12 17:38 frank.sunny 閱讀(1911) 評論(1)  編輯 收藏 引用 所屬分類: symbian 開發(fā)

FeedBack:
# re: 聲音提示和震動提示的開發(fā)
2009-12-08 18:27 | 雨泥
大哥!你最后是如何實(shí)現(xiàn)手機(jī)震動的?我試了好多次東搞不定!請解答,最好附上代碼!  回復(fù)  更多評論
  

常用鏈接

留言簿(13)

隨筆分類

個人其它博客

基礎(chǔ)知識鏈接

最新評論

閱讀排行榜

評論排行榜

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            久久久久九九九| 欧美福利视频在线观看| 国产偷国产偷精品高清尤物| 亚洲高清电影| 国产精品永久免费视频| 亚洲免费精品| 亚洲精品一区二| 美国十次成人| 亚洲国产高清一区二区三区| 最新亚洲视频| 欧美高清一区| 亚洲人成人77777线观看| 日韩亚洲精品在线| 欧美日韩1区2区3区| 日韩午夜av| 亚洲一区二区四区| 国产精品久久久久久久第一福利| 亚洲欧洲日产国产网站| 日韩亚洲不卡在线| 欧美日一区二区三区在线观看国产免| 亚洲精品在线一区二区| 亚洲一区二区三区乱码aⅴ蜜桃女| 欧美日韩综合另类| 亚洲欧美激情精品一区二区| 欧美一区二区三区免费视| 国产日韩av在线播放| 欧美资源在线| 亚洲第一区在线观看| 99国产精品99久久久久久粉嫩| 欧美美女喷水视频| 99精品欧美一区二区三区综合在线| 一区二区三区久久网| 国产精品夜色7777狼人| 久久国产直播| 最新国产拍偷乱拍精品| 亚洲免费小视频| 国语自产精品视频在线看抢先版结局| 久久久亚洲人| 亚洲激情视频| 性欧美1819sex性高清| 精品成人一区二区三区| 欧美精品一区二| 新67194成人永久网站| 欧美成人国产一区二区| 在线视频日韩| 精品福利免费观看| 欧美日韩1区2区| 欧美影院成人| 亚洲人www| 久久久99久久精品女同性| 亚洲精品乱码久久久久久蜜桃91| 国产精品久久久久久久久久三级 | 狂野欧美激情性xxxx欧美| 最新国产精品拍自在线播放| 国产精品久久久久久五月尺| 久久资源在线| 在线视频中文亚洲| 免费成人av在线看| 亚洲欧美日产图| 亚洲国产日韩欧美在线动漫| 国产精品入口麻豆原神| 欧美freesex8一10精品| 亚洲欧美在线一区| 亚洲欧洲午夜| 久热爱精品视频线路一| 亚洲欧美国产精品桃花| 亚洲精品国产精品乱码不99| 一本大道久久a久久精品综合| 欧美日韩在线高清| 亚洲午夜视频在线观看| 亚洲高清一二三区| 久久久久久亚洲精品不卡4k岛国| 一本久久综合| 亚洲国产99精品国自产| 国产欧美亚洲精品| 欧美三级午夜理伦三级中视频| 久久午夜国产精品| 欧美一区国产一区| 亚洲永久免费| 一本久久精品一区二区| 亚洲激情社区| 亚洲成色777777女色窝| 久久乐国产精品| 欧美在线观看一区| 亚洲欧美视频一区| 中日韩在线视频| 日韩一区二区免费高清| 亚洲国产精品电影| 国产欧美一区二区三区视频| 欧美日韩久久| 欧美激情中文不卡| 欧美成人精品一区二区三区| 老司机一区二区| 久久精彩视频| 欧美一级视频| 午夜精品福利一区二区蜜股av| 亚洲视频二区| 亚洲资源av| 亚洲综合色在线| 亚洲欧美另类中文字幕| 亚洲调教视频在线观看| 中文av一区特黄| 亚洲视频在线一区观看| 亚洲午夜影视影院在线观看| 亚洲男人影院| 欧美一区二视频| 久久国产欧美精品| 久久国产精品久久久久久久久久| 久久精品99| 噜噜噜91成人网| 玖玖在线精品| 欧美黄色影院| 欧美午夜一区二区三区免费大片| 国产精品久久久久久av下载红粉| 国产精品免费一区二区三区在线观看| 国产精品二区影院| 国产日本欧美在线观看| 国产在线高清精品| 亚洲电影成人| 日韩一级网站| 午夜精彩视频在线观看不卡| 久久久国产精品一区| 欧美成熟视频| aa国产精品| 久久福利一区| 欧美国产一区在线| 欧美亚男人的天堂| 国产午夜精品视频| 在线观看国产成人av片| 日韩午夜三级在线| 亚洲欧美另类久久久精品2019| 午夜精品美女自拍福到在线| 久久久久国产一区二区| 欧美电影免费| 一本色道久久综合亚洲二区三区 | 亚洲免费av网站| 亚洲欧美精品在线| 卡一卡二国产精品| 国产精品乱人伦中文| 亚洲电影免费观看高清| 亚洲午夜av在线| 久久久精品午夜少妇| 亚洲国产精品黑人久久久| 亚洲一区二区三区欧美 | 欧美一区二区视频在线观看| 久久免费视频网站| 欧美自拍偷拍| 欧美日韩国内自拍| 国产综合色在线视频区| 亚洲精品乱码久久久久久按摩观 | 日韩视频免费看| 欧美一区二区三区电影在线观看| 欧美激情一区二区久久久| 亚洲色图在线视频| 久久久精品视频成人| 欧美日韩中文字幕在线视频| 影音先锋久久久| 香蕉成人伊视频在线观看| 欧美激情二区三区| 欧美一级午夜免费电影| 欧美日韩亚洲一区| 激情欧美一区二区三区| 亚洲欧美日韩国产综合精品二区| 欧美激情按摩在线| 久久国产精品亚洲77777| 欧美性猛交99久久久久99按摩| 亚洲电影中文字幕| 久久精品国产亚洲一区二区三区| 亚洲乱码精品一二三四区日韩在线 | 韩日精品视频一区| 亚洲欧美日韩国产中文| 亚洲片在线观看| 米奇777超碰欧美日韩亚洲| 国产精品日韩在线观看| 99国产精品视频免费观看| 久久久久国产一区二区| 亚洲一区二区三区四区在线观看 | 久久野战av| 国产午夜亚洲精品不卡| 亚洲综合精品四区| 亚洲精品乱码久久久久久久久| 久久偷看各类wc女厕嘘嘘偷窃| 国产美女精品视频| 亚洲欧美综合v| 亚洲视频在线看| 欧美日韩成人激情| 日韩视频免费观看高清在线视频| 欧美国产日韩a欧美在线观看| 久久精品国产亚洲一区二区三区| 国产欧美日韩免费| 欧美一级成年大片在线观看| 亚洲香蕉伊综合在人在线视看| 欧美日本国产一区| 亚洲免费观看| 亚洲精品免费一区二区三区| 欧美激情第二页| 99www免费人成精品| 亚洲精品一区中文| 欧美日韩在线视频一区| 亚洲一区二区三区在线看|