Unity3D 实现简单的语音聊天 [Android版本]

上次简单说了iOS版本的聊天功能 Unity3D 实现简单的语音聊天 [iOS版本]

这次我们接着上篇来说下Android版本来实现简单的语音聊天,流程和iOS基一样的 @[email protected]

在这里我们可能会遇到一下问题:

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音频格式的录制和播放,用起来也相当的方便。

时间: 2024-10-13 02:44:31

Unity3D 实现简单的语音聊天 [Android版本]的相关文章

Unity3D 实现简单的语音聊天 [iOS版本]

现在很多手机游戏中的聊天系统都加入语音聊天的功能,相比于传统的文字聊天,语音聊天在MMORPG中显得尤为重要,毕竟直接口头交流总比你码字快得多了,也更直观些. 实现语音聊天的方法很多,U3D中有不少第三方的插件,提供了很多功能强大的语音功能,具体有哪些我就不一一举例了(其实我都没用过- -!),本文想从一个原生开发的角度去实现一个简单的语音聊天功能. 语音聊天大概流程如图: 上图中可以看到,客户端录制语音数据,并进行编码转换,数据压缩,然后把语音数据发送到语音服务器,语音服务器进行派发功能(语音

实现一个简单的语音聊天室(多人语音聊天系统)

多人语音聊天,或语音聊天室,是即时通信应用中常见的功能之中的一个,比方,QQ的语音讨论组就是我们用得比較多的. 本文将基于最新版本号的OMCS(V3.5)实现一个简单的语音聊天室,让多个人能够进入同一个房间进行语音沟通.当然,在此之前,您必须对OMCS有所了解,而且已经阅读.理解了OMCS 开发手冊(08) -- 多人语音/视频这篇文章的内容.先看看Demo执行效果截图:        从左到右的三张图各自是:登录界面.语音聊天室的主界面.标注了各个控件的主界面. 一. C/S结构 非常明显,我

实现一个简单的语音聊天室(源码)

语音聊天室,或多人语音聊天,是即时通信应用中常见的功能之一,比如,QQ的语音讨论组就是我们用得比较多的. 这篇文章将实现一个简单的语音聊天室,让多个人可以进入同一个房间进行语音沟通.先看运行效果截图:         从左到右的三张图分别是:登录界面.语音聊天室的主界面.标注了各个控件的主界面. (如果觉得界面太丑,没关系,后面下载源码后,你可以自己美化~~) 一. C/S结构 很明显,我这个语音聊天室采用的是C/S结构,整个项目结构相对比较简单,如下所示: 该项目的底层是基于OMCS构建的.这

C#实现多人语音聊天

在上一篇文章 实现一个简单的语音聊天室(多人语音聊天系统)中,我用C#实现了一个简单的语音聊天室,并给出了源码下载.虽然有源码,但是很多朋友反映,理解起来还是有些模糊.不够清楚.现在想来,是因为我忘了先将底层的原理介绍一下,语音聊天室是基于OMCS实现的,那么这里我就补上OMCS中与多人语音视频相关部分的原理及方案的介绍. 一. 动态组 OMCS采用"动态组"的模式来实现多人语音/视频聊天组,所谓"动态组",就是在运行时动态创建和销毁的组,其包含如下几层意思: (1

实现一个简单的视频聊天室(源码)

在 <实现一个简单的语音聊天室>一文发布后,很多朋友建议我也实现一个视频聊天室给他们参考一下,其实,视频聊天室与语音聊天室的原理是差不多的,由于加入了摄像头.视频的处理,逻辑会繁杂一些,本文就实现一个简单的多人视频聊天系统,让多个人可以进入同一个房间进行语音视频沟通.先看看3个人进行视频聊天的运行效果截图:       上面两张截图分别是:登录界面.标注了各个控件的视频聊天室的主界面. 一. C/S结构 很明显,我这个语音聊天室采用的是C/S结构,整个项目结构相对比较简单,如下所示: 同语音聊

Android仿微信语音聊天界面

有段时间没有看视频了,昨天晚上抽了点空时间,又看了下鸿洋大神的视频教程,又抽时间写了个学习记录.代码和老师讲的基本一样,网上也有很多相同的博客.我只是在AndroidStudio环境下写的. --主界面代码-- public class MainActivity extends Activity { private ListView mListView; private ArrayAdapter<Recorder> mAdapter; private List<Recorder>

Android仿微信语音聊天

完整代码下载地址: Android仿微信语音聊天 效果图: 分析: 1.自定义Button中要复写onTouchEvent的DOWN,MOVE,UP三种状态,对正常按下,想要取消发送,抬起三种动作进行侦听处理. 2.Dialog共有三种状态,除上图所示的两种外,还有一个录音时间过短的提示.其中录音状态中的音量可以变化. 3.显示录音的ListView的item中有一个录音时长(TextView),一个播放动画(View)和一个头像(ImageView). 4.录音类里有两个成员:录音长度,录音路

unity语音聊天--亲加通讯云(Android/iOS)---android

注:最近项目需求要做语音聊天这一块的功能,想了几种方案,最后还是决定用第三方服务,毕竟日活50W以下亲加是免费的! 亲加官方给了一定的技术文档,但是遇到很多坑,我顺便都介绍一下 废话不多说,先介绍Android接入,下一章介绍iOS. 1.下载开发包 亲加开发包下载地址 http://www.gotye.com.cn/download.html 即时通讯云包含丰富的聊天功能接口,不用语音通讯云了,下这个开发包 Android开发的朋友们下android的包,android的接入官方文档很详细,而

Android 即时语音聊天工具 开发

使用融云SDK 1. 功能需求分析 1.1 核心功能需求: * 即时通讯 * 文字聊天 * 语音聊天 1.2 辅助功能需求: * 注册.登录 * 好友添加功能 * 好友关系管理 2. 融云即时通讯平台简介 2.1 平台简介, * 即时通讯,实时网络 提供商 * 客户端IM组件, 客户端IM基础库, WebSDK,服务端 REST API 2.2 平台架构介绍 我们需要关系 App, App Server 2.3 概念介绍 * App Key/Secret:  有生产环境 和 开发环境区别 * T