2015-01-07 6 views
0

FileInputStream을 사용하여 한 번에 1024 바이트를 읽고 1024 바이트를 재생하는 AudioTrack에 바이트 버퍼를 전달하고 싶습니다. 전체 트랙을 계속 재생할 수 있도록 while 루프를 넣었습니다. 한 번에 전체 PCM을 읽을 수 있다고 제안 할 수도 있지만 그렇게하고 싶지는 않습니다. 이 스 니펫 코드는 첫 번째 1024 바이트 만 재생하고 이후에 루프를 종료합니다.안드로이드 : AudioTrack이 PCM 트랙을 완전히 재생하지 못함 Readin FileInputStream을 사용하여 한 번에 1024 바이트

당신은 실제로 읽기에 의해 생성 된 바이트 회계 더 정확해야
    fis = new FileInputStream(Environment.getExternalStorageDirectory().getAbsolutePath() + "/Notate/" + MainActivity.filepath); 
l = new File(Environment.getExternalStorageDirectory().getAbsolutePath() + "/Notate/" + MainActivity.filepath); 
       byte[] buffer = new byte[1024]; 
       try { 
        fis = new FileInputStream(Environment.getExternalStorageDirectory().getAbsolutePath() + "/Notate/" + MainActivity.filepath); 


        while (fis.read(buffer)!=-1) { 

        int intSize = android.media.AudioTrack.getMinBufferSize(44100, AudioFormat.CHANNEL_OUT_MONO, 
          AudioFormat.ENCODING_PCM_16BIT); 
        AudioTrack at = new AudioTrack(AudioManager.STREAM_MUSIC, 44100, AudioFormat.CHANNEL_OUT_MONO, 
          AudioFormat.ENCODING_PCM_16BIT, intSize, AudioTrack.MODE_STREAM); 
        TextView t1 = (TextView) contentView.findViewById(R.id.textView1); 
        t1.setText(Integer.toString(intSize)); 
        if (at != null) { 
         at.play(); 
         at.write(buffer, 0, buffer.length); 
         at.stop(); 
         at.release(); 
        } 
       } 
        fis.close(); 
       } catch (Exception e) { 
       } 
+0

코드를 들여 쓰기가 가능하도록 들여주십시오. 당신의 코드에는 두 개의'try' 블록이 있지만, 오직 하나의'catch '만 보입니다. 다른 하나는 어디 있니? 또한 예외가 발생하면 적어도 예외를 로그하여 상황을 알 수 있습니다. – Michael

+0

그리고'while' 루프가 반복 될 때마다 새로운 AudioTrack을 생성하려고합니다. 루프 이전에 하나의'AudioTrack'을 생성해야합니다. – Michael

+0

그리고 문제가 해결되었습니다! 고마워요 마이클! – shivram

답변

0

... 읽기에 문서에서

(바이트 []) ...

반환 값 :

버퍼에 읽은 총 바이트 수. 파일 끝에 도달 했으므로 더 이상 데이터가없는 경우 -1.

하지만 전체 버퍼가 있다고 가정합니다. 길이는 제공 되었습니까?

여기서 읽기 값이 NONEoF (-1, 1024) 인 경우는?

코드에서이 글자의 대소 문자는 이전 읽기에서 제공 한 길이를 정확하게 써야합니다.

+0

안녕하세요, 답변에 감사드립니다. Michael이 문제를 해결했습니다. 이제 작동합니다. – shivram