JAVA下如何实现语音通信的功能 新手求教 谢谢

JAVA下如何实现语音通信的功能 新手求教 谢谢,第1张

我做过SIP的开发sip是一种类似>

1995年,美国Sun Microsystems公司正式向IT业界推出了java语言,该语言具有安全、跨平台、面向对象、简单、适用于网络等显著特点,当时以web为主要形式的互联网正在迅猛发展,java语言的出现迅速引起所有程序员和软件公司的极大关注,程序员们纷纷尝试用java语言编写网络应用程序,并利用网络把程序发布到世界各地进行运行。包括IBM、Oracle、微软、Netscape、Apple、SGI等大公司纷纷与Sun Microsystems公司签订合同,授权使用java平台技术。微软公司总裁比尔盖茨先生在经过研究后认为"java语言是长时间以来最卓越的程序设计语言"。目前,java语言已经成为最流行的网络编程语言,截止到2001年中,全世界大约有310万java程序员,许多大学纷纷开设java课程,java正逐步成为世界上程序员最多的编程语言。\x0d\\x0d\在经历了以大型机为代表的集中计算模式和以PC机为代表的分散计算模式之后,互联网的出现使得计算模式进入了网络计算时代。网络计算模式的一个特点是计算机是异构的,即计算机的类型和 *** 作系统是不一样的,例如SUN工作站的硬件是SPARC体系,软件是UNIX中的Solaris *** 作系统,而PC机的硬件是INTEL体系, *** 作系统是windows或者是Linux,因此相应的编程语言基本上只是适用于单机系统,例如COBOL、FORTRAN、C、C++等等;网络计算模式的另一个特点是代码可以通过网络在各种计算机上进行迁移,这就迫切需要一种跨平台的编程语言,使得用它编写的程序能够在网络中的各种计算机上能够正常运行,java就是在这种需求下应运而生的。正是因为java语言符合了互联网时代的发展要求,才使它获得了巨大的成功。\x0d\\x0d\大家想一想,在PC下用windows编写的程序能够不做修改就直接拿到UNIX系统上运行吗?显然是不可以的,因为程序的执行最终必须转换成为计算机硬件的机器指令来执行,专门为某种计算机硬件和 *** 作系统编写的程序是不能够直接放到另外的计算机硬件上执行的,至少要做移植工作。要想让程序能够在不同的计算机上能够运行,就要求程序设计语言是能够跨越各种软件和硬件平台的,而java满足了这一需求。 \x0d\\x0d\俗话说:"有心栽花花不成,无心插柳柳成荫"。Sun公司绝没想到本想用于消费电子产品开发的编程语言却率先在网络中得到了广泛应用,但是也可以说是"东方不亮西方亮",正是因为java语言在设计目标上的正确性使得java语言"是金字总会发光的"。C语言是面向过程的语言,也是使用率非常高的语言;而面向对象的思想引入到编程语言之后,C语言就被改造成为面向对象的C++语言,得到了广泛的应用。但是C++语言必须兼容C语言,因此C++语言是面向过程和面向对象混合的语言。\x0d\\x0d\java语言产生于C++语言之后,是完全的面向对象的编程语言,充分吸取了C++语言的优点,采用了程序员所熟悉的C和C++语言的许多语法,同时又去掉了C语言中指针、内存申请和释放等影响程序健壮性的部分,可以说java语言是站在C++语言这个"巨人的肩膀上"前进的。\x0d\\x0d\java语言的一个目标是跨平台,因此采用了解释执行而不是编译执行的运行环境,在执行过程中根据所在的不同的硬件平台把程序解释为当前的机器码,实现跨平台运行。而动态下载程序代码的机制完全是为了适应网络计算的特点,程序可以根据需要把代码实时的从服务器中下载过来执行,在此之前还没有任何一种语言能够支持这一点。\x0d\\x0d\java是印尼的一个小岛,盛产咖啡,而程序员往往喜欢喝咖啡,因此取名为java语言。看来,目前java这杯咖啡已经飘香在世界各地。 \x0d\\x0d\任何事物的产生既有必然的原因也有偶然的因素,java语言的出现也验证了这一点。1991年,美国Sun Microsystems公司的某个研究小组为了能够在消费电子产品上开发应用程序,积极寻找合适的编程语言。消费电子产品种类繁多,包括PDA、机顶盒、手机等等,即使是同一类消费电子产品所采用的处理芯片和 *** 作系统也不相同,也存在着跨平台的问题。当时最流行的编程语言是C和C++语言,Sun公司的研究人员就考虑是否可以采用C++语言来编写消费电子产品的应用程序,但是研究表明,对于消费电子产品而言C++语言过于复杂和庞大,并不适用,安全性也并不令人满意。于是,Bill Joy先生领导的研究小组就着手设计和开发出一种语言,称之为Oak。该语言采用了许多C语言的语法,提高了安全性,并且是面向对象的语言,但是Oak语言在商业上并未获得成功。时间转到了1995年,互联网在世界上蓬勃发展,Sun公司发现Oak语言所具有的跨平台、面向对象、安全性高等特点非常符合互联网的需要,于是改进了该语言的设计,要达到如下几个目标:\x0d\\x0d\ ◇ 创建一种面向对象的程序设计语言,而不是面向过程的语言;\x0d\ ◇ 提供一个解释执行的程序运行环境,是程序代码独立于平台;\x0d\ ◇ 吸收C和C++的优点,使程序员容易掌握;\x0d\ ◇ 去掉C和C++中影响程序健壮性的部分,使程序更安全,例如指针、内存申请和释放;\x0d\ ◇ 实现多线程,使得程序能够同时执行多个任务;\x0d\ ◇ 提供动态下载程序代码的机制;\x0d\ ◇ 提供代码校验机制以保证安全性;\x0d\\x0d\最终,Sun公司给该语言取名为java语言,造就了一代成功的编程语言

这个是可以实现的。

注:testpcm是语音文件,可以用audacity软件打开,选择 文件->导入->裸数据。 设置采样率为8000Hz。点击播放就能听见声音了。

这个时候程序跑起来还有问题,需要将apiKey 以及secretKey填写上。这两个值是你申请应用对应的分配好的。

cuid填本机mac地址就可以了,这个值我试过好像无所谓没啥要求。

程序能跑起来,并且按照正常返回识别的语音结果。但是返回结果的编码为GBK,所以汉字显示为乱码,需要对其进行一次转码。转码的代码是我自己加上去的

import javaioFile;

import javatextSimpleDateFormat;

import javautilDate;

import javaxsoundmidiMidiSystem;

import javaxsoundmidiSequence;

import javaxsoundmidiSequencer;

public class PlayMusic extends Thread {

// 这里即使我换成完整的文件路径也不行

private static String FileName = "C:\\WINDOWS\\Media\\onestopmid";

private SimpleDateFormat format = new SimpleDateFormat(

"yyyy/MM/dd hh:mm:ss");

private Sequence seq = null;

public void run() {

while (true) {

try {

Threadsleep(500);

if (isTimeToPlay())

LoadAndPlay();

} catch (Exception e) {

eprintStackTrace();

}

}

}

public PlayMusic() {

}

public void LoadAndPlay() {

try {

thisseq = MidiSystemgetSequence(new File(FileName));

Sequencer localSequencer = MidiSystemgetSequencer();

localSequenceropen();

localSequencersetSequence(seq);

localSequencerstart();

} catch (Exception localException) {

localExceptionprintStackTrace();

}

}

private boolean isTimeToPlay() {

return formatformat(new Date())endsWith("00:00"); //整点报时

//return formatformat(new Date())endsWith("30:00"); //半小时报时

}

public static void main(String[] paramArrayOfString) {

PlayMusic timeClock = new PlayMusic();

timeClockstart();

}

}

/ /项目名称:Car_Demo

/ /说明:参与实施汽车语音控制

/ /库:CMacro1016lib

/ / bsrv222SDLlib

/ / sacmv26e。库

/ /组成文件:mainc中

/ / Flashasm,hardwareasm,ISRasm

/ /的hardwareh,s480h,hardwareinc

> / /硬件连接:IOA0 ----- KEY1

/ / IOA1 ----- KEY2

/ / IOA2 ----- KEY3

/ / IOB8 ---- - 远期

/ / IOB9 -----倒车

/ / IOB10 ----左

/ / IOB11 ----右转

/ /保养纪录:2005年-12-12 V10

/ / ===================================== ===================

#包括“s480h”

#包括“bsrsdh”

BR />#定义P_IOA_Data(挥发性无符号整数)0x7000处

#定义P_IOA_Dir(挥发性无符号整数)0x7002

#定义P_IOA_Attrib(挥发性无符号整数)0x7003

#定义P_IOB_Data(挥发性无符号整型)0x7005

#定义P_IOB_Dir(挥发性无符号整数)0x7007

#定义P_IOB_Attrib(挥发性无符号整数)0x7008

#定义P_TimerA_Data(挥发性无符号整数)0x700A

>#定义P_TimerA_Ctrl(挥发性无符号整数)0x700B

#定义P_TimerB_Data(挥发性无符号整数)0x700C

#定义P_TimerB_Ctrl(挥发性无符号整数)0x700D

#定义P_Watchdog_Clear(挥发性无符号整型)0x7012

#定义P_INT_Mask(挥发性无符号整数)0x702D

#定义P_INT_Clear(挥发性无符号整数)0x7011

#定义名_ID量0x100

#定义COMMAND_GO_ID 0x101

#定义COMMAND_BACK_ID 0x102

#定义COMMAND_LEFT_ID #定义COMMAND_RIGHT_ID量0x104

#定义S_NAME 0 / /给我一个名字吧

#定义S_ACT1 1 / /前进

#定义S_ACT2 2 / /倒车,请注意

#定义S_ACT3 3 / /左

#定义S_ACT4 4 / /右转

#定义S_RDY 5 / /是啊

#定义S_AGAIN 6 / /请重复

#定义S_NOVOICE 7 / /没有听到任何声音

#定义S_CMDDIFF 8 / /代码字说啊

#定义S_NOISY 8 / /说什么暗语呀

#定义S_START 9 / /准备开始识别

#定义S_GJG 10 / /诱拐绑架

#定义S_DCZY 11 / /倒车,请注意

的extern unsigned int类型BSR_SDModel [100]; / /外部变量BSR_SDModel [100],读者自带

外部无效F_FlashWrite1Word(unsigned int类型地址,无符号整型值);

外部无效F_FlashErase(无符号整数部门);

无符号整型uiTimeset = 3; / /运行时间定时器,调节参数控制运行时间

无符号整型uiTimecont; / /运行时定时

/ / ================================== ===========================

/ /语法:无效延迟();

/ /功能:延时

/ /参数:无

/ /返回值:无

/ / ================ =============================================

无效延迟()

{

无符号整数I;

就(i = 0; I <0X3FFF,我+ +)

{

P_Watchdog_Clear = 0X0001;

/ / ============================== ===============================

/ /语法:无效PlaySnd(无符号SndIndex,无符号DAC_Channel);

/ /功能:语音播放功能

/ /参数:SndIndex播放语音资源索引号

/ / DAC_Channel播放通道选择

/ /返回值:无

> / / =============================================== ============== 无效PlaySnd(无符号SndIndex,无符号DAC_Channel)

{

BSR_StopRecognizer(); / /停止识别

SACM_S480_Initial(1); / /初始化为自动

SACM_S480_Play玩(SndIndex,DAC_Channel,3); / /开始播放语音

同时(!(SACM_S480_Status()&0X0001)= 0)/ /如果播放完毕?

SACM_S480_ServiceLoop(); / /解码,并填补了队列

P_Watchdog_Clear = 0X0001; / /清除看门狗

}

SACM_S480_Stop(); / /停止播放

BSR_InitRecognizer(BSR_MIC); / /初始化识别器

}

/ / ============================== ===============================

/ /语法:INT TrainWord(INT的wordID,诠释SndID);

/ /功能:训练命令

/ /参数:

/ / SndID命令语气指数

/ /返回值的wordID指令编码:无

/ / ================================================= ============

整数TrainWord(无符号整数的wordID,无符号整型SndID)

{

int结果;

PlaySnd(SndID,3); / /导游培训,打相应的动作

指令,而(1)

{

结果= BSR_Train(的wordID,BSR_TRAIN_TWICE); / /训练两次,得到训练成绩

如果(结果== 0)打破;

开关(结果)

{

案例-1:/ /未检测到声音

PlaySnd(S_NOVOICE,3);

返回-1;

案例-2:/ /要培养第二

PlaySnd(S_AGAIN,3);

突破;

案例-3:/ /环境嘈杂

PlaySnd(S_NOISY,3);

返回-3;

案例-4:/ /数据库全

回报-4;

情况-5:/ /检测声音不同

PlaySnd(S_CMDDIFF,3);

返回-5;

情况-6:/ /错误号

回报-6;

默认:

突破;

返回0;

/ / =================================== ==========================

/ /语法:无效TrainSD();

/ /功能:训练功能

/ /参数:无

/ /返回值:无

/ / =============== ==============================================

无效TrainSD()

{

同时(TrainWord(名_ID,S_NAME)= 0!); / /培训名称

而(TrainWord(COMMAND_GO_ID,S_ACT1)= 0);! / /训练第1节动作

同时(TrainWord(COMMAND_BACK_ID,S_ACT2)= 0);! / /培训前两个动作

同时(TrainWord(COMMAND_LEFT_ID,S_ACT3)= 0!); / /训练第3节动作

同时(TrainWord(COMMAND_RIGHT_ID,S_ACT4)= 0!); / /培训4的动作

}

/ / ============================= ================================

/ /语法:无效StoreSD();

/ /实现功能:存储语音模型功能

/ /参数:无

/ /返回值:无

/ / ============ ================================================= BR />无效StoreSD() {unsigned int类型ulAddr,我,命令号,g_Ret;

F_FlashWrite1Word(0xef00,加上0xAAAA);

F_FlashErase(0xe000);

F_FlashErase(0xe100);

F_FlashErase(0xe200);

ulAddr = 0xe000 ;/ /

为(命令号= 0x100的;命令号<0x105;命令号+ +)

{

g_Ret = BSR_ExportSDWord(命令号);

而(g_Ret! = 0)/ /导出模型成功?

g_Ret = BSR_ExportSDWord(命令号);

就(i = 0; I <100; i + +)/ /保存语音模型SD1(0xe000 --- 0xe063)

{

F_FlashWrite1Word(ulAddr,BSR_SDModel [I]) ;

ulAddr + = 1;

/ / ========================= ====================================

/ /语法:无效StoreSD();

/ /功能:承载语音模型函数

/ /参数:无

/ /返回值:无 / / ============= ================================================ 无效LoadSD()

{unsigned int类型 P,K,JK,惩戒,g_Ret;

P =(INT )0xe000;

为(JK = 0; JK <5; JK + +)

{

为(K = 0,K <100,K +)

{

RET = P;

BSR_SDModel [K] = RET; / /加载语音模型

P + = 1;

g_Ret = BSR_ImportSDWord();

而(g_Ret! = 0)/ /加载成功的模式?

g_Ret = BSR_ImportSDWord();

/ / ============================== ===============================

/ /语法:无效的GoAhead();

/ /功能:正向功能

/ /参数:无

/ /返回值:无

/ / =============== ==============================================

无效的GoAhead()/ /向前

PlaySnd(S_ACT1,3); / /提示

P_IOB_Data = 0X0100; / /前进

P_INT_Mask | = 0X0004; / /以下为中断定时器 *** 作

__ asm的(“INT FIQ,IRQ”);

uiTimecont = 0;

/ / ======================================= ======================

/ /语法:无效的备份();

/ /功能:返回函数

/ /参数:无

/ /返回值:无

/ / =============== ==============================================

无效的备份()/ /向后

PlaySnd(S_DCZY,3); / /提示 P_IOB_Data = 0x0200; / /向后

P_INT_Mask | = 0X0004; / /以下为中断定时器 *** 作

__ asm的(“INT FIQ,IRQ”);

uiTimecont = 0;

/ / =================================== ==========================

/ /语法:无效TurnLeft();

/ /功能:打开左侧的功能

/ /参数:无

/ /返回值:无

/ / ============== ===============================================

>无效TurnLeft()/ /左转

PlaySnd(S_GJG,3);

P_IOB_Data = 0x0900; / /右转

延迟(); / /延迟

P_IOB_Data =成0x0500; / /左转

P_INT_Mask | = 0X0004; / /以下为中断定时器 *** 作

__ asm的(“INT FIQ,IRQ”);

uiTimecont = 0;

/ / ======================================= ======================

/ /语法:无效TurnRight();

/ /功能:右转子程序

/ /参数:无

/ /返回值:无

/ / ============== ===============================================

>无效TurnRight()/ /右转

PlaySnd(S_GJG,3); / /语音提示

P_IOB_Data =成0x0500; / /左转

延迟(); / /延迟

P_IOB_Data = 0x0900; / /右转

P_INT_Mask | = 0X0004; / /以下为中断定时器 *** 作

__ asm的(“INT FIQ,IRQ”);

uiTimecont = 0;

/ / =================================== ==========================

/ /语法:无效停止();

/ /功能:停车功能

/ /参数:无

/ /返回值:无

/ / =============== ==============================================

无效停止()/ /停止

{

P_IOB_Data值= 0x0000; / /停车

PlaySnd(S_RDY,3); / /语音提示

}

/ / =============================== ==============================

/ /语法:BSR无效(无效);

/ /功能:识别功能

/ /参数:无

/ /返回值:无

/ / =============== ==============================================

BSR无效(无效)

{

int结果; / /识别结果存储

结果= BSR_GetResult(); / /得到识别结果

如果(结果> 0)/ /语音触发?

P_IOB_Data值= 0x0000; / /临时停车

开关(结果)

{

案名_ID:/ /识别命令

停止(名称); / /停机位

突破;

情况COMMAND_GO_ID:/ /找出第一个命令

的GoAhead(); / /执行一个动作:直

突破; 案例COMMAND_BACK_ID:/ /找出第二个命令

备份(); / /执行动作二:倒车

突破;

情况COMMAND_LEFT_ID:/ /找出第三个命令

TurnLeft(); / /执行三个动作:向左转

突破;

情况COMMAND_RIGHT_ID:/ /找出第四个命令

TurnRight(); / /执行动作四:右转

突破;

默认:

突破;

/ / ============================= ================================

/ /语法:IRQ5无效(无效);

/ /功能:中断服务子程序

/ /参数:无

/ /返回值:无

/ / ============== ===============================================

> IRQ5无效(无效)的__attribute__((ISR)); / /运动定时控制

IRQ5无效(无效)

{

如果(uiTimecont + + == uiTimeset)

{

P_IOB_Data值= 0x0000;

P_INT_Clear = 0X0004;

/ / =================================== ==========================

/ /语法:INT主要(无效);

/ /功能:主要功能

/ /参数:无

/ /返回值:无

/ / ============== ===============================================

>国际主要(无效)

{unsigned int类型BS_Flag; / /火车标志

P_IOA_Dir =为0xFF00; / /初始化IOA,IOA07下拉输入

P_IOA_Attrib =为0xFF00;

P_IOA_Data值= 0x0000;

P_IOB_Dir = 0x0f00; / /初始化IOB,IOB811与输出

P_IOB_Attrib = 0x0f00;

P_IOB_Data值= 0x0000;

BSR_DeleteSDGroup(0); / /初始化存储器RAM

BS_Flag = (unsigned int类型)0xe000; / /读取内存单元0xe000

如果(BS_Flag == 0xFFFF的)/ /没有受过训练(0xe000内容0xFFFF的)

{

TrainSD(); / /培训

StoreSD(); / /存储的训练结果(语音模式)

其他/ /训练(0xe000内容0x0055)

{

LoadSD(); / /语音识别模型加载

}

PlaySnd(S_START,3); / /开始识别

BSR_InitRecognizer(BSR_MIC)提示; / /初始化识别器

同时(1)

{

BSR();

如果(( P_IOA_Data)&0X0004)/ /如果再培训

{

F_FlashErase(0xe000);

而(1);

/ / ========================= ===================================

/ /文件名:flashasm

> / /实现功能:SPCE061 32K闪存读卡器

/ /保养纪录:2003-6-9 V1 0

/ / ================= ===========================================

>。 INCLUDE hardwareinc

。 DEFINE C_FLASH_SIZE为0x8000

。 DEFINE C_FLASH_BLOCK_SIZE量0x100

。 DEFINE C_FLASH_MATCH加上0xAAAA

。 DEFINE C_FLASH_PAGE_ERASE 0x5511 / /擦除一个

。 DEFINE C_FLASH_MASS_ERASE 0x5522 / /

。 DEFINE C_FLASH_1WORD_PGM 0x5533 / /写一个字

。 DEFINE C_FLASH_SEQUENT_PGM 0x5544 / /写多个字

。 DEFINE C_FLASH_MAIN_BLOCK为0x5555

。 DEFINE C_FLASH_INFORM_BLOCK 0x5566

。代码

/ / =========================================== ================================================= BR /> / /语法:无效F_FlashWrite1Word(INT地址,int值)

/ /描述:写一个字到FLASH

/ /参数:要写入的地址内存中的数据写入值地址数据

/ /返回:无

/ / ================================== ================================================== ===========

。公众_F_FlashWrite1Word

DEFINE P_Flash_Ctrl 0x7555

_F_FlashWrite1Word: PROC

推基点至[SP]

BP = SP +1

R1 = C_FLASH_MATCH / / AAAA

> [P_Flash_Ctrl] = R1

R1 = C_FLASH_1WORD_PGM / / 5533

[P_Flash_Ctrl] = R1

R1 = [BP +4] / / flash地址

R2 = [BP + 4 ] / /数据

[R1 = R2

流行BP从[SP]

。 ENDP

/ / ======================================= ================================================== ====

/ /语法:F_FlashWrite(INT部门,诠释及次数,int的大小)

/ /说明:顺序写更多的字

/ /参数:扇区是起始地址将数据写入写入和NUM-大小的写入数据数

/ /返回的数据:无

/ / ================== ================================================== =========================

公众_F_FlashWrite

_F_FlashWrite: PROC

推基点至[SP]

BP = SP +1

R1 = [BP +4] / / flash基地址

R2 =

/数据/> R3 = [BP +5] / /多字节

R4 = C_FLASH_MATCH / / AAAA

[P_Flash_Ctrl] = R4

L_FlashWriteLoop:

R4 = C_FLASH_SEQUENT_PGM / / 5544

[P_Flash_Ctrl] = R4 R4 = [R2 +]

[R1 + +] = R4

R3 - = 1

JNZ L_FlashWriteLoop

[P_Flash_Ctrl] = R3 / /写从最终

d出基点[SP]

RETF 。 ENDP

/ / ======================================= ================================================== ===

/ /语法:无效F_FlashErase(部门)

/ /说明:擦除256字节

/ /参数:起始地址扇区擦除页

/ /返回:无

/ / ============================================ ================================================ 公共_F_FlashErase

_F_FlashErase: PROC

推基点至[SP]

BP = SP + 1

R1 = C_FLASH_MATCH / / AAAA

[P_Flash_Ctrl] = R1

R1 = C_FLASH_PAGE_ERASE / / 5511

[P_Flash_Ctrl] = R1

R1 = [BP +4] / /擦除一个

[R1] = R1

从[SP]

。 ENDP

。完

/ / ======================================= =====================

/ /文件名:ISRasm

/ /功能:语音播放/识别中断服务

> / /保养纪录:2003-9-9 V10

/ / ============================== ==============================

包括hardwareinc

公共_FIQ;。

外部_BSR_FIQ_Routine

外部F_FIQ_Service_SACM_S480

_FIQ:

推R1,R5为[SP]; / /注册推来保护

R1 = C_FIQ_TMA;

[P_INT_Clear] = R1;

致电_BSR_FIQ_Routine / /语音识别中断服务

致电F_FIQ_Service_SACM_S480; / /语音播放中断服务

流行R1,R5从[SP];

RETI;

以上就是关于JAVA下如何实现语音通信的功能 新手求教 谢谢全部的内容,包括:JAVA下如何实现语音通信的功能 新手求教 谢谢、用Java语音做游戏,从编辑到转换成游戏软件需要经过什么过程、JAVA语言介绍是什么等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/9633158.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-30
下一篇 2023-04-30

发表评论

登录后才能评论

评论列表(0条)

保存