Idioma

TtsEngineSsml.GetOutputFormat(SpeakOutputFormat, IntPtr) Método

Definição

Devolve a melhor saída de áudio compatível suportada por um determinado motor de sintetização a um pedido ao motor de sintetizador para suporte a um determinado formato de saída.

public:
 abstract IntPtr GetOutputFormat(System::Speech::Synthesis::TtsEngine::SpeakOutputFormat speakOutputFormat, IntPtr targetWaveFormat);
public abstract IntPtr GetOutputFormat(System.Speech.Synthesis.TtsEngine.SpeakOutputFormat speakOutputFormat, IntPtr targetWaveFormat);
abstract member GetOutputFormat : System.Speech.Synthesis.TtsEngine.SpeakOutputFormat * nativeint -> nativeint
Public MustOverride Function GetOutputFormat (speakOutputFormat As SpeakOutputFormat, targetWaveFormat As IntPtr) As IntPtr

Parâmetros

speakOutputFormat
SpeakOutputFormat

Membro válido da SpeakOutputFormat enumeração indicando o tipo de formato de saída áudio solicitado.

targetWaveFormat
IntPtr

nativeint

Um apontador para uma struct definição de detalhe contendo para o tipo de formato áudio solicitado pelo speakOutputFormat argumento.

Devoluções

IntPtr

nativeint

Devolve uma instância válida IntPtr referindo-se struct a a contendo informação detalhada sobre o formato de saída.

Exemplos

A implementação de exemplo abaixo valida entradas selecionadas, usando-as se estiverem dentro das tolerâncias, caso contrário usando valores padrão.

public IntPtr GetOutputFormat(SpeakOutputFormat format, IntPtr targetWaveFormat) {
    WaveFormat waveFormat = new WaveFormat();
    WaveFormat rq=new WaveFormat();
    Marshal.PtrToStructure(targetWaveFormat,rq);

    waveFormat.AvgBytesPerSec = AvgBytesPerSec Min < rq.AvgBytesPerSec && rq.AvgBytesPerSec < AvgBytesPerSecMax? rq.AvgBytesPerSec : 3200;
    waveFormat.BitsPerSample = BitsPerSampleMin < rq.AvgBytesPerSec && rq.BitsPerSample < BitsPerSampleMax ? rq.AvgBytesPerSec : 3200; 16;
    waveFormat.BlockAlign = 2;
    waveFormat.Channels = 1;
    waveFormat.FormatTag = 1;
    waveFormat.SamplesPerSec = 16000;
    waveFormat.Size = 0;

    IntPtr wfx = Marshal.AllocCoTaskMem(Marshal.SizeOf(waveFormat));
    Marshal.StructureToPtr(waveFormat, wfx, false);

    //Console.WriteLine ("GetOutputFormat called");
    return wfx;
}
internal struct WaveFormat {
    public Int16 FormatTag;
    public Int16 Channels;
    public int SamplesPerSec;
    public int AvgBytesPerSec;
    public Int16 BlockAlign;
    public Int16 BitsPerSample;
    public Int16 Size;
}

Observações

A estrutura usada como targetWaveFormat e devolvida pelo método deve ser compatível com a WAVEFORMATEX disponível sob SAPI, e o valor devolvido deve ser alocado usando CoTaskMemAlloc.

Deve struct fornecer funcionalidades equivalentes a:

internal struct WaveFormat
{
    public Int16 FormatTag;
    public Int16 Channels;
    public int SamplesPerSec;
    public int AvgBytesPerSec;
    public Int16 BlockAlign;
    public Int16 BitsPerSample;
    public Int16 Size;
}

Notas para Implementadores

O objeto que herda de TtsEngineSsml deve examinar o formato de saída solicitado conforme especificado por targetWaveFormat e devolver o formato mais próximo que suporta.

Aplica-se a