本篇文章给大家谈谈语音通讯api,以及语音通讯app对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。
今天给各位分享语音通讯api的知识,其中也会对语音通讯app进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!
本文目录一览:
百度语音API的使用
//导入头文件
#import "BDRecognizerViewController.h"
#import "BDRecognizerViewDelegate.h"
#import "BDVoiceRecognitionClient.h"
#import "BDVRRawDataRecognizer.h"
#import "BDVRFileRecognizer.h"
#import "
jsONKit.h"
//JSONKit关闭ARC
-fno-objc-arc
//添加库
libc++.tbd , libz.1.2.5.tbd , AudioToolbox.framework , AVFoundation.framework , CFNetwork.framework , CoreLocation.framework , CoreTelephony.framework , SystemConfiguration.framework , GLKit.framework
//遵守 BDRecognizerViewDelegate 的协议
//定义一些
属性 BDRecognizerViewController *bdrv;
BDRecognizerViewParamsObject *bdvp;
UILabel *label;//请自行初始化
UIButton *button;//请自行初始化
/在 viewDidLoad 中将API初始化并使用
BDTheme *me = [BDTheme lightRedTheme];
bdrv = [[BDRecognizerViewController alloc]initWithOrigin:CGPointMake(20, 100) withTheme:me];
bdrv.enableFullScreenMode = YES;
bdrv.delegate = self;
bdvp = [[BDRecognizerViewParamsObject alloc]init];
bdvp.apiKey = @"pgk2mk3AZl2Uz5y6cydQTmDR";
bdvp.secretKey = @"62c14997cf54b83c94fad2f93d8bc88b";
//在按钮点击事件中
[bdrv startWithParams:bdvp];
//调用 BDRecognizerViewDelegate代理中的
方法 //语音识别结果返回
-(void)onEndWithViews:(BDRecognizerViewController *)aBDRecognizerViewController withResults:(NSArray *)aResults{
//将获取的文字添加到文本控件上
_label.text = [[[[aResults lastObject]lastObject]allKeys]lastObject];
}
//录音数据返回
-(void)onRecordDataArrived:(NSData *)recordData sampleRate:(int)sampleRate{
}
//录音结束
- (void)onRecordEnded{
}
手机网页上语音实时通话,请问怎么实现,不是下软件,而是使用api
作为独立开发者或想缩短音视频开发周期的公司来说
语音通讯api,想要在Android平台下实现音视频通信
语音通讯api,最快捷的方法是寻找开源项目或调用其
语音通讯api他公司API。之所以这么说是因为音视频通信技术涉及到底层音视频采集、解码、 FFmpeg(音视频处理解决方案)、媒体流传输协议等太多太多相关技术知识点。试了 几个开源项目,视频差强人意,语音与视频不同步等不稳定因素。因此
语音通讯api我把目光放到其他公司的API上(点击-demo
程序)。demo程序API提供了一系列纯Java语言的调用接口,通过JNI即可调用内核共享库(.so 类似win32 的dll),根据官方开发文档我很快就实现音视频通信,下面是我在调用其API的经验总结
(四)Android基于UDP的多客户端语音通信
在前三篇得基础上,这次研究了组播功能。非常感谢https://blog.csdn-/jspping/article/details/64438515得贡献!
组播也就是通过MulticastSocket来进行开发,与DatagramSocket比较相类似,这次依然是用两个线程进行实现,发送线程MultiSendThread和接收线程MultiReceiveThread。废话不多说,开始码:
(一)MultiSendThread:
(1)初始化MuticastSocket
// 侦听的端口
try {
multicastSocket = new MulticastSocket(8082);
// 使用D类地址,该地址为发起组播的那个ip段,即侦听10001的套接字
address = InetAddress.getByName("239.0.0.1");
} catch (IOException e) {
e.printStackTrace();
}
(2)初始化AudioRecord
protected LinkedList<byte[] mRecordQueue;
int minBufferSize;
private static AcousticEchoCanceler aec;
private static AutomaticGainControl agc;
private static NoiseSuppressor nc;
AudioRecord audioRec;
byte[] buffer;
@RequiresApi(api = Build.VERSION_CODES.JELLY_BEAN)
private void initAudio() {
//播放的采样频率 和录制的采样频率一样
int sampleRate = 44100;
//和录制的一样的
int audioFormat = AudioFormat.ENCODING_PCM_16BIT;
//录音用输入单声道 播放用输出单声道
int channelConfig = AudioFormat.CHANNEL_IN_MONO;
minBufferSize = AudioRecord.getMinBufferSize(
sampleRate,
channelConfig, AudioFormat.ENCODING_PCM_16BIT);
System.out.println("****RecordMinBufferSize = " + minBufferSize);
audioRec = new AudioRecord(
MediaRecorder.AudioSource.MIC,
sampleRate,
channelConfig,
audioFormat,
minBufferSize);
buffer = new byte[minBufferSize];
if (audioRec == null) {
return;
}
//声学回声消除器 AcousticEchoCanceler 消除了从远程捕捉到音频信号上的信号的作用
if (AcousticEchoCanceler.isAvailable()) {
aec = AcousticEchoCanceler.create(audioRec.getAudioSessionId());
if (aec != null) {
aec.setEnabled(true);
}
}
//自动增益控制 AutomaticGainControl 自动恢复正常捕获的信号输出
if (AutomaticGainControl.isAvailable()) {
agc = AutomaticGainControl.create(audioRec.getAudioSessionId());
if (agc != null) {
agc.setEnabled(true);
}
}
//噪声抑制器 NoiseSuppressor 可以消除被捕获信号的背景噪音
if (NoiseSuppressor.isAvailable()) {
nc = NoiseSuppressor.create(audioRec.getAudioSessionId());
if (nc != null) {
nc.setEnabled(true);
}
}
mRecordQueue = new LinkedList<byte[]();
}
(3)开始录制,并实时发送出去
@Override
public void run() {
if (multicastSocket == null)
return;
try {
audioRec.startRecording();
while (true) {
try {
byte[] bytes_pkg = buffer.clone();
if (mRecordQueue.size() = 2) {
int length = audioRec.read(buffer, 0, minBufferSize);
// 组报
DatagramPacket datagramPacket = new DatagramPacket(buffer, length);
// 向组播ID,即接收group /239.0.0.1 端口 10001
datagramPacket.setAddress(address);
// 发送的端口号
datagramPacket.setPort(10001);
System.out.println("AudioRTwritePacket = " + datagramPacket.getData().toString());
multicastSocket.send(datagramPacket);
}
mRecordQueue.add(bytes_pkg);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
(二)MultiReceiveThread
(1)初始化MulticastSocket
// 接收数据时需要指定监听的端口号
try {
multicastSocket = new MulticastSocket(10001);
// 创建组播ID地址
InetAddress address = InetAddress.getByName("239.0.0.1");
// 加入地址
multicastSocket.joinGroup(address);
} catch (IOException e) {
e.printStackTrace();
}
(2)初始化AudioTrack
byte[] buffer;
AudioTrack audioTrk;
private void initAudioTracker() {
//扬声器播放
int streamType = AudioManager.STREAM_MUSIC;
//播放的采样频率 和录制的采样频率一样
int sampleRate = 44100;
//和录制的一样的
int audioFormat = AudioFormat.ENCODING_PCM_16BIT;
//流模式
int mode = AudioTrack.MODE_STREAM;
//录音用输入单声道 播放用输出单声道
int channelConfig = AudioFormat.CHANNEL_OUT_MONO;
int recBufSize = AudioTrack.getMinBufferSize(
sampleRate,
channelConfig,
audioFormat);
System.out.println("****playRecBufSize = " + recBufSize);
audioTrk = new AudioTrack(
streamType,
sampleRate,
channelConfig,
audioFormat,
recBufSize,
mode);
audioTrk.setStereoVolume(AudioTrack.getMaxVolume(),
AudioTrack.getMaxVolume());
buffer = new byte[recBufSize];
}
(3)开始接收,并进行实时播放
@Override
public void run() {
if (multicastSocket == null)
return;
//从文件流读数据
audioTrk.play();
// 包长
while (true) {
try {
// 数据报
DatagramPacket datagramPacket = new DatagramPacket(buffer, buffer.length);
// 接收数据,同样会进入阻塞状态
multicastSocket.receive(datagramPacket);
audioTrk.write(datagramPacket.getData(), 0, datagramPacket.getLength());
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
(三)开始测试
MultiSendThread multiSendThread;
MultiReceiverThread multiReceiverThread;
@OnClick({R.id.btnSend, R.id.btnReceive})
public void onViewClicked(View view) {
switch (view.getId()) {
case R.id.btnSend:
if (multiSendThread == null) {
multiSendThread = new MultiSendThread();
}
new Thread(multiSendThread).start();
break;
case R.id.btnReceive:
if (multiReceiverThread == null) {
multiReceiverThread = new MultiReceiverThread();
}
new Thread(multiReceiverThread).start();
break;
}
}
机器人语音识别一般用什么api
百度语音识别通过RESTAPI的方式给开发者提供一个通用的HTTP接口,基于该接口,开发者可以轻松的获取语音识别能力,本文档描述了使用语音识别服务RESTAPI的方法。优点:较之开发者常用的获取语音识别功能的方法,本方法最大的优势是轻量级
关于语音通讯api和语音通讯app的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。
语音通讯api的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于语音通讯app、语音通讯api的信息别忘了在本站进行查找喔。
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
暂时没有评论,来抢沙发吧~