用MediaRecorder来做客户端的音频采集,下面是一些基础设置,
MediaRecorder audioRecorder = new MediaRecorder();
audioRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
audioRecorder.setOutputFormat(MediaRecorder.OutputFormat.RAW_AMR);
final int mono = 1;
audioRecorder.setAudioChannels(mono);
audioRecorder.setAudioSamplingRate(8000);
audioRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB); // 重点
audioRecorder.setOutputFile(sender.getFileDescriptor());
audioRecorder.prepare();
audioRecorder.start();用localsocket来实时传输音频
LocalServerSocket lss = new LocalServerSocket(serverName);
LocalSocket receiver = new LocalSocket();
receiver.connect(new LocalSocketAddress(serverName));
receiver.setReceiveBufferSize(bufSize);
receiver.setSendBufferSize(bufSize); LocalSocket sender = lss.accept();
sender.setReceiveBufferSize(bufSize);
sender.setSendBufferSize(bufSize);但是在一些机器上如小米、魅族在audioRecorder.start(); 是会报错 start failed -38如果将audioRecorder.setOutputFile(sender.getFileDescriptor()); 改成向文件写入:
File soundFile = new File(Environment.getExternalStorageDirectory().getCanonicalFile()+"/sound.amr");
audioRecorder.setOutputFile(soundFile.getAbsolutePath());
就可以正常录音有哪位知道原因或者解决办法呢? 谢谢
MediaRecorder audioRecorder = new MediaRecorder();
audioRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
audioRecorder.setOutputFormat(MediaRecorder.OutputFormat.RAW_AMR);
final int mono = 1;
audioRecorder.setAudioChannels(mono);
audioRecorder.setAudioSamplingRate(8000);
audioRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB); // 重点
audioRecorder.setOutputFile(sender.getFileDescriptor());
audioRecorder.prepare();
audioRecorder.start();用localsocket来实时传输音频
LocalServerSocket lss = new LocalServerSocket(serverName);
LocalSocket receiver = new LocalSocket();
receiver.connect(new LocalSocketAddress(serverName));
receiver.setReceiveBufferSize(bufSize);
receiver.setSendBufferSize(bufSize); LocalSocket sender = lss.accept();
sender.setReceiveBufferSize(bufSize);
sender.setSendBufferSize(bufSize);但是在一些机器上如小米、魅族在audioRecorder.start(); 是会报错 start failed -38如果将audioRecorder.setOutputFile(sender.getFileDescriptor()); 改成向文件写入:
File soundFile = new File(Environment.getExternalStorageDirectory().getCanonicalFile()+"/sound.amr");
audioRecorder.setOutputFile(soundFile.getAbsolutePath());
就可以正常录音有哪位知道原因或者解决办法呢? 谢谢
解决方案 »
- adb shell su后为什么不能输入了?
- Sqlite3查询优化
- 怎么在android项目的java代码中用.so文件
- G7没有切换Activity没有动画效果
- 我用自己写的phone应用替换了android源码中package/apps下的phone应用。那么,请问我的这个phone应用有系统权限吗。
- android 里面的NDK怎么用啊!!急!!
- android 中文自动变英文?
- android插件化
- 关于Android 对话框按钮的字体
- 安卓7.1.2可以调用VS2003发布的webservice吗
- 如何从library依赖库的aar文件中去除不用的jar包
- Android wifi与单片机通信
主要是将LocalSocket替换为ParcelFileDescriptor初始化MediaRecorder之前,加入如下代码
ParcelFileDescriptor[] parcelFileDescriptors;
try {
parcelFileDescriptors = ParcelFileDescriptor.createPipe();
parcelRead = new ParcelFileDescriptor(parcelFileDescriptors[0]);
parcelWrite = new ParcelFileDescriptor(parcelFileDescriptors[1]);
} catch (IOException e) {
e.printStackTrace();
}
然后将代码:mediarecorder.setOutputFile(sender.getFileDescriptor());
替换成:mediarecorder.setOutputFile(parcelWrite.getFileDescriptor());
最后,获取inputstream改为
DataInputStream dataInput = new DataInputStream(new ParcelFileDescriptor.AutoCloseInputStream(parcelRead));