zoukankan      html  css  js  c++  java
  • 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系统常用工具集
    Storm安装部署
    Linux下搭建Elasticsearch7.6.2集群
    解决SpringMVC @RequestBody无法注入基本数据类型
    微服务概念
    HashMap的原理简单介绍
    mysql进阶
    vue 路由缓存 keep-alive include和exclude无效
    el-date-picker 时间日期格式,选择范围限制
    RedisTemplate使用rightPushAll往list中添加时的注意事项
  • 原文地址:https://www.cnblogs.com/haoxiaobo/p/168323.html
Copyright © 2011-2022 走看看