Android 实时语音收发问题!急!!!

moonvos 2012-04-24 03:40:10
在一台PC上,运行两个模拟器,之间要通过socket联通,实现服务器端和客户端的语音收播。客户端用来录制声音,服务器端用来实时接听客户端的录音。但两个模拟之间socket老是不通。现代码如下,请各位大虾帮忙纠错,感激不尽:
客户端
连接功能:
conn.setOnClickListener(new OnClickListener()
{
public void onClick(View v)
{
try {
s=new Socket("10.0.2.2",8192);
if(s.isConnected())
{
tv.setVisibility(View.VISIBLE);
tv.setText("sucess");
String sd=ed.getText().toString();
out=new DataOutputStream(s.getOutputStream()); }else{tv.setVisibility(View.VISIBLE);
tv.setText("fails,请重新连接");}
}catch(UnknownHostException e){
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
});

录音功能:
record.setOnClickListener(new OnClickListener()
{
public void onClick(View v)
{
try{
byte[] bytes_pkg;
m_in_rec.startRecording();
while(m_keep_running)
{
m_in_rec.read(m_in_bytes, 0, m_in_buf_size);
bytes_pkg=m_in_bytes.clone();
if(m_in_q.size()>=2)
{
out.write(m_in_q.removeFirst(),0,m_in_q.removeFirst().length);
out.write(bytes_pkg,0,bytes_pkg.length);
}
m_in_q.add(bytes_pkg);
stop.setEnabled(true);
}


服务器端:
连接功能:
/*ls.setOnTouchListener(new OnTouchListener()
{
public boolean onTouch(View v,MotionEvent event)
{
switch(event.getAction())
{
case MotionEvent.ACTION_DOWN:
try{
ss=new ServerSocket(5554);
while(true)
{
st=ss.accept();
tv2.setVisibility(View.VISIBLE);
tv2.setText("一个客户端连接,可以进行通话");
din=new DataInputStream(st.getInputStream());
m_keep=true;
m_out_buf_size=AudioTrack.getMinBufferSize(8000,AudioFormat.CHANNEL_CONFIGURATION_MONO, AudioFormat.ENCODING_PCM_16BIT);
m_out_trk=new AudioTrack(AudioManager.STREAM_MUSIC,8000,AudioFormat.CHANNEL_CONFIGURATION_MONO,AudioFormat.ENCODING_PCM_16BIT,m_out_buf_size,AudioTrack.MODE_STATIC);
m_out_bytes=new byte[m_out_buf_size];

}
}catch(UnknownHostException e)
{Log.d("socket", "无法找到相应的主机连接");}
catch(IOException e)
{e.printStackTrace();}
break;
}
return true;
}
});

播放功能:
pl.setOnClickListener(new OnClickListener()
{
public void onClick(View v)
{
byte[] bytes=null;
m_out_trk.play();
while(m_keep)
{
try{
din.read(m_out_bytes);
bytes=m_out_bytes.clone();//全部复制到新的数组中
m_out_trk.write(bytes, 0, bytes.length);
}catch(Exception e){e.printStackTrace();}
}
stp.setEnabled(true);
tv2.setText("播放语音中...");

}
});
...全文
191 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

80,493

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧