尝试使用此处的代码 我试图合并这两个类,以便最终得到一个 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)I 的实现
05-14 14:46:48.552: W/dalvikvm(28658): threadid=10: 线程退出未捕获异常 (group=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):在 com.avispl.nicu.audio.MicrophoneInputStream.AudioRecordNew(本机方法)
05-14 14:46:48.552: E/AndroidRuntime(28658): 在 com.avispl.nicu.audio.MicrophoneInputStream.(MicrophoneInputStream.java:27)
05-14 14:46:48.552: E/AndroidRuntime(28658): 在 com.avispl.nicu.audio.UlawEncoderInputStream.(UlawEncoderInputStream.java:111)
05-14 14:46:48.552: E/AndroidRuntime(28658): 在 com.avispl.nicu.audio.AudioTransmitter.run(AudioTransmitter.java:66)