Updating
This commit is contained in:
+56
@@ -5,6 +5,8 @@ namespace LCU.Webapps.Marketing.SPIT.Model
|
|||||||
{
|
{
|
||||||
public class SpitConfiguration
|
public class SpitConfiguration
|
||||||
{
|
{
|
||||||
|
private const string DefaultSpeechSynthesisPath = "/tts/cognitiveservices/v1";
|
||||||
|
|
||||||
public string AppName { get; set; }
|
public string AppName { get; set; }
|
||||||
public string SeqApiKey { get; set; }
|
public string SeqApiKey { get; set; }
|
||||||
public string SeqUrl { get; set; }
|
public string SeqUrl { get; set; }
|
||||||
@@ -36,6 +38,45 @@ namespace LCU.Webapps.Marketing.SPIT.Model
|
|||||||
return new Uri(SpeechEndpoint.Trim(), UriKind.Absolute);
|
return new Uri(SpeechEndpoint.Trim(), UriKind.Absolute);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Uri ResolveSpeechSynthesisEndpointUri()
|
||||||
|
{
|
||||||
|
var endpoint = ResolveSpeechEndpointUri();
|
||||||
|
if (endpoint == null)
|
||||||
|
{
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
var endpointPath = endpoint.AbsolutePath?.Trim() ?? string.Empty;
|
||||||
|
if (string.IsNullOrWhiteSpace(endpointPath) || endpointPath == "/")
|
||||||
|
{
|
||||||
|
return new Uri(endpoint, ResolveSpeechSynthesisPath());
|
||||||
|
}
|
||||||
|
|
||||||
|
if (endpointPath.EndsWith("/websocket/v1", StringComparison.OrdinalIgnoreCase))
|
||||||
|
{
|
||||||
|
return new UriBuilder(endpoint)
|
||||||
|
{
|
||||||
|
Scheme = Uri.UriSchemeHttps,
|
||||||
|
Port = -1,
|
||||||
|
Path = endpointPath.Replace("/websocket/v1", "/v1", StringComparison.OrdinalIgnoreCase),
|
||||||
|
Query = string.Empty
|
||||||
|
}.Uri;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (endpointPath.EndsWith("/voices/list", StringComparison.OrdinalIgnoreCase))
|
||||||
|
{
|
||||||
|
return new UriBuilder(endpoint)
|
||||||
|
{
|
||||||
|
Scheme = Uri.UriSchemeHttps,
|
||||||
|
Port = -1,
|
||||||
|
Path = endpointPath.Replace("/voices/list", "/v1", StringComparison.OrdinalIgnoreCase),
|
||||||
|
Query = string.Empty
|
||||||
|
}.Uri;
|
||||||
|
}
|
||||||
|
|
||||||
|
return endpoint;
|
||||||
|
}
|
||||||
|
|
||||||
public Uri ResolveSpeechTokenUri()
|
public Uri ResolveSpeechTokenUri()
|
||||||
{
|
{
|
||||||
return new Uri(ResolveSpeechEndpointUri(), FetchTokenUri);
|
return new Uri(ResolveSpeechEndpointUri(), FetchTokenUri);
|
||||||
@@ -45,5 +86,20 @@ namespace LCU.Webapps.Marketing.SPIT.Model
|
|||||||
{
|
{
|
||||||
return new Uri(ResolveSpeechEndpointUri(), VoicesUrl);
|
return new Uri(ResolveSpeechEndpointUri(), VoicesUrl);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private string ResolveSpeechSynthesisPath()
|
||||||
|
{
|
||||||
|
if (!string.IsNullOrWhiteSpace(WebsocketUrl))
|
||||||
|
{
|
||||||
|
return WebsocketUrl.Replace("/websocket/v1", "/v1", StringComparison.OrdinalIgnoreCase);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!string.IsNullOrWhiteSpace(VoicesUrl))
|
||||||
|
{
|
||||||
|
return VoicesUrl.Replace("/voices/list", "/v1", StringComparison.OrdinalIgnoreCase);
|
||||||
|
}
|
||||||
|
|
||||||
|
return DefaultSpeechSynthesisPath;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+19
-3
@@ -107,9 +107,25 @@ namespace LCU.Webapps.Marketing.SPIT.Services
|
|||||||
|
|
||||||
private SpeechConfig BuildSpeechConfig()
|
private SpeechConfig BuildSpeechConfig()
|
||||||
{
|
{
|
||||||
return SpeechConfig.FromEndpoint(
|
var synthesisEndpoint = _spitConfiguration.ResolveSpeechSynthesisEndpointUri();
|
||||||
_spitConfiguration.ResolveSpeechEndpointUri(),
|
if (synthesisEndpoint != null)
|
||||||
_spitConfiguration.SpeechApiKey);
|
{
|
||||||
|
Log.Information(
|
||||||
|
"Using speech synthesis endpoint {SpeechSynthesisEndpoint} for file generation.",
|
||||||
|
synthesisEndpoint);
|
||||||
|
|
||||||
|
return SpeechConfig.FromEndpoint(
|
||||||
|
synthesisEndpoint,
|
||||||
|
_spitConfiguration.SpeechApiKey);
|
||||||
|
}
|
||||||
|
|
||||||
|
Log.Information(
|
||||||
|
"SpeechEndpoint is not configured for file generation. Falling back to region {Region}.",
|
||||||
|
_spitConfiguration.Region);
|
||||||
|
|
||||||
|
return SpeechConfig.FromSubscription(
|
||||||
|
_spitConfiguration.SpeechApiKey,
|
||||||
|
_spitConfiguration.Region);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user