2017-04-06 5 views
1

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); 
     } 
+0

'getFilename()'에서 어떻게 파일 이름을 생성하는지보십시오. 밀리 초 간격으로 두 번 호출하면 매번 다른 파일 이름이 반환됩니다. 또한''R.raw.forrest_gump_theme ''은 유효한 파일 이름이 아닙니다. 파일 인 것처럼 리소스에 액세스 할 수 없습니다. –

+0

@MikeM. 나는 당신의 대답의 첫 부분에서 100 % 명확하지 않다. getFilename()을 두 번 호출합니다 (getScore()에서 한 번, stopRecording에서 한 번). 내 문제의 근원입니까? 또한 파일 이름을 직접 호출 할 수없는 경우 어떻게 자원에 액세스 할 수 있습니까? 더 자세한 정보를 제공해주십시오. – Zack

+0

파일 이름에'System.currentTimeMillis()'를 사용하고 있습니다. 현재 시간이 변경되면'String'은'getFilename()'에 의해 반환됩니다. 첫 번째 호출에서 반환 된 값을 저장하십시오. 또한'Activity'에서 호출 된'getResources(). openRawResource()'또는 다른'Context'를 사용하여 원시 자원에 대한'InputStream'을 얻을 수 있습니다. –

답변

1

나는 문제가 copyWaveFile()의 생각 :

당신은 다음과 같은 코드를 사용하여 (copyWaveFile에 mFileName 변수를 전송)하지만 경로를 변경 :

outFilename = Environment.getExternalStorageDirectory().getPath(); 

위의 행을 삭제하고 다시 한 번 확인해보십시오. 같은 오류가 계속 발생하면 알려주십시오.

+0

두 번째 파일 (fis2)에 대해 동일한 오류가 발생합니다. 리소스 폴더에서 원시 오디오 파일을 잘못 호출하고있는 것 같습니다. "String fileName2 ="R.raw.forrest_gump_theme ";", 올바른 방법은 무엇입니까? – Zack

+1

원시 파일은 아래 링크를 확인하십시오. http://stackoverflow.com/questions/16741433/how-to-open-a-file-in-raw-folder-in-android – Sonam