Как я могу сохранить вывод Android tts в файл wav?

Я искал почти везде, пытаясь найти способ сохранить вывод Android tts в аудиофайл. Я посмотрел эти посты:

но не мог найти / понять ответы. Я использую synthesizeToFile() вот так:

HashMap<String, String> myHashRender = new HashMap<String, String>();
myHashRender.put(TextToSpeech.Engine.KEY_PARAM_UTTERANCE_ID, result);
String fileName = "/Android/data/com.android.voicelanglearning.vll/ttsfile1.wav";
tts.synthesizeToFile(result, myHashRender, fileName);

Поэтому повторяю тот же вопрос. Любая помощь горячо приветствуется.

Спасибо, Муника


person mnc    schedule 15.03.2012    source источник


Ответы (3)


Важным методом является synthesizeToFile. Он запишет звук в файл на указанном вами устройстве. Затем вы можете воспроизвести этот файл с помощью MediaPlayer или перенести его с устройства в свою систему разработки с помощью инструмента командной строки adb с помощью команды

adb pull <path-to-file>
person Ted Hopp    schedule 15.03.2012
comment
Спасибо за ответ. Но я не могу найти файл после запуска syntheticToFile(). Я получаю вывод как УСПЕХ, но я не вижу файл в каталоге, который он должен сохранить. - person mnc; 15.03.2012
comment
@MounikaNamburu - я думаю, проблема в имени файла, который вы используете. Вам нужно записать в папку, где у вашего приложения есть разрешение на запись. Попробуйте использовать папку, возвращенную вашей активностью getExternalFilesDir() или Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_MUSIC). Вам также необходимо разрешение WRITE_EXTERNAL_STORAGE, объявленное в манифесте. - person Ted Hopp; 15.03.2012

Возможно, он не работает на реальных устройствах. Проблема может заключаться в том, что вы тестируете реальное устройство с USB-кабелем, подключенным к компьютеру в режиме отладки. Это может быть отключение сохранения файлов на телефон.

Environment.getExternalStorageDirectory()

Вернуть основной каталог внешнего хранилища. Этот каталог в настоящее время может быть недоступен, если он был смонтирован пользователем на своем компьютере, удален с устройства или возникла какая-то другая проблема. Вы можете определить его текущее состояние с помощью getExternalStorageState().

person WoodsLink    schedule 18.12.2013

TextToSpeech.synthesizeToFile() не работает на реальных устройствах. Это работает только в AVD.

Я тоже экспериментировал с этим, используя как оригинальный движок Pico TTS, так и сторонний движок TTS, пытаясь записать либо на SD-карту, либо во внутреннюю память (на рутированном устройстве):

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

Но, как вы заметили, метод возвращает TextToSpeech.SUCCESS без фактического создания файла.

Если вам необходимо записать выход TTS в файл WAV, подключите выход гарнитуры к дополнительному входу звуковой карты на вашем ПК и используйте любое программное обеспечение для записи, чтобы записать это.

person ateiob    schedule 04.04.2012
comment
TextToSpeech.synthesizeToFile() работает на моем устройстве (Nexus 4 под управлением ОС 4.2.2). Он синтезирует указанный текст в файл .wav в каталог моего приложения /sdcard/Android/data/‹com.your.package.name›. - person gregS; 11.04.2013