2011-11-10 5 views
1

저는 Android가 처음이고 특정 파일에 글쓰기가 있습니다. 내가하려고하는 것은 TextToSpeech.synthesizeToFile() 메서드를 사용하여 오디오 파일을 작성하는 것입니다. 이것은 앱이 TextToSpeech 엔진을 종료 할 때 생성 된 파일을 자동으로 삭제한다는 사실을 제외하면 작동합니다. 그래서 나는 다른 디렉토리에 생성 된 파일의 복사본을 만들려고했습니다. 이를 위해 org.apache.commons.io.FileUtils 패키지의 copyFile() 메소드를 사용합니다. 이 메서드를 사용하면 크기가 0 인 새로 만든 파일 만 생성됩니다. Environment.getExternalStorageDirectory()를 사용하여 적절한 외부 저장소 디렉토리를 가져옵니다. /mnt/sdcard/Ringtones /와 같은 기존 디렉토리에/mnt/sdcard/아래에 새로 만든 디렉토리에 쓰기를 시도했습니다 ...외부 저장소와 파일 복사하기

내가 검사 한 또 다른 사항은 File.canWrite의 결과입니다)를 대상 파일에 저장합니다. 이것은 실제로 false를 반환하며 이는 단서가 될 수 있습니다. 그러나 File.setWritable() 메서드는이를 변경하기 위해 존재하지 않는 것 같습니다. (가) 나는 보지 못했지만 다음

내가 코드를 사용하고

같은 예외는

try { 
    File from = new File(tempDestFile); 
    File to = new File(permDestFile); 
    FileUtils.copyFile(from, to); 
} catch(IOException e) { 
    Log.e(T, "Error copying file", e); 
} catch(NullPointerException e) { 
    Log.e(T, "Error copying file", e); 
} 

내가 시도 할 수 있습니다 무엇에 어떤 아이디어를 던져지지? 내가 지금까지 발견 한 것은이 점에 관해 나에게 많은 도움이되지 못했다.

감사합니다. 이런 주제에 대한 훌륭한 자료를 정말 고맙게 생각합니다.

+0

문제가되지 새 파일에 쓰기로하지만 TextToSpeech.synthesizeToFile로 만든 파일에서 읽는 것 같다().이 파일에서 제대로 읽지 못하는 것 같습니다. 수동 또는 프로그래밍 방식으로 복사 할 수 없습니다. 이상합니다. 누구도 TextToSpeech.synthesizeToFile()을 성공적으로 사용 했습니까? – Trees

답변

2

아하, 마침내 얻었습니다. 물론 그것은 완벽하게 이해됩니다.

[synthesizeToFile()] [1]을 호출 한 직후에 파일을 복사하려고 했으므로 파일이 제대로 작성/생성되지 않았습니다. 따라서 바이트 파일 크기는 0입니다.

어떻게 작동되는지는 [여기] [2]에 설명되어 있습니다. 기본적으로 유일한 매개 변수 중 하나로 고유 ID 인 synthesizeToFile()을 보내면됩니다. 그런 다음 TextToSpeech.OnUtteranceCompletedListener 인터페이스를 구현하고 onUtteranceCompleted() 콜백 메소드를 무시하십시오.

onUtteranceCompleted()은 물론 발화가 합성 될 때 호출됩니다. 이전에 전달한 고유 한 ID를 확인하여 완료를 기다리는 여러 발언의 차이를 알 수 있습니다.

꽤 표준 물건, 나는 추측한다. 그러나 나는 웬일인지 그것이 2,3 일 동안 나를 피했다.

이렇게하면 붙어있는 사람을 도울 수 있기를 바랍니다.

[1] :

http://developer.android.com/reference/android/speech/tts/TextToSpeech.html#synthesizeToFile%28java.lang.String,%20java.util.HashMap%3Cjava.lang.String,%20java.lang.String%3E,%20java.lang.String%29
[2] :

http://developer.android.com/resources/articles/tts.html

0

이 오래된 학교 방법을 사용해 보셨습니까?

FileInputStream fis = new FileInputStream(tempDestFile); 
FileOutputStream fos = new FileOutputStream(permDestFile); 
byte[] bites= new byte[1024]; 
int count = fis.read(bites); 
while ( count != -1){ 
    fos.write(bites, 0, count); 
    count = fis.read(bites);    
} 

그리고 WRITE_EXTERNAL_STORAGE 권한이 매니페스트에 있는지 확인하십시오.

+0

응답 주셔서 감사합니다. 내 매니페스트에 WRITE_EXTERNAL_STORAGE 권한이 있습니다. 또한 바이트를 읽고 쓰는 옛 방식을 시도했지만 빈 대상 파일 인 FileUtils.copyFile() 메서드를 사용할 때와 같은 결과를 얻습니다. – Trees

+0

저장 디렉터리를 검색하기 위해 [getExternalFilesDir] (http://developer.android.com/reference/android/content/Context.html#getExternalFilesDir (java.lang.String))을 사용해 보셨습니까? – riotopsys