• MS Speech api 5.0朗读引擎的多线程处理.


    同一个输出流, 不可以在多线程上共用. 如果要共用, 一定要使用临界段.
    不同的输出流, 在多线程上并发处理时互相没有影响.
    代码说话:

    public static void testmulttts()
    {
        Thread [] arT 
    = new Thread[8];
        
    for (int i = 0; i < arT.Length; i ++)
        {
            arT[i] 
    = new Thread(new ThreadStart(testtts));
        }

        
    foreach(Thread t in arT)
        {
            t.Start();
            Thread.Sleep(
    500);
            System.Console.WriteLine(
    "线程已经启动!");
        }            
    }


    public static void testtts()
    {

        
    ///http://msdn.microsoft.com/library/default.asp?url=/library/en-us/SAPI51sr/html/ispvoice_speak.asp
        SpeechLib.SpVoiceClass sp = new SpeechLib.SpVoiceClass();            

        SpeechLib.SpFileStreamClass fs 
    = new SpeechLib.SpFileStreamClass();            
        fs.Format.Type 
    = SpeechLib.SpeechAudioFormatType.SAFT8kHz8BitMono;
        fs.Open(
    "c:\\" + Guid.NewGuid().ToString() + ".wav" , SpeechLib.SpeechStreamFileMode.SSFMCreateForWrite, false);
        
    // sp.AudioOutputStream = fs;
        
    // The format of selection criteria is 
        
    //"Attribute = Value" and "Attribute != Value." 
        
    // Voice attributes include 
        
    //"Gender," "Age," "Name," "Language," and "Vendor."
        
    // 上述这些属性的值可以从注册表的
        
    //HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Speech\Voices\Tokens\MSSimplifiedChineseVoice\Attributes
        
    // 看到
        SpeechLib.ISpeechObjectTokens sps = sp.GetVoices("Language = 409""");
        
    for (int i = 0; i < sps.Count; i ++)
        {
            sp.Voice 
    = sps.Item(i);

            
    lock(typeof(Class1))
            {
                sp.Speak(
    "speak in English."
                    SpeechLib.SpeechVoiceSpeakFlags.SVSFDefault);
            }
        }
        sps 
    = sp.GetVoices("Language = 804""");
        
    if (sps.Count > 0)
        {
            sp.Voice 
    = sps.Item(0);
            
    lock(typeof(Class1))
            {
                sp.Speak(
    "中华人民共和国, 中央人民政府, 成立了!"
                    SpeechLib.SpeechVoiceSpeakFlags.SVSFDefault);
            }
        }
        fs.Close();
        Marshal.ReleaseComObject(sp);
        Console.WriteLine(
    "线程录音完成.");
    }
    }
  • 相关阅读:
    Linux服务器管理: 系统的定时任务crond
    Nmon的安装使用及获取报表
    笔记:LoadRunner性能测试巧匠训练营
    python-解决安装MySQL-python出现的: Python version 2.7 required,which was not found in the registry
    JMeter监控内存及CPU——plugin插件监控被测系统资源方法
    Linux监控
    SSL与TLS的区别以及介绍
    [存]Jmeter 如何实现跨线程组传递参数
    Robot Framework简介
    [转]Appium搭建六:安装Android模拟器
  • 原文地址:https://www.cnblogs.com/haoxiaobo/p/168323.html
Copyright © 2020-2023  润新知