2

TextToSpeech 엔진의 출력을 내 응용 프로그램의 캐시 디렉토리에 쓰고 싶습니다. TTS를 위해 거기에 글을 쓰려면 먼저 권한을 부여해야합니다. 하지만 어떻게해야할지 모르겠다. 정상적으로 이러한 문제는 FileDescriptor을 넘겨서 해결할 수 있으므로 특정 파일에 대한 액세스 권한이 부여됩니다. TextToSpeech.synthesizeToFile 메서드는 파일 경로를 문자열로만 받아들이므로 TTS에서는이 작업을 수행 할 수 없습니다. FileDescriptor. 그래서 뭐 할까? TTS가 내 앱 디렉토리에 파일을 쓸 수있게하려면 어떻게해야합니까?

는 ... 그 코드의 여기, 권한이 내 응용 프로그램의 디렉토리에 기록되지 않은 정말 TTS 내 지점을 만들려면 :

TextToSpeech mTts = new new TextToSpeech(context, this); 
mTts.synthesizeToFile(text, null, getCacheDir() + "/" + "speech.wav"); 

그리고 디버거 로그 :

08-20 14:46:11.257: ERROR/TtsService(336): Can't create 
/data/data/com.myorg.myapp/cache/speech.wav due to exception java.io.IOException: Permission denied 
+1

[이 스레드] (http://groups.google.com/group/android-developers/browse_thread/thread/79c0c4d9399b38ac)는 'TextToSpeech.synthesizeToFile()'은 실제 휴대 전화가 아닌 AVD에서만 작동한다고 제안합니다. 이것은 이상합니다. 나는 이것이 실제로 사실인지 더 자세히 조사 할 것이다. – an00b

+1

[이 스레드] (http://groups.google.com/group/android-developers/browse_thread/thread/d1365a29214b8cb3?fwc=1)는 'TextToSpeech.synthesizeToFile()'을 실제 장치. 그러나 어떻게 ??? – an00b

+2

이것은 미친 짓이다. 나는 더 이상 java.io.IOException을 얻지 않고 SUCCESS 메시지 인'Synthesizing to/mnt/sdcard/test.wav'를 받는다.하지만 test.wav는 어디에도 없다. 파일 시스템 (물론/mnt/sdcard에 없다). 무슨 일이야? – an00b

답변

6

TextToSpeech.synthesizeToFile() 아무튼를 실제 장치에서 작동하지 않습니다. AVD에서만 작동합니다.

나는 sdcard에 또는 (뿌리 장치) 내부 메모리 하나에 쓰기를 시도, 원래 피코 TTS 엔진과 타사 TTS 엔진을 모두 사용하여도,이 실험되었습니다

context.getDir("soundfiles", Context.MODE_WORLD_WRITEABLE); 

그러나주의하는 것처럼이 메서드는 실제로 파일을 만들지 않고 TextToSpeech.SUCCESS을 반환합니다.

TTS 출력을 WAV 파일로 녹음해야하는 경우 헤드셋 출력을 PC의 사운드 카드에있는 AUX 입력에 연결하고 녹음 소프트웨어를 사용하여이를 캡처하십시오.

-1

TextToSpeech.synthesizeToFile()은 실제로는 실제 장치에서 작동하지만 다소 느립니다. 동일한 문제가 있었지만 결국 작동했습니다. 내가 사용하는 코드는 다음과 같습니다.

speakTextTxt = speakText.getText().toString(); 
HashMap<String, String> myHashRender = new HashMap<String, String>(); 
myHashRender.put(TextToSpeech.Engine.KEY_PARAM_UTTERANCE_ID, UTTERANCE_SAVE_ID); 

String exStoragePath = Environment.getExternalStorageDirectory().getAbsolutePath(); 
File appTmpPath = new File(exStoragePath + "/sounds/"); 
appTmpPath.mkdirs(); 
String tempFilename = "tmpaudio.wav"; 
tempDestFile = appTmpPath.getAbsolutePath() + "/" + tempFilename; 

mTts.synthesizeToFile(speakTextTxt, myHashRender, tempDestFile); 

그러나 오늘 나는 아주 이상한 것을 발견했습니다. 나는 다른 컴퓨터로 전환하여 개발을 시작한 다음 "java.io.IOException : Permission denied"오류가 다시 발생하기 시작했습니다. 그런 다음 Android SDK 관리자를 방문하여 Goole Inc.의 모든 'SDK 플랫폼'및 'Google API'를 확인했습니다. 모든 Android 버전에 패키지가 설치되었습니다. 정확히 어떤 패키지 버전이 해결되었는지는 잘 모르겠지만 다시 작동합니다. 분명히 완벽하게 훌륭한 코드를 가질 수는 있지만 문제를 일으킬 수있는 개발 환경이있을 수 있습니다. 도움이되기를 바랍니다.

+0

이 문제와 관련된 또 다른 문제가 발생했습니다. 장치에서 USB 연결로 "USB 대용량 저장소"를 선택한 경우에도이 오류가 발생합니다. 다른 옵션을 선택하면 제대로 작동합니다. 나는 이것이 USB 드라이브로 장치를 장착 한 컴퓨터 때문이라고 생각하고 그 시점에서 컴퓨터 이외에는 아무 것도 접근 할 수 없게됩니다. – Trees

+1

어떤 기기 (브랜드 및 모델, 뿌리?)에서이 기기를 사용 했습니까?지금은 +1했는데, 5 개의 다른 안드로이드 폰에서 이것을 테스트했지만 그 중 아무도 저장된 파일을 만들지 못했습니다. – ateiob

+0

적어도 Motorola Atrix, Motorola Xoom 및 Samsung Moment에서 작업하고 있습니다. – Trees

관련 문제