開発中のアプリケーションにオーディオを追加するには、ReadSpeakerからTTS(Text to Speak)SaaSを使用する必要があります。C#.NETでのMP3ストリーミング4.5.1 Samsung 6SのMVC 5.2.2
現在、現在使用している基本的なSCAPIアカウントには、単純にURLを設定し、出力する必要があるMP3ストリームを戻すだけの基本設定があります。 URLにサービスキーがあるため、フロントエンドで使用することはできません。そのため、サーバーからファイルをストリーミングする必要があります。
サムスン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>
当社のサーバーを通じて正確に同じコードがコントローラでストリームソースと同じリンクでサムスン6Sにはそうではありません。
私は、サーバー上でファイルをストリーミングするいくつかの方法を行ってきましたが、Samsung 6S(modsなしで新品の新品)で毎回フラットになっています。
ここに私が使用したコードがあります。
ボイドコントローラ:私は上記のコードののMemoryStreamを取り、代わりに手動でヘッダーを設定するFileStreamResultコントローラと、すなわちそれを介して送信
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
:
return new FileStreamResult(ms, response.ContentType);
とeven a modified FileStreamResult I found here可能それをサーバーにダウンロードする必要なしに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、オーディオタグではありませんが、まだ)サムスン6Sではない。
私が試したことのすべてが他のすべてでうまく動作するので、私はここでは非常に基本的なものを見逃しているに違いないことは分かりませんが、Samsung 6Sでは何もありません。 LG G4のような他のハイエンドのアンドロイドでも、6Sで動作します...何もない、オーディオタグ内の直接サービスリンクはうまく動作しますか?
私はここで何か間違ったことをしているに違いないと思いますか?
ここで最も効果的なのは、フィドラー(または同様のプロキシスタイルのHTTPスニファ)をチェーンに挿入することです。すべてのポート(localhostだけでなく)をlistenするようにフィドラーを設定し、sammyのプロキシをPC上で実行されているフィドラーインスタンスのip/portを指すように設定できます。次に、独自のプロキシコントローラのアクションと元のURLからの応答を比較し、その違いがどこにあるのかを確認する必要があります。 – spender
私はヘッダーに関連する何かのクロスオリジンの違いに特に注意します。 – spender