2012-05-14 47 views
1

试图使用here 代码我试图合并这两个类,以便我结束了ulaw音频数据的inputStream。所以我editted UlawEncoderInputStream像这样:UnsatisfiedLinkError AudioRecordNew

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): No implementation found for native Lcom/avispl/nicu/audio/MicrophoneInputStream;.AudioRecordNew (II)I

05-14 14:46:48.552: W/dalvikvm(28658): threadid=10: thread exiting with uncaught exception (group=0x40018560)

05-14 14:46:48.552: E/AndroidRuntime(28658): FATAL EXCEPTION: Thread-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(Native Method)

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)

回答

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版本的库并继续。

0

我相信它不是现在支持 看到here

I'm sorry to be repetitive but as Dianne said: "At this point: no native code is supported in the SDK. Using it may result in your application breaking when an update to the phone is delivered. Using C++ APIs will definitely result in you breaking in the future.

+0

呃我真的觉得我只是不知道如何使用NDK,idk –