Unity3D 實現簡單的語音聊天 [Android版本]


上次簡單說了iOS版本的聊天功能 Unity3D 實現簡單的語音聊天 [iOS版本]

這次我們接着上篇來說下Android版本來實現簡單的語音聊天,流程和iOS基一樣的 @_@

 

在這里我們可能會遇到一下問題:

1.U3D C# 與 Android Java之間是怎么通訊

2.Android怎么調用原生的錄音功能和播放功能

 

好,我們逐一解決問題

 

1.U3D C# 與 Android Java之間是怎么通訊

 

相比iOS,Android這邊會比較簡單些

再C# 中這樣調用Android的接口

AndroidJavaClass javaclass = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
AndroidJavaObject javaobject = javaclass.GetStatic<AndroidJavaObject>(“currentActivity");

javaobject.Call (methodName);

 

所以在com.unity3d.player.UnityPlayer中定義的接口都可以通過上述方法去調用,值得注意的是,如果要U3D直接修改Android界面上的東西,不用能直接在接口中修改,可以在Android接口中用這樣調用

this.runOnUiThread(new Runnable() {

@Override

public void run() {

//調用Android接口邏輯

}

});

 

或者是用Message

//設置消息

Message msg = new Message();

msg.what =“methodName”;

 

Handler messageHandler = new Handler() {

public void handleMessage(Message e){

//調用Android接口邏輯

}

//發送事件消息

messageHandler.sendMessage(msg);

 

好了,反過來,如果Android要發送消息給U3D,可以調用unity-class.jar提供的接口

UnityPlayer.UnitySendMessage(String a,String b,String c);

和iOS一樣,第一個參數是場景中的GameObject名字,第二個參數是組件中的方法名字,第三個參數是任意的消息參數。這樣,U3D和Android相互間的消息發送就完成了。

 


2.Android怎么調用原生的錄音功能和播放功能

 

與iOS類似,我們需要引入安卓原生的錄音類和音頻播放類

import android.media.MediaRecorder;

import android.media.MediaPlayer;


MediaRecorder

我們創建MediaRecorder對象來錄制音頻

MediaRecorder  mRecorder = new MediaRecorder(); mRecorder.setAudioSource(MediaRecorder.AudioSource.MIC); // 設置音頻來源(MIC表示麥克風) mRecorder.setOutputFormat(MediaRecorder.OutputFormat.RAW_AMR); // 設置音頻輸出格式

mRecorder.setOutputFile(voiceDataPath);//設置輸出文件 mRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB); // 設置音頻編碼為AMR

mRecorder.setMaxDuration(20300);//設置錄音時長

mRecorder.setAudioEncodingBitRate(4000);

mRecorder.setAudioSamplingRate(8000);//采樣率

mRecorder.prepare();

//開始錄制

mRecorder.start();

 

//結束錄制

mRecorder.stop();

mRecorder.release();

 

voiceDataPath路徑為錄制文件輸出路徑,與iOS不同,錄制文件格式可以直接輸出為ARM格式。同時可以設置錄制事件的回調函數

mRecorder.setOnInfoListener(new MediaRecorder.OnInfoListener() {

//設置回調

@Override

public void onInfo(MediaRecorder arg0, int arg1, int arg2) {

  if(arg1 == MediaRecorder.MEDIA_RECORDER_INFO_MAX_DURATION_REACHED){//到達最長錄音時間限制

    speakStop( );

  }

}

});

  

MediaPlayer

播放音頻更加簡單,傳入音頻文件路徑就可以了

MediaPlayer mPlayer = new MediaPlayer();

mPlayer.setDataSource(voiceDataPath);

mPlayer.prepare();

//開始播放

mPlayer.start();

 

//結束播放

mPlayer.stop();

mPlayer.release();

 也可以設置播放完成的事件回調

mPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {//播放完畢回調監聽

@Override

public void onCompletion(MediaPlayer arg0) {

  stopPlay( );

}

});

與iOS不同,Android中不需要把ARM格式的音頻轉為wav,MediaPlayer類可以直接播放ARM格式的音頻。

 

好了,Android版的語音聊天大概就點到這里來了,流程基本和iOS的類似,只是Android的API可以直接支持ARM音頻格式的錄制和播放,用起來也相當的方便。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM