尝试使用here中的代码 我试图合并这两个类,以便我最终得到一个ulaw音频数据的inputStream。所以我像这样编辑了UlawEncoderInputStream:
private MicrophoneInputStream micIn;
public UlawEncoderInputStream() {
mMax = 0;
try {
micIn = new MicrophoneInputStream(8000, 1);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
然后尝试使用该UlawEncoderInputStream:
while(transmittingAudio) {
if(micInStream.available()>0) {
// byte[] data = new byte[audioDump.available()];
int bytesRead = micInStream.read(data);
os.write(data,0,bytesRead);
os.flush();
// ca.transmitAxisAudioPacket(data);
// System.out.println("read "+bytesRead);
}
但是,MicrophoneInputStream底部的JNI本机语句似乎存在问题。
private static native int AudioRecordNew(int sampleRate, int fifoDepth);
错误:
05-14 14:46:48.544:W / dalvikvm(28658):未找到任何实施 原生Lcom / avispl / nicu / audio / MicrophoneInputStream; .AudioRecordNew (II)我
05-14 14:46:48.552:W / dalvikvm(28658):threadid = 10:线程退出 未捕获的异常(组= 0x40018560)
05-14 14:46:48.552:E / AndroidRuntime(28658):致命异常: 螺纹12
05-14 14:46:48.552:E / AndroidRuntime(28658): java.lang.UnsatisfiedLinkError:AudioRecordNew
05-14 14:46:48.552:E / AndroidRuntime(28658):at com.avispl.nicu.audio.MicrophoneInputStream.AudioRecordNew(母语 方法)
05-14 14:46:48.552:E / AndroidRuntime(28658):at com.avispl.nicu.audio.MicrophoneInputStream。(MicrophoneInputStream.java:27)
05-14 14:46:48.552:E / AndroidRuntime(28658):at com.avispl.nicu.audio.UlawEncoderInputStream。(UlawEncoderInputStream.java:111)
05-14 14:46:48.552:E / AndroidRuntime(28658):at com.avispl.nicu.audio.AudioTransmitter.run(AudioTransmitter.java:66)
答案 0 :(得分:1)
对不起,如果这远远低于你提出的问题的水平,我很累,而且我发现你的问题很难理解:
如果您尝试调用本机方法AudioRecordNew
您需要执行static { System.loadLibrary("cLibraryName"); }
以使用android-ndk
\ Android.mk
\ Application.mk
并且您的c++
文件(和h
文件)需要这样的方法:
JNIEXPORT void JNICALL Java_com_company_package_JavaFile_AudioRecordNew(JNIEnv* env, jobject obj, jint arg0, jint arg1)
{
}
除非你有一个完成上述所有工作的本机库,否则你会收到一个错误,告诉你本机库不存在。 (看起来你遇到的问题是,你没有示例中使用的java本机库。)
如果您可以获取本机库的源代码,但是您可以按照上面的内容构建该库的Android版本并继续。
答案 1 :(得分:0)
我认为现在不支持它 见here
我很抱歉重复,但正如Dianne所说:“此时:不 SDK支持本机代码。使用它可能会导致你的 在递送手机更新时应用程序中断。运用 C ++ API肯定会导致您将来破产。