Ich habe einige Probleme bei der Verwendung der Microsoft Übersetzer Speak-Methode der HTTP-Schnittstelle.Kein Sound von Client-Seite mit Microsoft Translator
Dies ist mein Code:
public void Speak()
{
AdmAuthentication admAuth = new AdmAuthentication("clientID", "clientSecret");
AdmAccessToken admToken;
string headerValue;
admToken = admAuth.GetAccessToken();
// Create a header with the access_token property of the returned token
headerValue = "Bearer " + admToken.access_token;
string language = "zh-CHS";
string uri = "https://api.microsofttranslator.com/v2/Http.svc/Speak?&text=" + System.Web.HttpUtility.UrlEncode(lblRead.Text) + "&language=" + language + "&format=" + HttpUtility.UrlEncode("audio/wav") + "&options=MaxQuality";
WebRequest webRequest = WebRequest.Create(uri);
webRequest.Headers.Add("Authorization", headerValue);
WebResponse response = null;
try
{
response = webRequest.GetResponse();
using (Stream stream = response.GetResponseStream())
{
using (SoundPlayer player = new SoundPlayer(stream))
{
player.PlaySync();
}
}
}
catch
{
throw;
}
finally
{
if (response != null)
{
response.Close();
response = null;
}
}
}
}
public class AdmAccessToken
{
[DataMember]
public string access_token { get; set; }
[DataMember]
public string token_type { get; set; }
[DataMember]
public string expires_in { get; set; }
[DataMember]
public string scope { get; set; }
}
public class AdmAuthentication
{
public static readonly string DatamarketAccessUri = "https://datamarket.accesscontrol.windows.net/v2/OAuth2-13";
private string clientId;
private string cientSecret;
private string request;
public AdmAuthentication(string clientId, string clientSecret)
{
this.clientId = clientId;
this.cientSecret = clientSecret;
//If clientid or client secret has special characters, encode before sending request
this.request = string.Format("grant_type=client_credentials&client_id={0}&client_secret={1}&scope=http://api.microsofttranslator.com", HttpUtility.UrlEncode(clientId), HttpUtility.UrlEncode(clientSecret));
}
public AdmAccessToken GetAccessToken()
{
return HttpPost(DatamarketAccessUri, this.request);
}
private AdmAccessToken HttpPost(string DatamarketAccessUri, string requestDetails)
{
//Prepare OAuth request
WebRequest webRequest = WebRequest.Create(DatamarketAccessUri);
webRequest.ContentType = "application/x-www-form-urlencoded";
webRequest.Method = "POST";
byte[] bytes = Encoding.ASCII.GetBytes(requestDetails);
webRequest.ContentLength = bytes.Length;
using (Stream outputStream = webRequest.GetRequestStream())
{
outputStream.Write(bytes, 0, bytes.Length);
}
using (WebResponse webResponse = webRequest.GetResponse())
{
DataContractJsonSerializer serializer = new DataContractJsonSerializer(typeof(AdmAccessToken));
//Get deserialized object from JSON stream
AdmAccessToken token = (AdmAccessToken)serializer.ReadObject(webResponse.GetResponseStream());
return token;
}
}
ich die Client-ID und Client-Schlüssel entfernt.
Das Problem, mit dem ich konfrontiert bin, ist, dass ich nichts höre, wenn ich die Seite auf dem Server laufen lasse. Ja, ich weiß, wenn ein Benutzer auf eine Schaltfläche klickt, wird der SoundPlayer auf dem Server produziert, so dass die Client-Seite nichts hört.
Ich habe alle Arten von Suchmethoden durchsucht. Aber ohne Erfolg.
Ich habe versucht, eine Methode zu verwenden, um den Stream zu speichern und auf die Datenbank zu aktualisieren. Alles ist gut, wenn ich es von Visual Studio aus starte. Auf der Clientseite kann der Stream jedoch nicht heruntergeladen werden. Oder ich spiele sogar die Sounddatei, die ich aus der Datenbank abrufe.
Bitte helfen Sie mir
ich in der chinesischen Visual Studio 2010 mit .NET Framework 4.0 und der Text den ich versuche zu hören ist bin mit.
UPDATE: Ich habe einen anderen Weg, um diese Aufgabe abzuschließen. Wenn jemand Interesse hat. Könnte mich PM und fragen nach den Codes.
Wie haben kodieren Sie die URL mit den chinesischen Wörtern, um zu arbeiten? –