语音通讯api(语音通讯app)

网友投稿 1023 2022-12-22

本篇文章给大家谈谈语音通讯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小时内删除侵权内容。

上一篇:小程序转成app(小程序转成二维码)
下一篇:前端框架发展史(前端框架历史)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~