musicg API를 사용하여 오디오 매칭 분석을 수행하기 위해 오디오를 동시에 재생하고 녹음하고 있습니다. 나는 원래과 비교하기 위해 파일로 녹음을 저장 한 다음 getScore() 메소드에 전달하기 위해 노력하고있어Android : 해당 파일 또는 디렉토리에 오류가 없습니다.
V/playRecordAudio: Playing sound & recording stopped
W/System.err: java.io.FileNotFoundException: /storage/emulated/0: open failed: EISDIR (Is a directory)
W/System.err: at libcore.io.IoBridge.open(IoBridge.java:452)
W/System.err: at java.io.FileOutputStream.<init>(FileOutputStream.java:87)
W/System.err: at java.io.FileOutputStream.<init>(FileOutputStream.java:127)
W/System.err: at java.io.FileOutputStream.<init>(FileOutputStream.java:116)
W/System.err: at com.android.project1.main.fragments.SpeakersFragment.copyWaveFile(SpeakersFragment.java:316)
W/System.err: at com.android.project1.main.fragments.SpeakersFragment.stopRecording(SpeakersFragment.java:284)
W/System.err: at com.android.project1.main.fragments.SpeakersFragment.access$200(SpeakersFragment.java:45)
W/System.err: at com.android.project1.main.fragments.SpeakersFragment$3.onCompletion(SpeakersFragment.java:176)
W/System.err: at android.media.MediaPlayer$EventHandler.handleMessage(MediaPlayer.java:2821)
W/System.err: at android.os.Handler.dispatchMessage(Handler.java:102)
W/System.err: at android.os.Looper.loop(Looper.java:148)
W/System.err: at android.app.ActivityThread.main(ActivityThread.java:5417)
W/System.err: at java.lang.reflect.Method.invoke(Native Method)
W/System.err: at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
W/System.err: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
W/System.err: Caused by: android.system.ErrnoException: open failed: EISDIR (Is a directory)
W/System.err: at libcore.io.Posix.open(Native Method)
W/System.err: at libcore.io.BlockGuardOs.open(BlockGuardOs.java:186)
W/System.err: at libcore.io.IoBridge.open(IoBridge.java:438)
W/System.err: ... 14 more
W/System.err: java.io.FileNotFoundException: /storage/emulated/0/AudioRecorder/1491446370522.wav: open failed: ENOENT (No such file or directory)
W/System.err: at libcore.io.IoBridge.open(IoBridge.java:452)
W/System.err: at java.io.FileInputStream.<init>(FileInputStream.java:76)
W/System.err: at java.io.FileInputStream.<init>(FileInputStream.java:103)
W/System.err: at com.android.project1.main.fragments.SpeakersFragment.getScore(SpeakersFragment.java:399)
W/System.err: at com.android.project1.main.fragments.SpeakersFragment.stopRecording(SpeakersFragment.java:285)
W/System.err: at com.android.project1.main.fragments.SpeakersFragment.access$200(SpeakersFragment.java:45)
W/System.err: at com.android.project1.main.fragments.SpeakersFragment$3.onCompletion(SpeakersFragment.java:176)
W/System.err: at android.media.MediaPlayer$EventHandler.handleMessage(MediaPlayer.java:2821)
W/System.err: at android.os.Handler.dispatchMessage(Handler.java:102)
W/System.err: at android.os.Looper.loop(Looper.java:148)
W/System.err: at android.app.ActivityThread.main(ActivityThread.java:5417)
W/System.err: at java.lang.reflect.Method.invoke(Native Method)
W/System.err: at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
W/System.err: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
W/System.err: Caused by: android.system.ErrnoException: open failed: ENOENT (No such file or directory)
W/System.err: at libcore.io.Posix.open(Native Method)
W/System.err: at libcore.io.BlockGuardOs.open(BlockGuardOs.java:186)
W/System.err: at libcore.io.IoBridge.open(IoBridge.java:438)
W/System.err: ... 13 more
I/System.out: 0.0
W/MediaPlayer: mediaplayer went away with unhandled events
: 나는 내 응용 프로그램을 실행 다음과 같은 오류/S 매번 받고 있어요 오디오 파일을 재생하고 일치하는 점수를 반환합니다. 다음은 굵게 표시된 줄을 사용하여 MainActivity의 관련 코드입니다.
편집 1 :
String mFileName = getFilename();
...
private void stopRecording() {
if (null != recorder) {
isRecording = false;
int i = recorder.getState();
if (i == 1)
recorder.stop();
recorder.release();
recorder = null;
recordingThread = null;
}
copyWaveFile(getTempFilename(), mFileName);
getScore(); //error here
deleteTempFile();
}
public void getScore(){
String fileName1 = mFileName;
String fileName2 = "R.raw.forrest_gump_theme"; //Need to change this
try {
//InputStream fis1 = null, fis2 = null;
InputStream fis1, fis2;
fis1 = new FileInputStream(fileName1);//error here
fis2 = new FileInputStream(fileName2);
Wave wave1 = new Wave(fis1), wave2 = new Wave (fis2);
FingerprintSimilarity similarity;
similarity = wave1.getFingerprintSimilarity(wave2);
result = similarity.getSimilarity()*100;
}catch (Exception e){
e.printStackTrace();
}
System.out.println(result);
}
'getFilename()'에서 어떻게 파일 이름을 생성하는지보십시오. 밀리 초 간격으로 두 번 호출하면 매번 다른 파일 이름이 반환됩니다. 또한''R.raw.forrest_gump_theme ''은 유효한 파일 이름이 아닙니다. 파일 인 것처럼 리소스에 액세스 할 수 없습니다. –
@MikeM. 나는 당신의 대답의 첫 부분에서 100 % 명확하지 않다. getFilename()을 두 번 호출합니다 (getScore()에서 한 번, stopRecording에서 한 번). 내 문제의 근원입니까? 또한 파일 이름을 직접 호출 할 수없는 경우 어떻게 자원에 액세스 할 수 있습니까? 더 자세한 정보를 제공해주십시오. – Zack
파일 이름에'System.currentTimeMillis()'를 사용하고 있습니다. 현재 시간이 변경되면'String'은'getFilename()'에 의해 반환됩니다. 첫 번째 호출에서 반환 된 값을 저장하십시오. 또한'Activity'에서 호출 된'getResources(). openRawResource()'또는 다른'Context'를 사용하여 원시 자원에 대한'InputStream'을 얻을 수 있습니다. –