package com.wifitalk.phone;
import android.media.AudioFormat;
import android.media.AudioManager;
import android.media.AudioRecord;
import android.media.AudioTrack;
import android.media.MediaRecorder;
import android.util.Log;
public class NetPhone implements Runnable {
private final static int Sample_Rate = 8000;
private final static int Channel_In_Configuration = AudioFormat.CHANNEL_IN_MONO;
private final static int Channel_Out_Configuration = AudioFormat.CHANNEL_OUT_MONO;
private final static int AudioEncoding = AudioFormat.ENCODING_PCM_16BIT;
private AudioRecord phoneMIC;
private AudioTrack phoneSPK;
private boolean stoped = true;
private CallLink curCallLink;
private int recBufferSize;
private int playBufferSize;
private Thread inThread, outThread;
public void startPhone(String inIP) throws Exception {
initAudioHardware();
initCallLink(inIP);
stoped = false;
outThread = new Thread(new Runnable() {
@Override
public void run() {
try {
// Thread.sleep(3000);
startPhoneMIC();
} catch (Exception e) {
e.printStackTrace();
}
}
});
outThread.start();
curCallLink.listen();
inThread = new Thread(this);
inThread.start();
}
private void initAudioHardware() throws Exception {
// recBufferSize = AudioRecord.getMinBufferSize(Sample_Rate,
// Channel_In_Configuration, AudioEncoding);
// playBufferSize = AudioTrack.getMinBufferSize(Sample_Rate,
// Channel_Out_Configuration, AudioEncoding);
recBufferSize = 4 * 1024;// 4k bytes
playBufferSize = 4 * 1024;
phoneMIC = new AudioRecord(MediaRecorder.AudioSource.MIC, Sample_Rate,
Channel_In_Configuration, AudioEncoding, recBufferSize);
phoneSPK = new AudioTrack(AudioManager.STREAM_MUSIC, Sample_Rate,
Channel_Out_Configuration, AudioEncoding, playBufferSize,
AudioTrack.MODE_STREAM);
phoneSPK.setStereoVolume(0.7f, 0.7f);
}
private void initCallLink(String inIP) {
curCallLink = new CallLink(inIP);
}
@Override
public void run() {
startPhoneSPK();
}
private void startPhoneMIC() throws Exception {
curCallLink.open();
phoneMIC.startRecording();
while ((!Thread.interrupted()) && !stoped) {
byte[] compressedVoice = new byte[recBufferSize];
int b = phoneMIC.read(compressedVoice, 0, recBufferSize);
Log.i("NetPhone","mic read "+b);
curCallLink.getOutputStream().write(compressedVoice, 0, b);
}
}
private void startPhoneSPK() {
byte[] gsmdata = new byte[recBufferSize];
int numBytesRead = 0;
phoneSPK.play();
try {
while ((!Thread.interrupted()) && !stoped) {
numBytesRead = curCallLink.getInputStream().read(gsmdata);
Log.i("NetPhone","recv data "+numBytesRead);
if (numBytesRead == -1) {
break;
}
phoneSPK.write(gsmdata, 0, numBytesRead);
}
} catch (Exception e) {
Log.e("phone", e.getMessage(), e);
}
}
public void stopPhone() throws Exception {
stoped = true;
while (inThread.isAlive() || outThread.isAlive()) {
Thread.sleep(100);
}
phoneMIC.stop();
phoneSPK.stop();
curCallLink.close();
}
}
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
收起资源包目录
WifiTalk.zip (39个子文件)
WifiTalk
bin
classes.dex 10KB
WifiTalk.apk 18KB
res
drawable-ldpi
icon.png 2KB
drawable-hdpi
icon.png 4KB
drawable-mdpi
icon.png 2KB
jarlist.cache 119B
dexedLibs
annotations-868359fa00146b4cff1ea54f03994680.jar 943B
classes
com
wifitalk
BuildConfig.class 333B
phone
NetPhone.class 4KB
NetPhone$1.class 793B
CallLink.class 1KB
R$layout.class 376B
R$id.class 495B
R$drawable.class 382B
R$attr.class 322B
R.class 489B
WifiTalk.class 2KB
R$string.class 531B
WifiTalk$1.class 2KB
WifiTalk$2.class 1KB
resources.ap_ 11KB
AndroidManifest.xml 794B
res
drawable-ldpi
icon.png 2KB
drawable-hdpi
icon.png 4KB
drawable
values
strings.xml 343B
drawable-mdpi
icon.png 3KB
layout
main.xml 993B
assets
gen
com
wifitalk
BuildConfig.java 154B
R.java 1KB
proguard.cfg 1KB
.settings
org.eclipse.jdt.core.prefs 177B
src
com
wifitalk
phone
CallLink.java 1KB
NetPhone.java 3KB
WifiTalk.java 2KB
.project 844B
.classpath 364B
project.properties 563B
AndroidManifest.xml 794B
lint.xml 97B
共 39 条
- 1
资源评论
- 隨鳯飛翔2013-09-02不错,可以实现局域网通话,有点延时,要顶。
- wxiaoqi10222016-05-04不错,可以实现局域网通话,有点延时,要顶
- 围城_zyk2014-08-11局域网通话值?要看看
- 学智2014-05-09局域网通话值得一试
- bingohoney2014-04-28不错,可以实现局域网通话,有点延时,要顶。 .
u011110604
- 粉丝: 0
- 资源: 1
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功