使用portaudio实现语音框架

在冰冻期间的主要工作就是使用portaudio实现了一套语音采集框架。

因为工作内容所限,所以一直不好谈这块的内容,现在已经离开冰冻了,终于可以和大家交流下这部分的内容了

	const PaDeviceInfo * info = Pa_GetDeviceInfo(indexInputDevice);
	PaStreamParameters inputStreamParameters;
	inputStreamParameters.device = indexInputDevice;
	inputStreamParameters.channelCount = info->maxInputChannels;
	inputStreamParameters.hostApiSpecificStreamInfo = 0;
	inputStreamParameters.sampleFormat = paFloat32;
	inputStreamParameters.suggestedLatency = info->defaultLowInputLatency;

	info = Pa_GetDeviceInfo(indexOutputDevice);
	PaStreamParameters outputStreamParameters;
	outputStreamParameters.device = indexOutputDevice;
	outputStreamParameters.channelCount = info->maxOutputChannels;
	inputStreamParameters.hostApiSpecificStreamInfo = 0;
	inputStreamParameters.sampleFormat = paFloat32;
	inputStreamParameters.suggestedLatency = info->defaultLowInputLatency;

	PaError err = Pa_OpenStream(&input, &inputStreamParameters, &outputStreamParameters, info->defaultSampleRate, BUFF_LONG, paClipOff, 0, 0);
	if (err != paNoError){
		throw std::exception("open stream err=%d", err);
	}

初始化语音设备

其中一个重要的参数是PaStreamCallback * streamCallback,这个函数是采集和播放的回调函数,用于处理采集到的数据和为播放传入缓冲数据(采集和播放的都是PCM数据),这里和在冰冻不同,我采用了阻塞式的API所以回调函数填写了NULL。

另外2个重要的参数是const PaStreamParameters * inputParameters和const PaStreamParameters * outputParameters

分别是输入设备和输出设备

关于设备的初始化

Pa_GetDeviceCount获取设备数, Pa_GetDeviceInfo获取设备信息

Pa_GetHostApiCount获取主机上可用的接口数目(windows上就是MME和DX Sound),Pa_GetHostApiInfo获取API信息。

PaError sound::read_buff(){
	PaError err = Pa_ReadStream(input, outputbuff, BUFF_LONG);
	if (err == paNoError){
		sigCapture(outputbuff, BUFF_LONG);
	}

	return err;
}

PaError sound::write_buff(char * inputbuff, int bufflong){
	return  Pa_WriteStream(input, inputbuff, BUFF_LONG);
}

采样和播放

和老式的回调不同,阻塞式的读写,具有优雅的可编程性但是性能略低。

另在回调的模式中,和阻塞式不同的是,需要编写2个冗长的回调函数

typedef int PaStreamCallback(const void *input, void *output, unsigned long frameCount, const PaStreamCallbackTimeInfo *timeInfo, PaStreamCallbackFlags statusFlags, void *userData)

在input回调中向写入input缓冲区写入,在output回调中处理output缓冲区中采集到的数据。

  

使用portaudio实现语音框架,布布扣,bubuko.com

时间: 2024-07-30 13:44:34

使用portaudio实现语音框架的相关文章

开源一个语音框架vchat

之前在冰冻做战斗内语音聊天,当时为了进度移植了voicechat,不过从代码质量上,voicechat设计的并不好,尤其是作为一个通用的聊天框架,并不易用.现在总算有空重写一套新的语音聊天库. 在接口上,提供了devices用于遍历设备. class devices{ public: static std::vector<const PaDeviceInfo*> getInputDevices(); static std::vector<const PaDeviceInfo*> g

介绍Facebook语音框架——Wav2letter++篇

语音识别系统一直是深度学习生态系统中最发达的领域之一.当前一代语音识别模型主要依赖于用于声学和语言建模的递归神经网络(RNN)以及用于知识构建的特征提取管道等计算上比较昂贵的工件.虽然已经证明基于RNN的技术在语音识别任务中是有效的,但是它们需要大量的训练数据和计算能力,这通常会导致大多数组织无法使用.最近,Facebook AI Research(FAIR)团队发表了一篇研究论文,提出了一种基于卷积神经网络(CNNs)的新语音识别技术. FAIR团队不仅进行了研究,并开源了Wav2letter

科大讯飞(2) 语音合成(文字转换成语音)

科大讯飞开放平台.SDK下载.添加静态库.初始化见UI进阶 科大讯飞(1) 语音听写(语音转换成文字) 实现语音合成 功能实现步骤: 导入头文件 创建文字识别对象 指定文字识别后的回调代理对象 开启文字识别功能 在回调方法中处理文字识别后返回的对象 文字合成中的参数: 代码展示: 1 //文字识别的回调方法接口 2 #import <iflyMSC/IFlySpeechSynthesizerDelegate.h> 3 4 //文字识别对象 5 #import <iflyMSC/IFlyS

Android RakNet 系列之四 实现消息、语音、文件传输

简介 RakNet在Win平台上已经实现消息.语音.文件传输了,但在Android平台下尚未实现,笔者决定把源码移植到Android平台下测试. 详情 实现消息 项目自带Chat Example Client和Chat Example Server实现消息,源码简单易懂,此处就不介绍了,直接贴上图片. 测试通过,消息是以Toast方式显示的,图片未捕捉到显示. 实现语音 Win平台下实现语音是通过Portaudio进行的,Portaudio尚未支持Android,要实现语音怎么办? Java层实

蓝牙ble数据转语音实现Android AudioRecord方法推荐

蓝牙ble数据转语音实现Android AudioRecord方法推荐 教程 欢迎走进zozo的学习之旅. 概述 蓝牙BLE又称bluetooth smart,主打的是低功耗和快速链接,所以在支持的profile并没有audio的部分,而蓝牙语音协议A2DP只在传统蓝牙中有,本文就是提供一种利用ble数据来传输压缩语音,并最终在实现用android语音框架中的AudioRecord方法来获取语音流. 主要思路 首先问题的需求是从一种非标准的协议挂载成为一个标准协议.那通过修改kernel的blu

iOS-Senior23-科大讯飞语音识别2

将文字转成语音,步骤和什么类似,直接上代码 //第一步:引入头文件 //文字识别的回调方法接口 #import <iflyMSC/IFlySpeechSynthesizerDelegate.h> //文字识别对象 #import <iflyMSC/IFlySpeechSynthesizer.h> //科大讯飞语音框架定义的常量 #import <iflyMSC/IFlySpeechConstant.h> //延展 @interface SecondViewControl

ios语音识别(讯飞)

语音识别系统 为了方便人们的生活,许多的方面都可以通过语音指令来代替手动输入来执行想要的指令.现在做语音识别的有一些不错的开放平台供我们使用,一家是科大讯飞平台,一家是百度语音平台.我个人比较偏爱科大讯飞,因为科大讯飞的优势在于大 段大段的文字识别上,准确率较高.这正好能符合我输入银行卡号准确无误的需求.这篇博客也主要讲的是讯飞语音SDK的使用.下面我们来详细看一下科大讯飞. 1.科大讯飞开放平台 2.科大讯飞iOS - API开放平台 科大讯飞的操作步骤 1.注册ID 正常的注册步骤,一步一步

科大讯飞

UI进阶 科大讯飞(1) 语音听写(语音转换成文字) 一.科大讯飞开放平台: http://www.xfyun.cn/ 注册.登录之后创建新应用. 因为本项目只实现了语音听写,所以在SDK下载中心勾选语音听写单项SDK就可以了 开发平台选择iOS,应用选择你要实现语音听写的应用,然后点击"下载SDK"按钮 程序中会用到Appid,程序中导入的SDK一定是要与这个应用相关联的SDK,下载下来的SDK压缩包就是以Appid结尾命名的. 二.项目配置 官方文档:http://www.xfyu

Chrome下的语音控制框架MyVoix.js使用篇(四)

在上一篇博文中,我为大家介绍了myvoix.js中的smart learning模块,以及何如使用该功能.(myvoix.js的源码地址会在每一篇文章末尾放出) 文本将拓展 Chrome下的语音控制框架MyVoix.js使用篇(二) 中的实例(没看过的同学请猛戳链接),具象地介绍smart learning模块的使用.在之前的实例中,我们通过语音输入,让 Hello My Voix 标题变化成各种颜色, 并且通过预存指令来增加语音指令的识别率.在本文中将去除预存指令这一块,通过smart lea