Lingua

TtsEngineSsml.GetOutputFormat(SpeakOutputFormat, IntPtr) Metodo

Definizione

Restituisce l'output audio più corrispondente supportato da una determinata risposta del motore di sintesi a una richiesta al motore di sintetizzatore per il supporto di un formato di output specifico.

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

Parametri

speakOutputFormat
SpeakOutputFormat

Membro valido dell'enumerazione SpeakOutputFormat che indica il tipo di formato di output audio richiesto.

targetWaveFormat
IntPtr

nativeint

Puntatore a un'impostazione struct contenente i dettagli per il tipo di formato audio richiesto dall'argomento speakOutputFormat .

Valori restituiti

IntPtr

nativeint

Restituisce un'istanza valida IntPtr che fa riferimento a un struct oggetto contenente informazioni dettagliate sul formato di output.

Esempio

L'implementazione di esempio seguente convalida gli input selezionati, usandoli se sono entro le tolleranze, altrimenti usando i valori predefiniti.

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;
}

Commenti

La struttura usata come targetWaveFormat e restituita dal metodo deve essere compatibile con l'oggetto WAVEFORMATEX disponibile in SAPI e il valore restituito deve essere allocato usando CoTaskMemAlloc.

Deve struct fornire funzionalità equivalenti 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;
}

Note per gli implementatori

L'oggetto che eredita da TtsEngineSsml deve esaminare il formato di output richiesto come specificato da targetWaveFormat e restituire il formato più vicino supportato.

Si applica a