Ответ 1
Кодирование кажется прекрасным.
Samsung имеет свой собственный TTS, который может быть помехой вашему собственному. вы можете захотеть поиграть с ним, либо удалите его, либо включите. http://www.samsung.com/in/support/skp/htg/16082
Мне нужно использовать SaaS TTS (Text to Speak) из ReadSpeaker, чтобы добавить аудио в приложение, которое я разработки.
Теперь основная учетная запись SCAPI, которую мы сейчас используем, имеет базовую настройку, вы просто установили URL-адрес и получили поток MP3, который нам нужно вывести. Поскольку ключ службы находится в URL-адресе, мы не можем использовать его в интерфейсе, поэтому нам нужно передавать файлы через наши серверы.
Все работало нормально, пока я не протестировал код разработки на Samsung 6S. В тех случаях, когда он вообще не воспроизводится, однако службы работают со ссылками, т.е. Это работает:
<audio controls>
<source
src="http://tts.readspeaker.com/a/speak?key=[ServiceKey]&lang=en_uk&voice=Female01&audioformat=mp3&volume=200&text=test text 2"
type="audio/mp3">
Your browser does not support the audio element.
</audio>
в то время как тот же самый код через наши серверы не находится на Samsung 6S с той же ссылкой, что и источник потока в контроллере.
Я просмотрел несколько различных способов потоковой передачи файла на сервере, но просто упал каждый раз в Samsung 6S (новый из коробки без мод).
Вот код, который я использовал.
Контроллер Void:
string url = "http://tts.readspeaker.com/a/speak?key=[ServiceKey]&lang=en_uk&voice=Female01&audioformat=mp3&volume=200&text=test text 2";
HttpWebRequest HttpWRequest = (HttpWebRequest)WebRequest.Create(url);
HttpWebResponse response = (HttpWebResponse)HttpWRequest.GetResponse();
Stream stream = response.GetResponseStream();
MemoryStream ms = new MemoryStream();
stream.CopyTo(ms);
Response.AddHeader("Content-Type", response.ContentType);
Response.AddHeader("Content-Length", response.ContentLength.ToString());
Response.AddHeader("Access-Control-Allow-Origin", "*");
Response.AddHeader("Connection", "close");
Response.Flush();
audioData = ms.ToArray();
Response.BinaryWrite(audioData);
Response.End();
Стандарт FileStreamResult
, где я беру вышеуказанный код MemoryStream и отправляю через него, то есть с контроллером FileStreamResult, вместо того, чтобы вручную устанавливать заголовки:
return new FileStreamResult(ms, response.ContentType);
и даже измененный файл FileStreamResult, который я нашел здесь, который позволяет осуществлять фактическую поточную передачу URL-адреса без необходимости его загрузки на сервер.
Я также использовал этот метод для получения байтовых данных из ReadSpeaker:
byte[] audioData;
using (WebClient client = new WebClient())
{
audioData = client.DownloadData("http://tts.readspeaker.com/a/speak?key=[ServiceKey]&lang=en_uk&voice=Female01&audioformat=mp3&volume=200&text=test text 2");
}
И затем множество способов вывода, но всегда результат один и тот же, отлично работает на все остальное (даже IE7, но не с аудио-тегами, но все же), но не с Samsung 6S.
Я не знаю, что мне, должно быть, не хватает чего-то очень элементарного, потому что все, что я пробовал, прекрасно работает на все остальное, но на Samsung 6S ничего. Даже на других высоких андроидах, таких как LG G4, он работает, но на 6S... ничего, струйная прямая ссылка на службу в теге Audio работает просто отлично?
Значит, я знаю, что я должен делать что-то неправильно здесь, любые идеи?
Кодирование кажется прекрасным.
Samsung имеет свой собственный TTS, который может быть помехой вашему собственному. вы можете захотеть поиграть с ним, либо удалите его, либо включите. http://www.samsung.com/in/support/skp/htg/16082