У меня возникли некоторые проблемы при использовании переводчика Microsoft. Метод Speak интерфейса HTTP.
Это мой код:
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;
}
}
Я удалил идентификатор клиента и секрет клиента.
Проблема, с которой я сталкиваюсь, заключается в том, что я ничего не слышу, если запускаю сайт на сервере.Да, я знаю, что когда пользователь нажимает кнопку, на сервере создается SoundPlayer, поэтому клиентская часть ничего не слышит.
Я искал все виды методов поиска.Но безрезультатно.
Я пытался использовать метод для сохранения потока и обновления базы данных.Все хорошо, если я запускаю его из Visual Studio.Но на стороне клиента он не может загрузить поток.Или даже воспроизведение звукового файла, который я извлекаю из базы данных.
Пожалуйста, помогите мне
Я использую Visual Studio 2010 с .NET Framework 4.0, и текст, который я пытаюсь услышать, написан на китайском языке.
ОБНОВЛЕНИЕ: У меня есть другой способ выполнить эту задачу.Если у кого есть интерес.Могли бы PM и попросить коды.