当前位置:首页 » 安卓系统 » android即时语音

android即时语音

发布时间: 2022-04-26 01:00:23

1. android 局域网实时语音聊天音频流用什么编

一般如果应用需要进行大量数学运算时,推荐使用JNI在java中调用C/C++编写的动态库,Java只负责逻辑和界面用户操作的相应,

你这个APP很简单分为以下几个模块

  1. 界面,与用户进行交互,需要具备Android界面的编程

  2. 网络传输,需要掌握Java网络socket编程的知识,使用TCP传输编码后的音频帧;

  3. 语音编解码模块,由两部分构成。一是c/c++编写的动态库,二是Java声明本地native函数,并将c/c++实现的native函数进行封装,方便Java调用。这部分需要掌握Java中JNI使用的知识,c/c++编程,语音处理的方面的知识,例如数字信号处理。

而c/c++写的库一般不是我们自己实现的,而是引入第三方开源代码,这里的选择有很多,我了解到的有

  1. ffmeg,很常用,就连暴风影音和QQ音乐据说用了他们的开源库,而没有遵守开源协议而进入了他们的黑名单。

  2. speex,是国外的开源库,现已被Opus取代,但是speex多了一个预处理功能,例如降噪、自动增益、回音消除等等。

  3. Superpowered,跨平台的,低延迟,功能多。

补充一点,Android现已支持纯C++的开发了,这个就需要NDK的配合,写出NativeActivity,然后就可以直接在C++中调用第三方的库了,而不用JNI这样繁琐,但是由于刚出来,教程不多,需要具备很多嵌入式、音视频采集处理的开发经验。

2. android 怎么实现语音聊天

可以用第三方即时通讯云服务商,也可以自己开发实现。看你公司的能力和需求。自己开发耗时耗人耗精力。用第三方,比如融云,这里就举个融云的例子吧。 可以直接集成融云的sdk,然后直接实现你说的功能。优点是快速方便,服务稳定。缺点是:不是自己开发的,如果出现问题需要提工单解决。

3. 安卓有比较好的语音助手就像siri一样的吗

安卓有语音助手,以OPPO手机为例,语音助手的使用方法如下:

一、打开手机,在桌面上找到“设置”一项,点击进入。

4. 安卓手机能语音读短信的软件 要那种可以随时都能读的

短信听听
短信听听是一款免费的
安卓手机
短信语音朗读软件,安装上它以后再也不用看短信读短信了,收到短信后一点,就会用语音播放出来。

5. android上如何实时语音聊天

android开放实现语音通话最快的方式直接用现成SDK,可以试试ZEGO即构科技的实时语音SDK,实现流程也比较便捷,通过四行代码,三十分钟就可以搭建聊天场景了

6. android实现语音聊天功能难不难

如果是打算自己从零开始研发,那难不难得看自己团队的技术水平,觉得有难度的话,不如试一试和第三方开发商合作,诸如有20年经验的ZEGO即构科技团队,他们自主研发了实时语音SDK,实现语音聊天功能很简单的,直接接入SDK就可以了。

7. 安卓 能用mediarecorder和mediaplayer实现即时语音吗

android语音录制可以通过MediaRecorder和AudioRecorder。
MediaRecorder本来是多媒体录制控件,可以同时录制视频和语音,当不指定视频源时就只录制语音;AudioRecorder只能录制语音。
二者录制的区别在于,MediaRecorder固定了语音的编码格式,具体平台支持类型可以在http://developer.android.com/guide/appendix/media-formats.html这里查看,而且使用时指定输出文件,在录制的同时系统将语音数据写入文件。AudioRecorder输出的是pcm,即原始音频数据,使用者需要自己读取这些数据,这样的好处是可以根据需要边录制边对音频数据处理,读取的同时也可以保存到文件进行存储

语音的播放可以使用MediaPlayer和AudioTracker,与上面的对应,MediaPlayer可以播放各种多媒体文件,而AudioTracker只能播放pcm数据,使用者手动将数据连续写入进行播放。

MediaRecorder的使用
[java] view plain print?
private void startRecording() {
mRecorder = new MediaRecorder();
mRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
mRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
mRecorder.setOutputFile(mFileName);
mRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);

try {
mRecorder.prepare();
} catch (IOException e) {
Log.e(LOG_TAG, "prepare() failed");
}

mRecorder.start();
}

AudioRecorder录制语音

[java] view plain print?
int suggestBufferSize = AudioRecord.getMinBufferSize(mSampleRate,
mChannelConfig, mAudioFormat);
mAudioRecord = new AudioRecord(AudioSource.MIC, mSampleRate,
mChannelConfig, mAudioFormat, suggestBufferSize);
mAudioRecorder.startRecording();
byte[] inByteBuf = new byte[BUF_SIZE]
while (runFlag) {
int readSize = mAudioRecord.read(inByteBuf, 0, inByteBuf.length);
}
mAudioRecorder.stop();
mAudioRecord.release();

上面是AudioRecorder的完整使用过程,AudioRecorder实例化的时候需要指定录音源、采样率等音频参数,最后一个是音频数据缓冲区大小,需要通过AudioRecord.getMinBufferSize()来得到缓冲区的最小值,如果实例化时参数小于这个最小值,那么AudioRecoder将创建失败。当然大于这个值肯定可以。之后通过read将缓冲区的数据读出来。
之前一直以为读取时使用的byte数组大小必须和缓冲区的大小一致,但实际并不是这样,看下AudioRecorder构造函数中对bufferSizeInBytes的解释:
bufferSizeInBytes the total size (in bytes) of the buffer where audio data is written to ring the recording. New audio data can be read from this buffer in smaller chunks than this size.
也就是说缓冲区只是系统用来临时存放音频数据的,读取时可以每次读取较小的块,然后多次读取。

AudioRecorder还有一个方法setPositionNotificationPeriod (int periodInFrames)。这个方法可以在读取指定数据后发出一个回调,需要配合 (AudioRecord. listener),当读取的总数据是指定的periodInFrames的整数倍时就会调用listner的方法onPeriodicNotification.

[java] view plain print?
new () {

@Override
public void onPeriodicNotification(AudioRecord recorder) {
// TODO Auto-generated method stub

}

@Override
public void onMarkerReached(AudioRecord recorder) {
// TODO Auto-generated method stub

}
};

这个特性使用时有个注意点,就是回调只会发生在实际数据读取之后,也就是使用者通过read方法读取出periodInFrames这么多数据时才会触发这个回调,否则什么也不会发生。

MeidaPlayer播放音频文件

[java] view plain print?
MediaPlayer mediaPlayer = new MediaPlayer();
mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
mediaPlayer.setDataSource(getApplicationContext(), myUri);
mediaPlayer.prepare();
mediaPlayer.start();
mediaPlayer.stop();
mediaPlayer.release();

其中setDataSource()有多个覆写,如下
void setDataSource(String path)
Sets the data source (file-path or http/rtsp URL) to use.
void setDataSource(Context context, Uri uri, Map<String, String> headers)
Sets the data source as a content Uri.
void setDataSource(Context context, Uri uri)
Sets the data source as a content Uri.
void setDataSource(FileDescriptor fd, long offset, long length)
Sets the data source (FileDescriptor) to use.
void setDataSource(FileDescriptor fd)
Sets the data source (FileDescriptor) to use.
可以看到不同的输入参数指定了数据的来源。其中setDataSource(FileDescriptor fd, long offset, long length)可以指定开始读取的偏移量和长度。
之所以会注意到这个参数是因为在实际使用时有一个需求,即可以播放WAV文件,又可以播放MP3文件,而且能够限定播放开始和结束的位置。
对于MP3文件使用setDataSource(FileDescriptor fd, long offset, long length)是完全可行的,像这样

[java] view plain print?
mPlayer.reset();
mPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
mPlayer.setDataSource(
new FileInputStream(mSoundFile.getFilePath()).getFD(),
startByte, endByte - startByte);
[java] view plain print?
mPlayer.prepare();

但WAV文件却完全没有效果,是什么原因呢,看下官方对setDataSource(FileDescriptor fd, long offset, long length)的解释
Sets the data source (FileDescriptor) to use. The FileDescriptor must be seekable (N.B. a LocalSocket is not seekable). It is the caller's responsibility to close the file descriptor. It is safe to do so as soon as this call returns.

注意到该方法指定的文件类型必须是seekable的,mp3文件属于这种类型(tips:不知道还有没有其他类型),因为mp3内部是按帧存储的,可以指定到具体的帧位置,而WAV文件音频数据是pcm,也就是一大片完整的数据,要对wav文件指定开始播放位置,需要使用另一个方法seekTo (int msec)。这里指定的参数是毫秒。

开始时间可以指定了,那结束播放的时间如何指定?

MediaPlayer有另外两个方法:getDuration ()和getCurrentPosition (),这两个返回的都是时间信息,前者返回总的播放时间,后者返回当前播放位置的时间。

那返回的结果对于mp3和wav是否会不同呢?会!
对WAV类型,getDuration返回的是音频文件的总时间,getCurrentPosition返回的是从文件起始到现在的播放时间;而对mp3类型,getDuration返回的是startByte和endByte之间播放的时间间隔,getCurrentPosition返回从startByte到现在的播放时间。想一下原因也可以明白,因为MP3是可以精确指定起始位置的,所以所有计算都可以从指定的位置开始,而wav文件一切只能从最开始的位置计算。

8. 有没有不用点它只要一说话就能出来的安卓手机语音助手

目前还没有。

因为要考虑待机的时候用电量的问题,另外语音助手如果一直在线,那么周围的环境声都会被语袭音助手识别,这样会导致在不知道的情百况下语音助手被打开,可能会导致误操作,所以语音助手没度有设置为后台自动运行而是需要人工激活。


(8)android即时语音扩展阅读:

1、YIYA语音

YIYA语音是腾讯在语音领域的一项拓展功能,融合了语音搜索、语音聊天、电话短信以及内部应用调用功能,相比其他语音助手YIYA语音人性化功能凸显。

例如可以让YIYA查油价、股价、美国时间、区号甚至一道菜的做法等版,当然如果你的问题它回答不了,是可以用语音告诉它正确答案的。

除了生活化定位,YIYA还能解放双手。比如:用语音说“发短信给XX”,短信输入界面即可调出,权短信内容和发送命令都可以通过语音完成,解除了用户的文字输入烦恼。

2、Cortana

中文名:微软小娜。

微软发布的全球第一款个人智能助理。它“能够了解用户的喜好和习惯”,“帮助用户进行日程安排、问题回答等”。Cortana 可以说是微软在机器学习和人工智能领域方面的尝试。

微软想实现的事情是,手机用户与小娜的智能交互,不是简单地基于存储式的问答,而是对话。

它会记录用户的行为和使用习惯,利用云计算、搜索引擎和“非结构化数据”分析,读取和“学习”包括手机中的文本文件、电子邮件、图片、视频等数据,来理解用户 的语义和语境,从而实现人机交互。

假如手机中记录的日程显示将要参加会议,那么不需任何操作,Cortana 到时就会自动将手机调至会议状态。这也是微软的研究,从个人计算机(personal computer)走向个人计算(personal computing)的开始。

3、灵犀语音助手

灵犀语音助手(Lingxi Voice Asisstant),一款普通话综合识别率最高的智能语音软件,是国内市场占有率第一的中文语音助手。

由中文语音领导者科大讯飞和中国移动联合推出,采用全球最先进语音识别技术且拥有丰富本土化服务,识别准确,唤醒迅速,特别针对中文口音问题进行识别优化。

灵犀支持全程用语音操控手机,用户在与手机交谈中即可完成打电话、发短信、设提醒、查地图、找美食等日常操作,动口不动手,轻松享受智能生活。

9. 有什么能进行即时语音对讲的安卓手机软件、免费的

来电。“来电
”是深圳市腾讯计算机系统有限公司出品的一个纯粹语音沟通的网络电话应用。以语音为基础,解决在各种移动场景下,用户快速高效沟通和社交的需求。可以通过“来电”, 直接拨打“手机号、座机号、QQ号”及所有通讯录好友。
注:”来电“需要wifi或者流量才能使用。

10. android 实现实时语音功能选择接入哪个音视频sdk好

可以考虑接入即构科技的音视频sdk,他们的音视频sdk平台兼容性强,可覆盖 iOS、Android、Windows、macOS、Web、小程序并支持平台间互通,支持 32 路实时音视频互动,能够为开发者提供便捷接入、高清流畅、低延迟、高并发的音视频服务,而且4 行代码极速接入, 30 分钟内即可构建完毕。

热点内容
韩服lol挂机脚本 发布:2025-05-15 12:42:56 浏览:460
监控存储服务器如何调试 发布:2025-05-15 12:36:30 浏览:217
一万级净化车间有哪些配置 发布:2025-05-15 12:16:41 浏览:97
javazip解压加密 发布:2025-05-15 12:15:02 浏览:941
dnf服务器存放什么信息 发布:2025-05-15 12:11:07 浏览:216
办公室视频剧本脚本 发布:2025-05-15 12:03:51 浏览:491
编译失败什么意思 发布:2025-05-15 11:58:18 浏览:87
lcs脚本官网 发布:2025-05-15 11:56:15 浏览:88
三国志战略版打9级矿什么配置 发布:2025-05-15 11:41:29 浏览:953
安卓加速器怎么关 发布:2025-05-15 11:38:16 浏览:466