一、创建Unity项目
打开Unity游戏编辑器界面,在导航菜单栏中选择File ---> New Project菜单项,在弹出界面中选择Create new Project页面,将项目名命名为MobilityModel,然后再点击Create Project,完成项目的创建。
然后点击保存(Ctrl+S)保存场景。
二、构建模型
在Hierarchy视图中分别创建游戏对象Plane(面板)、Cube(立方体)、Sphere(球体)、Cylinder(圆柱体)、Capsule(胶囊体),然后鼠标拖动创建的游戏对象将他们摆放在合适的位置。
接下来在游戏中添加一个光源,在Hierarchy视图中选择Create--->Directional light菜单项,光源是游戏中非常重要的一个属性,一定要在游戏场景中设置它,如果不设置光源对象,Game视图会非常暗,严重影响游戏的效果。
三、添加脚本
在Project视图中点击Create--->JavaScript菜单项创建一个游戏脚本,将其命名为MobilityModelScript.js,在脚本上编写如下代码:
//模型移动速度 var TranslateSpeed = 10; //模型旋转速度 var RotateSpeed = 1000; //绘制UI界面 function OnGUI(){ //设置GUI背景色 GUI.backgroundColor = Color.red; if(GUI.Button(Rect(10,10,70,30),"向左旋转")){ //向左旋转 transform.Rotate(Vector3.up * Time.deltaTime * (-RotateSpeed)); } if(GUI.Button(Rect(90,10,70,30),"向前移动")){ //向前移动 transform.Translate(Vector3.forward * Time.deltaTime * TranslateSpeed); } if(GUI.Button(Rect(170,10,70,30),"向右旋转")){ //向右旋转 transform.Rotate(Vector3.up * Time.deltaTime * RotateSpeed); } if(GUI.Button(Rect(90,50,70,30),"向后移动")){ //向后移动 transform.Translate(Vector3.forward * Time.deltaTime * (-TranslateSpeed)); } if(GUI.Button(Rect(10,50,70,30),"向左移动")){ //向左移动 transform.Translate(Vector3.right * Time.deltaTime * (-TranslateSpeed)); } if(GUI.Button(Rect(10,50,70,30),"向右移动")){ //向右移动 transform.Translate(Vector3.right * Time.deltaTime * TranslateSpeed); } //显示模型位置信息 GUI.Label(Rect(250,10,200,30),"模型位置"+transform.position); //显示模型旋转信息 GUI.Label(Rect(250,50,200,30),"模型旋转"+transform.rotation); }
上述代码中重要方法和属性如下:
OnGUI()方法用来绘制GUI界面组件。
GUI.Button():设置一个按钮,返回true时表示该按钮被按下。
GUI.Label():设置一个文本框。
transform:为当前绑定模型的变换对象。
transform.Rotate():设置模型旋转。
transform.Translate():设置模型平移。
Time.deltaTime:该数值为一个只读属性,不可修改,表示完成最后一帧的事件,单位为秒。
Vector3:标志一个模型移动或者旋转的方法。
Rect:规定一个矩形区域,用于显示控件。
将编写好的脚本对象,将其从Project视图拖拽到Hierarchy视图中的立方体(Cube)对象上,如果没有提示错误,表示脚本绑定成功,运行游戏后该游戏对象将执行该脚本中的内容。
目前立方体对象与其他模型对象之间是不存在碰撞的,但是运行游戏后,可以控制立方体(Cube)直接穿越另一个模型对象。为了让模型对象之间具有物理的碰撞,需要给模型对象添加一个刚体(Rigidbody)属性,添加方式:首先在Hierarchy视图中选中立方体对象,在Uinty导航菜单栏中选择Component --> Physics
-->Rigidbody菜单项即可。
四、测试运行
点击运行按钮就能看到结果,可以点击显示的六个按钮对象,可以移动Cube(立方体)的位置和旋转。
package="com.example.test" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="8" android:targetSdkVersion="15" /> <application android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <activity android:name=".MainActivity" android:label="@string/title_activity_main" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> <meta-data android:name="android.app.default_searchable" android:value=".SearchActivity" /> </activity> <activity android:name=".SearchActivity" android:label="@string/app_name" > <!-- This intent-filter identifies this activity as "searchable" --> <intent-filter> <action android:name="android.intent.action.SEARCH" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> <!-- This metadata entry provides further configuration details for searches --> <!-- that are handled by this activity. --> <meta-data android:name="android.app.searchable" android:resource="@xml/searchable" /> </activity> </application>
注意 "android.app.searchable" metadata必须在 "results" activity, main activity (或者搜索 activity 包含SearchView) 需要制定 "android.app.default_searchable".
涔熻鏈夊閮ㄧ殑绗笁鏂瑰簱锛坈/c++锛夋潵瑙e喅闂锛屼絾鏄紝鎴戝彧鎯崇敤绾痡ava鏉ヨВ鍐?/p>
聽
鑳屾櫙锛氭垜骞舵病鏈夊お澶氱殑鍏充簬闊宠棰戣В鐮佺殑鐭ヨ瘑锛屼篃涓嶆兂浜嗚В闊抽噺闊宠壊绛変笓涓氭蹇?/p>
聽
*************************************
聽
瑙e喅閫斿緞锛?/p>
鎴戝湪stackoverflow涓婅矊浼兼壘鍒颁簡绛旀锛屽弬瑙侊細http://stackoverflow.com/questions/7955041/voice-detection-in-android-application
甯栧瓙鐨勯棶棰樻弿杩帮細
I want to change my application in this way,聽
when application start work it begin to analyze sound coming from microphone,
if user keep silent application continue to analyze income sound from microphone,
if user start to talk application begin to Record sound coming from microphone聽
and then user finish talking application stops recording and give me back same buffer, with voice data in .wav format.
甯栧瓙鐨勮В鍐筹細
1.闂鐨勬彁鍑鸿€呭拰瑙g瓟鑰呮槸鍚屼竴涓汉锛屼粬璐村嚭浜嗘簮鐮侊紝浣嗘槸鏈変竴浜涘彉閲忕殑鍏蜂綋鏁板€兼病鏈夌粰鍑?br>2.鐒跺悗锛屾垜璨屼技鎵惧埌浜嗛偅涓汉鐨勪富椤碉紝浠栧張璐村嚭浜嗕笉瀹屾暣鐨勬簮鐮侊紙浣嗘槸杩欐浠g爜璁剧疆浜嗕笂闈㈢殑鍙傛暟鍊硷紝铏界劧鏈塪ownload锛屼絾鏄摼鎺ュけ鏁堬級鍙傝锛?a href="http://vitosolutions.wordpress.com/tag/voice/">http://vitosolutions.wordpress.com/tag/voice/
3.鍦ㄦ棭浜涙椂鍊欙紝濂藉績鐨勭綉鍙嬬粰鍑轰簡绫讳技鐨勮В绛旓紝鍙傝锛?a href="http://wapiknow.baidu.com/question/416835390.html?fr=ala3&ssid=0&from=1097d&uid=wiaui_1295711782_6667&pu=usm%401%2Csz%401320_240&bd_page_type=1&tj=zhidao_2_0_10">http://wapiknow.baidu.com/question/416835390.html?fr=ala3&ssid=0&from=1097d&uid=wiaui_1295711782_6667&pu=usm%401%2Csz%401320_240&bd_page_type=1&tj=zhidao_2_0_10
聽
*************************************
聽
宸茬粡鎸夌収stackoverflow鐨勬柟娉曪紝杩涜浜嗗疄鐜帮紝閫氳繃
鍘熶唬鐮佺殑闂锛氬洜涓轰粬鐨勪唬鐮佷腑锛岃缃殑鏄?50杩欎釜闃€鍊硷紝鑰岃繖涓槸姣旇緝澶х殑锛屽線寰€妫€娴嬩笉鍒版甯哥殑璇磋瘽锛屽缓璁紝灏嗗叾璋冩暣鑷?0宸﹀彸
鍏充簬寰幆鐩戝惉锛?br>tom鐚殑璇磋瘽鐩戝惉寰€寰€鏄竴涓惊鐜繃绋嬶紝鑰屽師浠g爜鍙洃鍚竴娆?br>璇ュ惊鐜繃绋嬪彲鑳借繕闇€瑕佸湪鏌愪釜鏃跺埢杩涜闃诲锛岀劧鍚庡湪鏌愪釜鏃跺埢琚敜閱?br>鍦ㄤ笅涓€娆$洃鍚椂锛屽缓璁敓鎴愭柊鐨凙udioRecord锛岃€屼笉鏄埄鐢ㄥ師鏈夌殑锛屽洜涓猴細浠栦細灏嗕笂涓€娆$殑澹伴煶娈嬬暀淇濆瓨鑷虫湰娆$洃鍚紝鑰岃繖浼氬奖鍝嶏細鍚庣画鐨勫綍闊崇殑鎾斁
鍏充簬鍙樺0锛?br>鎴戜篃鏄壘浜嗗緢澶氱殑璧勬枡锛屼笉杩囪矊浼硷紝閮芥帹鑽愮敤soundtouch锛屼粬鏄疞GPL
浠栨槸c/c++缂栧啓锛屾墍浠ワ紝浣犻渶瑕佸皢浠栫紪璇戞垚so
濡傛灉瀵瑰彉澹扮殑鏁堟灉涓嶆槸閭d箞鑻涘埢鐨勮瘽锛屽彟澶栦竴绉嶆帹鑽愶細浣跨敤soundpool锛屾柟娉曪細SoundPool.play(soundid, 1, 1, 0, 0, 2f);銆傞偅灏嗘敼鍙樿閫燂紝绗竴娆″惉璧锋潵锛屽彉鐨勬晥鏋滆繕涓嶉敊
聽
鍏充簬褰曢煶鐨刡ufferSizeInBytes
浣犱篃璁搁€氬父浣跨敤浠ヤ笅鏂瑰紡锛屾潵杩涜鐩戝惉锛?/p>
int bufferSizeInBytes = AudioRecord.getMinBufferSize(SAMPLE_RATE, RECORDER_CHANNELS, RECORDER_AUDIO_ENCODING); audioRecorder = new AudioRecord(AUDIO_SOURCE, SAMPLE_RATE, RECORDER_CHANNELS, RECORDER_AUDIO_ENCODING, bufferSizeInBytes); numberOfReadBytes = audioRecorder.read(audioBuffer, 0, bufferSizeInBytes);
杩欑鏂规硶鍦ㄦ煇浜涙儏鍐典笅锛屾病鏈夐敊璇紝浣嗘槸锛屼綘蹇界暐浜嗕竴浜涚粏鑺傦細
鍦ㄥ崕涓簎8800+鍜屼笁鏄焔alaxy nexus涓婂垎鍒繘琛屼簡瀹為獙锛屽彂鐜帮細鍗庝负涓婏紝涓€鍒囨甯革紝鑰岋紝涓夋槦涓婏紝褰曢煶骞朵笉鏄畬鏁寸殑锛坮ead涓殑鏁版嵁鏄笉瀹屾暣鐨勶級
杩欐槸android纰庣墖鍖栬〃鐜帮紝鍥犱负bufferSizeInBytes灏忎簡锛屾姏鍑轰簡锛歊ecordThread: buffer overflow寮傚父
瑙e喅锛堜笉瀹岀編锛夛細bufferSizeInBytes*=5
聽
---------------------鍗庝附鐨勮繛鎺ョ嚎---------------------锛?/p>
濡備綍鍍弔alking tom閭f牱锛岃嚜鍔ㄧ洃鍚埌澶栭儴澹伴煶锛屽拰锛岀畝鍗曠殑鍙樺0_2
濡備綍鍍弔alking tom閭f牱锛岃嚜鍔ㄧ洃鍚埌澶栭儴澹伴煶锛屽拰锛岀畝鍗曠殑鍙樺0_3
缁戞灦涓€涓獁av
鍥剧墖+闊抽->瑙嗛