C#调用科大讯飞离线语音合成TTS
原作者勿怪,未经允许就转载了,感谢万分。
http://www.cnblogs.com/xuguanghui/p/4505555.html
----------------------------------------------------
c#调用科大讯飞的离线语音合成,需要在科大讯飞开放平台:http://www.xfyun.cn 注册、创建应用(获取APPID)、开通离线语音服务、下载SDK。
SDK中目录如下:
关于目录结构,讯飞平台的资料库中有介绍。
bin目录下有msc.dll动态库。c#调用科大讯飞的语音合成,需要引用该文件。该文件是C语言生成的dll,C#没办法直接引用。所有需要用C#重新封装一个TTS.dll,然后再在C#项目中引用封装的TTS.dll。
步骤:
1.在VS中新建一个类库项目(TTS),新建一个类文件(TTS.cs)
2.TTS.cs中的内容如下:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.InteropServices;namespace TTS
{public enum ErrorCode{MSP_SUCCESS = 0,MSP_ERROR_FAIL = -1,MSP_ERROR_EXCEPTION = -2,/* General errors 10100(0x2774) */MSP_ERROR_GENERAL = 10100, /* 0x2774 */MSP_ERROR_OUT_OF_MEMORY = 10101, /* 0x2775 */MSP_ERROR_FILE_NOT_FOUND = 10102, /* 0x2776 */MSP_ERROR_NOT_SUPPORT = 10103, /* 0x2777 */MSP_ERROR_NOT_IMPLEMENT = 10104, /* 0x2778 */MSP_ERROR_ACCESS = 10105, /* 0x2779 */MSP_ERROR_INVALID_PARA = 10106, /* 0x277A */MSP_ERROR_INVALID_PARA_VALUE = 10107, /* 0x277B */MSP_ERROR_INVALID_HANDLE = 10108, /* 0x277C */MSP_ERROR_INVALID_DATA = 10109, /* 0x277D */MSP_ERROR_NO_LICENSE = 10110, /* 0x277E */MSP_ERROR_NOT_INIT = 10111, /* 0x277F */MSP_ERROR_NULL_HANDLE = 10112, /* 0x2780 */MSP_ERROR_OVERFLOW = 10113, /* 0x2781 */MSP_ERROR_TIME_OUT = 10114, /* 0x2782 */MSP_ERROR_OPEN_FILE = 10115, /* 0x2783 */MSP_ERROR_NOT_FOUND = 10116, /* 0x2784 */MSP_ERROR_NO_ENOUGH_BUFFER = 10117, /* 0x2785 */MSP_ERROR_NO_DATA = 10118, /* 0x2786 */MSP_ERROR_NO_MORE_DATA = 10119, /* 0x2787 */MSP_ERROR_SKIPPED = 10120, /* 0x2788 */MSP_ERROR_ALREADY_EXIST = 10121, /* 0x2789 */MSP_ERROR_LOAD_MODULE = 10122, /* 0x278A */MSP_ERROR_BUSY = 10123, /* 0x278B */MSP_ERROR_INVALID_CONFIG = 10124, /* 0x278C */MSP_ERROR_VERSION_CHECK = 10125, /* 0x278D */MSP_ERROR_CANCELED = 10126, /* 0x278E */MSP_ERROR_INVALID_MEDIA_TYPE = 10127, /* 0x278F */MSP_ERROR_CONFIG_INITIALIZE = 10128, /* 0x2790 */MSP_ERROR_CREATE_HANDLE = 10129, /* 0x2791 */MSP_ERROR_CODING_LIB_NOT_LOAD = 10130, /* 0x2792 *//* Error codes of network 10200(0x27D8)*/MSP_ERROR_NET_GENERAL = 10200, /* 0x27D8 */MSP_ERROR_NET_OPENSOCK = 10201, /* 0x27D9 */ /* Open socket */MSP_ERROR_NET_CONNECTSOCK = 10202, /* 0x27DA */ /* Connect socket */MSP_ERROR_NET_ACCEPTSOCK = 10203, /* 0x27DB */ /* Accept socket */MSP_ERROR_NET_SENDSOCK = 10204, /* 0x27DC */ /* Send socket data */MSP_ERROR_NET_RECVSOCK = 10205, /* 0x27DD */ /* Recv socket data */MSP_ERROR_NET_INVALIDSOCK = 10206, /* 0x27DE */ /* Invalid socket handle */MSP_ERROR_NET_BADADDRESS = 10207, /* 0x27EF */ /* Bad network address */MSP_ERROR_NET_BINDSEQUENCE = 10208, /* 0x27E0 */ /* Bind after listen/connect */MSP_ERROR_NET_NOTOPENSOCK = 10209, /* 0x27E1 */ /* Socket is not opened */MSP_ERROR_NET_NOTBIND = 10210, /* 0x27E2 */ /* Socket is not bind to an address */MSP_ERROR_NET_NOTLISTEN = 10211, /* 0x27E3 */ /* Socket is not listenning */MSP_ERROR_NET_CONNECTCLOSE = 10212, /* 0x27E4 */ /* The other side of connection is closed */MSP_ERROR_NET_NOTDGRAMSOCK = 10213, /* 0x27E5 */ /* The socket is not datagram type *//* Error codes of mssp message 10300(0x283C) */MSP_ERROR_MSG_GENERAL = 10300, /* 0x283C */MSP_ERROR_MSG_PARSE_ERROR = 10301, /* 0x283D */MSP_ERROR_MSG_BUILD_ERROR = 10302, /* 0x283E */MSP_ERROR_MSG_PARAM_ERROR = 10303, /* 0x283F */MSP_ERROR_MSG_CONTENT_EMPTY = 10304, /* 0x2840 */MSP_ERROR_MSG_INVALID_CONTENT_TYPE = 10305, /* 0x2841 */MSP_ERROR_MSG_INVALID_CONTENT_LENGTH = 10306, /* 0x2842 */MSP_ERROR_MSG_INVALID_CONTENT_ENCODE = 10307, /* 0x2843 */MSP_ERROR_MSG_INVALID_KEY = 10308, /* 0x2844 */MSP_ERROR_MSG_KEY_EMPTY = 10309, /* 0x2845 */MSP_ERROR_MSG_SESSION_ID_EMPTY = 10310, /* 0x2846 */MSP_ERROR_MSG_LOGIN_ID_EMPTY = 10311, /* 0x2847 */MSP_ERROR_MSG_SYNC_ID_EMPTY = 10312, /* 0x2848 */MSP_ERROR_MSG_APP_ID_EMPTY = 10313, /* 0x2849 */MSP_ERROR_MSG_EXTERN_ID_EMPTY = 10314, /* 0x284A */MSP_ERROR_MSG_INVALID_CMD = 10315, /* 0x284B */MSP_ERROR_MSG_INVALID_SUBJECT = 10316, /* 0x284C */MSP_ERROR_MSG_INVALID_VERSION = 10317, /* 0x284D */MSP_ERROR_MSG_NO_CMD = 10318, /* 0x284E */MSP_ERROR_MSG_NO_SUBJECT = 10319, /* 0x284F */MSP_ERROR_MSG_NO_VERSION = 10320, /* 0x2850 */MSP_ERROR_MSG_MSSP_EMPTY = 10321, /* 0x2851 */MSP_ERROR_MSG_NEW_RESPONSE = 10322, /* 0x2852 */MSP_ERROR_MSG_NEW_CONTENT = 10323, /* 0x2853 */MSP_ERROR_MSG_INVALID_SESSION_ID = 10324, /* 0x2854 *//* Error codes of DataBase 10400(0x28A0)*/MSP_ERROR_DB_GENERAL = 10400, /* 0x28A0 */MSP_ERROR_DB_EXCEPTION = 10401, /* 0x28A1 */MSP_ERROR_DB_NO_RESULT = 10402, /* 0x28A2 */MSP_ERROR_DB_INVALID_USER = 10403, /* 0x28A3 */MSP_ERROR_DB_INVALID_PWD = 10404, /* 0x28A4 */MSP_ERROR_DB_CONNECT = 10405, /* 0x28A5 */MSP_ERROR_DB_INVALID_SQL = 10406, /* 0x28A6 */MSP_ERROR_DB_INVALID_APPID = 10407, /* 0x28A7 *//* Error codes of Resource 10500(0x2904)*/MSP_ERROR_RES_GENERAL = 10500, /* 0x2904 */MSP_ERROR_RES_LOAD = 10501, /* 0x2905 */ /* Load resource */MSP_ERROR_RES_FREE = 10502, /* 0x2906 */ /* Free resource */MSP_ERROR_RES_MISSING = 10503, /* 0x2907 */ /* Resource File Missing */MSP_ERROR_RES_INVALID_NAME = 10504, /* 0x2908 */ /* Invalid resource file name */MSP_ERROR_RES_INVALID_ID = 10505, /* 0x2909 */ /* Invalid resource ID */MSP_ERROR_RES_INVALID_IMG = 10506, /* 0x290A */ /* Invalid resource image pointer */MSP_ERROR_RES_WRITE = 10507, /* 0x290B */ /* Write read-only resource */MSP_ERROR_RES_LEAK = 10508, /* 0x290C */ /* Resource leak out */MSP_ERROR_RES_HEAD = 10509, /* 0x290D */ /* Resource head currupt */MSP_ERROR_RES_DATA = 10510, /* 0x290E */ /* Resource data currupt */MSP_ERROR_RES_SKIP = 10511, /* 0x290F */ /* Resource file skipped *//* Error codes of TTS 10600(0x2968)*/MSP_ERROR_TTS_GENERAL = 10600, /* 0x2968 */MSP_ERROR_TTS_TEXTEND = 10601, /* 0x2969 */ /* Meet text end */MSP_ERROR_TTS_TEXT_EMPTY = 10602, /* 0x296A */ /* no synth text *//* Error codes of Recognizer 10700(0x29CC) */MSP_ERROR_REC_GENERAL = 10700, /* 0x29CC */MSP_ERROR_REC_INACTIVE = 10701, /* 0x29CD */MSP_ERROR_REC_GRAMMAR_ERROR = 10702, /* 0x29CE */MSP_ERROR_REC_NO_ACTIVE_GRAMMARS = 10703, /* 0x29CF */MSP_ERROR_REC_DUPLICATE_GRAMMAR = 10704, /* 0x29D0 */MSP_ERROR_REC_INVALID_MEDIA_TYPE = 10705, /* 0x29D1 */MSP_ERROR_REC_INVALID_LANGUAGE = 10706, /* 0x29D2 */MSP_ERROR_REC_URI_NOT_FOUND = 10707, /* 0x29D3 */MSP_ERROR_REC_URI_TIMEOUT = 10708, /* 0x29D4 */MSP_ERROR_REC_URI_FETCH_ERROR = 10709, /* 0x29D5 *//* Error codes of Speech Detector 10800(0x2A30) */MSP_ERROR_EP_GENERAL = 10800, /* 0x2A30 */MSP_ERROR_EP_NO_SESSION_NAME = 10801, /* 0x2A31 */MSP_ERROR_EP_INACTIVE = 10802, /* 0x2A32 */MSP_ERROR_EP_INITIALIZED = 10803, /* 0x2A33 *//* Error codes of TUV */MSP_ERROR_TUV_GENERAL = 10900, /* 0x2A94 */MSP_ERROR_TUV_GETHIDPARAM = 10901, /* 0x2A95 */ /* Get Busin Param huanid*/MSP_ERROR_TUV_TOKEN = 10902, /* 0x2A96 */ /* Get Token */MSP_ERROR_TUV_CFGFILE = 10903, /* 0x2A97 */ /* Open cfg file */MSP_ERROR_TUV_RECV_CONTENT = 10904, /* 0x2A98 */ /* received content is error */MSP_ERROR_TUV_VERFAIL = 10905, /* 0x2A99 */ /* Verify failure *//* Error codes of IMTV */MSP_ERROR_IMTV_SUCCESS = 11000, /* 0x2AF8 */ /* 成功 */MSP_ERROR_IMTV_NO_LICENSE = 11001, /* 0x2AF9 */ /* 试用次数结束,用户需要付费 */MSP_ERROR_IMTV_SESSIONID_INVALID = 11002, /* 0x2AFA */ /* SessionId失效,需要重新登录通行证 */MSP_ERROR_IMTV_SESSIONID_ERROR = 11003, /* 0x2AFB */ /* SessionId为空,或者非法 */MSP_ERROR_IMTV_UNLOGIN = 11004, /* 0x2AFC */ /* 未登录通行证 */MSP_ERROR_IMTV_SYSTEM_ERROR = 11005, /* 0x2AFD */ /* 系统错误 *//* Error codes of HCR */MSP_ERROR_HCR_GENERAL = 11100,MSP_ERROR_HCR_RESOURCE_NOT_EXIST = 11101,/* Error codes of http 12000(0x2EE0) */MSP_ERROR_HTTP_BASE = 12000, /* 0x2EE0 *//*Error codes of ISV */MSP_ERROR_ISV_NO_USER = 13000, /* 32C8 */ /* the user doesn't exist */}#region TTS枚举常量/// <summary>/// vol参数的枚举常量/// </summary>public enum enuVol{x_soft,soft,medium,loud,x_loud}/// <summary>/// speed语速参数的枚举常量/// </summary>public enum enuSpeed{x_slow,slow,medium,fast,x_fast}/// <summary>/// speeker朗读者枚举常量/// </summary>public enum enuSpeeker{小燕_青年女声_中英文_普通话 = 0,小宇_青年男声_中英文_普通话,凯瑟琳_青年女声_英语,亨利_青年男声_英语,玛丽_青年女声_英语,小研_青年女声_中英文_普通话,小琪_青年女声_中英文_普通话,小峰_青年男声_中英文_普通话,小梅_青年女声_中英文_粤语,小莉_青年女声_中英文_台普,小蓉_青年女声_汉语_四川话,小芸_青年女声_汉语_东北话,小坤_青年男声_汉语_河南话,小强_青年男声_汉语_湖南话,小莹_青年女声_汉语_陕西话,小新_童年男声_汉语_普通话,楠楠_童年女声_汉语_普通话,老孙_老年男声_汉语_普通话}public enum SynthStatus{MSP_TTS_FLAG_STILL_HAVE_DATA = 1,MSP_TTS_FLAG_DATA_END = 2,MSP_TTS_FLAG_CMD_CANCELED = 0}#endregionpublic class TTSDll{#region TTS dll import[DllImport("msc.dll", CallingConvention = CallingConvention.Winapi)]public static extern int MSPLogin(string user, string password, string configs);[DllImport("msc.dll", CallingConvention = CallingConvention.Winapi)]public static extern int MSPLogout();[DllImport("msc.dll", CallingConvention = CallingConvention.Winapi)]public static extern IntPtr QTTSSessionBegin(string _params, ref int errorCode);[DllImport("msc.dll", CallingConvention = CallingConvention.Winapi)]public static extern int QTTSTextPut(string sessionID, string textString, uint textLen, string _params);[DllImport("msc.dll", CallingConvention = CallingConvention.Winapi)]public static extern IntPtr QTTSAudioGet(string sessionID, ref uint audioLen, ref SynthStatus synthStatus, ref int errorCode);[DllImport("msc.dll", CallingConvention = CallingConvention.Winapi)]public static extern IntPtr QTTSAudioInfo(string sessionID);[DllImport("msc.dll", CallingConvention = CallingConvention.Winapi)]public static extern int QTTSSessionEnd(string sessionID, string hints);#endregion}
}
3.把该类库生成一个TTS.dll
4.在C#项目中引用该类库TTS.dll
5.另外需要把下载的SDK中的msc.dll放到语音合成项目中的Debug目录下面(可以百度一下C#调用C/C++的DLL)
6.语音合成项目的代码如下:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using TTS;
using System.Runtime.InteropServices;
using System.IO;
using System.Media;
using System.Threading;namespace OfflineSpeech
{public partial class Form1 : Form{public Form1(){InitializeComponent();}int ret = 0;IntPtr session_ID;private void button1_Click(object sender, EventArgs e){try{///APPID请勿随意改动string login_configs = "appid =***** ";//登录参数,自己注册后获取的appidstring text = richTextBox1.Text.Trim();//待合成的文本if (string.IsNullOrEmpty(richTextBox1.Text.Trim())){text = "请输入合成语音的内容";}string filename = "Call.wav"; //合成的语音文件uint audio_len = 0;SynthStatus synth_status = SynthStatus.MSP_TTS_FLAG_STILL_HAVE_DATA;ret = TTSDll.MSPLogin(string.Empty, string.Empty, login_configs);//第一个参数为用户名,第二个参数为密码,第三个参数是登录参数,用户名和密码需要在http://open.voicecloud.cn//MSPLogin方法返回失败if (ret !=(int) ErrorCode.MSP_SUCCESS){return;}//string parameter = "engine_type = local, voice_name=xiaoyan, tts_res_path =fo|res\\tts\\xiaoyan.jet;fo|res\\tts\\common.jet, sample_rate = 16000";string _params = "ssm=1,ent=sms16k,vcn=xiaoyan,spd=medium,aue=speex-wb;7,vol=x-loud,auf=audio/L16;rate=16000";//string @params = "engine_type = local,voice_name=xiaoyan,speed=50,volume=50,pitch=50,rcn=1, text_encoding = UTF8, background_sound=1,sample_rate = 16000";session_ID = TTSDll.QTTSSessionBegin(_params, ref ret);//QTTSSessionBegin方法返回失败if (ret != (int)ErrorCode.MSP_SUCCESS){return;}ret = TTSDll.QTTSTextPut(Ptr2Str(session_ID), text, (uint)Encoding.Default.GetByteCount(text), string.Empty);//QTTSTextPut方法返回失败if (ret != (int)ErrorCode.MSP_SUCCESS){return;}MemoryStream memoryStream = new MemoryStream();memoryStream.Write(new byte[44], 0, 44);while (true){IntPtr source = TTSDll.QTTSAudioGet(Ptr2Str(session_ID), ref audio_len, ref synth_status, ref ret);byte[] array = new byte[(int)audio_len];if (audio_len > 0){Marshal.Copy(source, array, 0, (int)audio_len);}memoryStream.Write(array, 0, array.Length);Thread.Sleep(1000);if (synth_status == SynthStatus.MSP_TTS_FLAG_DATA_END || ret != 0)break;}WAVE_Header wave_Header = getWave_Header((int)memoryStream.Length - 44);byte[] array2 = this.StructToBytes(wave_Header);memoryStream.Position = 0L;memoryStream.Write(array2, 0, array2.Length);memoryStream.Position = 0L;SoundPlayer soundPlayer = new SoundPlayer(memoryStream);soundPlayer.Stop();soundPlayer.Play();if (filename != null){FileStream fileStream = new FileStream(filename, FileMode.Create,FileAccess.Write);memoryStream.WriteTo(fileStream);memoryStream.Close();fileStream.Close();}}catch (Exception){}finally{ret = TTSDll.QTTSSessionEnd(Ptr2Str(session_ID), "");ret = TTSDll.MSPLogout();//退出登录}}/// <summary>/// 结构体转字符串/// </summary>/// <param name="structure"></param>/// <returns></returns>private byte[] StructToBytes(object structure){int num = Marshal.SizeOf(structure);IntPtr intPtr = Marshal.AllocHGlobal(num);byte[] result;try{Marshal.StructureToPtr(structure, intPtr, false);byte[] array = new byte[num];Marshal.Copy(intPtr, array, 0, num);result = array;}finally{Marshal.FreeHGlobal(intPtr);}return result;}/// <summary>/// 结构体初始化赋值/// </summary>/// <param name="data_len"></param>/// <returns></returns>private WAVE_Header getWave_Header(int data_len){return new WAVE_Header{RIFF_ID = 1179011410,File_Size = data_len + 36,RIFF_Type = 1163280727,FMT_ID = 544501094,FMT_Size = 16,FMT_Tag = 1,FMT_Channel = 1,FMT_SamplesPerSec = 16000,AvgBytesPerSec = 32000,BlockAlign = 2,BitsPerSample = 16,DATA_ID = 1635017060,DATA_Size = data_len};}/// <summary>/// 语音音频头/// </summary>private struct WAVE_Header{public int RIFF_ID;public int File_Size;public int RIFF_Type;public int FMT_ID;public int FMT_Size;public short FMT_Tag;public ushort FMT_Channel;public int FMT_SamplesPerSec;public int AvgBytesPerSec;public ushort BlockAlign;public ushort BitsPerSample;public int DATA_ID;public int DATA_Size;}/// 指针转字符串/// </summary>/// <param name="p">指向非托管代码字符串的指针</param>/// <returns>返回指针指向的字符串</returns>public static string Ptr2Str(IntPtr p){List<byte> lb = new List<byte>();while (Marshal.ReadByte(p) != 0){lb.Add(Marshal.ReadByte(p));p = p + 1;}byte[] bs = lb.ToArray();return Encoding.Default.GetString(lb.ToArray());}}
}
7.语音合成项目界面如下:
推荐科大讯飞平台论坛帖子:
http://bbs.xfyun.cn/forum.php?mod=viewthread&tid=3771
http://bbs.xfyun.cn/forum.php?mo ... &highlight=c%23
源码:
WindowsFormsApplication1.zip
appid :要使用自己在科大讯飞官网创建应用后的appid
如若内容造成侵权/违法违规/事实不符,请联系编程学习网邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
相关文章
- PHP在线语音合成
在线语音合成 PHP SDKhttp://yuyin.baidu.com/docs/tts/194PHP SDK文档简介Hi,您好,欢迎使用百度语音合成服务。本文档主要针对PHP开发者,描述百度语音合成接口服务的相关技术内容。如果您对文档内容有任何疑问,可以通过以下几种方式联系我们:在百度云控制台内提交工单,咨…...
2024/4/9 11:01:03 - 如何批量从库中导出DDL语句
在平时开发过程中,需要先在开发环境中开发,开发完并测试无误后导出ddl语句投放到生产环境。如果开发变动涉及到的object比较多,如何快速而又准确地导出是一个值得我们探讨的问题。通常我们会选择在PL/SQL developer中附带的export user objects工具中选择导出,但是这样做缺…...
2024/4/17 16:25:48 - JavaWeb---Junit单元测试
JavaWeb—Junit单元测试 测试分类:黑盒测试,白盒测试例:...
2024/4/12 17:09:42 - 深入浅出讲解语音合成一:merlin、Gantts及其前端处理
文字转语音(TTS)是一个给定文字输入,生成语音波形的系统。本系列文章将从传统的语音合成方法,到近期的端到端合成方案,各类型的声码器(个人认为比较有潜力的部分)进行讲解,作为近期实习结束后的工作总结。语音合成过程分为前端的文本处理,中端的模型训练和后端的声码器合…...
2024/4/22 12:16:27 - Node.js 在命令行下执行Console.log()命令时,第二行会打印undefined的原因
参考 http://stackoverflow.com/questions/9784865/node-js-console-log-throws-me-undefined node.js 版本 v6.4.0 问题描述:在命令行下执行Console.log()命令后,第一行会以 “正常的白字” 输出log内容,而第二行会输出一个 “50%透明的的白字” undefined,如图所示: 原…...
2024/4/13 3:36:56 - android 6.0 权限管理的学习资料和使用例子
2015-11-18: 去官网看了一下,之前的资料,发现官网更新了文档。对比了一下,在自己的文章加入一些新的内容(对一些知识点:完善说明,怎么测试权限管理)别人翻译的资料(很详细的)http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2015/0830/3387.html一个开源的权限…...
2024/4/9 11:00:56 - python基础教程(第二版)pdf
下载地址:网盘下载 Python基础教程(第2版.修订版)包括Python程序设计的方方面面,首先从Python的安装开始,随后介绍了Python的基础知识和基本概念,包括列表、元组、字符串、字典以及各种语句。然后循序渐进地介绍了一些相对高级的主题,包括抽象、异常、魔法方法、属性、…...
2024/4/12 17:10:38 - heritrix1.14.4配置-没有add和change按钮的问题
今天搞了下heritrix1.14.4在eclipse下的配置,根据http://www.360doc.com/content/10/0913/18/2793979_53385587.shtml教程,一步步操作非常顺利,但是就是最后一个问题: 3、在eclipse中可以启动heritrix,但在jobs->modules.jsp页面中没有添加(“Add”)按扭,且出现以下…...
2024/4/12 17:10:33 - android原生TTS+语音引擎 实现纯离线 免费的中英TTS
之前使用百度的语音合成 sdk做了个简单的tts,但是它不是真正的免费和纯离线的,所以在查阅相关资料后,使用Android的原生TTS ,因为它不支持中文,需要借助其他语音引擎可实现纯离线 免费的TTS。 Android原生的TTS是不支持中文合成的,需要借助其他的语音引擎(apk安装包),…...
2024/4/20 10:38:14 - Python 学习笔记(1)
1. 下载安装了 python 3.13,设置变量环境,安装GVIM; 2. 读了《python简明教程》前面5章内容,很久之前看过一遍,现在是重温,加做练习。 教程是Python v2.x,许多地方都不一样了:help, print,exit 需要以函数的标准形式来替换,help(), print(), exit();之前的 raw_inpu…...
2024/4/5 0:56:51 - DELETE 语句与 REFERENCE 约束冲突。
DELETE 语句与 REFERENCE 约束"FK__Comment__Article__0519C6AF"冲突。该冲突发生于数据库"dbArticle",表"dbo.Comment", column ArticleID。 语句已终止。外键取值规则:空值或参照的主键值。 (1)插入非空值时,如果主键表中没有这个值,则不…...
2024/4/5 0:56:50 - IDEA搭建javaWeb项目图文教程
1、新建一个Web项目两种方法:java 和 Java Enterprise(推荐)第一种)通过Java工程创建,这个方法需要手动导入Tomcat的servlet包才能使用servlet导入包的方法是创建项目并配置好Tomcat后,File->Project Structure,点击 Modules --> 选中项目“JavaWeb” --> 切换…...
2024/4/12 17:10:23 - Unity接微软认知服务语音合成(Azure-TTS)
上一篇我介绍了如何接入微软认知服务的语音识别,这篇文章我将为大家介绍如何接入微软认知服务的语音合成(以下简称语音合成)。语音合成中也需要用到YourSubscriptionKey和YourServiceRegion,获取方式同语音识别,这两个密钥与语音识别是通用的,所用到的SDK与语音识别的也是…...
2024/4/12 17:10:23 - 用Python解N皇后问题
看了一下午的《Python简明教程》,顺手写了个N皇后的程序玩玩儿。程序只用到了基本的功能。贴在这里记录一下。 def isOK(row,col): Is it possible that a queen is put at (row,col)? for i in range(1,row): if col==queen[i-1] or col-queen[i-1]==row-i or …...
2024/4/12 19:58:08 - android 学习
Android学习规划和学习资料 最近经常被问起如何更深入学习Android,在这里分享一些学习经验。 一、应用层: 应用层的书没有特别好的,内容都大同小异。推荐下面的学习资料: 1. Android developer网站http://developer.android.com Android developer网站提供了熟悉An…...
2024/4/13 8:09:15 - javaWeb实战教程4-jdbc连接数据库和junit单元测试
javaWeb实战教程2.5 junit单元测试我们在平时做代码时,每完成一个方法都需要先测试再提交,在java中比较常用的一个测试方法就是使用junit。首先在项目中加入junit的jar包:junit-4.7.jar;将jar包复制到WEB-INF/lib目录下。新建一个包专门存放测试类:cn.funsoftware.Lesson.…...
2024/4/27 12:29:19 - 转载 :Python官方简明教程
转自:https://wiki.ubuntu.org.cn/Python_官方简明教程 可以到readthedocs.org查看更新更专业的翻译版本 Python是一个简单易学、功能强大的编程语言。它拥有高效的高层次数据结构和简洁有效的面向对象程序设计支持。Python的优美语法和动态类型,与其解释执行的本性一起,使之…...
2024/4/16 20:51:00 - 第三部分 python的语句与语法
第三部分python的语句与语法 目录 第10章 python语句简介... 2 要点... 2 第11 章 赋值,表达式和打印... 3 赋值语句... 3 特性:... 3 高级序列赋值语句模式... 3 列表分解赋值... 3 多目标赋值语句 以及共享引用... 4 增强赋值语句... 4 变量命名规则... 5 命名惯例... 5 表…...
2024/4/12 17:10:33 - 文字变语音插件合成WAV文件超级强大,多语言支持,本例按键调用COM DLL
//初始化Plugin.DL_Speak.ini("Yxme64utTBJHV0R620180302005400")//获取系统中存在的发音员ss = Plugin.DL_Speak.GetLanguageMessageBox ss//设置系统语音库的发音员 0 1 2 3Plugin.DL_Speak.SetLanguage 0//设置发音语速+50Plugin.DL_Speak.Rate 50//朗读自定义文字…...
2024/4/17 8:46:08 - Android Studio安装配置(详细版)
Android studio安装配置(相关介绍) 一. 前景介绍: 在开发Android程序之前,首先要在系统中搭建开发环境。Google公司已经发出声明,到2015年年底不再对Ecplise提供支持服务,Android Studio将全面取代Ecplise。 出于开发者角度,我会把两种开发方式(Ecplise和Android stud…...
2024/4/12 17:10:18
最新文章
- 思维+线性dp,CF573 B. Bear and Blocks
目录 一、题目 1、题目描述 2、输入输出 2.1输入 2.2输出 3、原题链接 二、解题报告 1、思路分析 2、复杂度 3、代码详解 一、题目 1、题目描述 2、输入输出 2.1输入 2.2输出 3、原题链接 Problem - 573B - Codeforces 二、解题报告 1、思路分析 本题给的图还是很直…...
2024/4/28 0:54:29 - 梯度消失和梯度爆炸的一些处理方法
在这里是记录一下梯度消失或梯度爆炸的一些处理技巧。全当学习总结了如有错误还请留言,在此感激不尽。 权重和梯度的更新公式如下: w w − η ⋅ ∇ w w w - \eta \cdot \nabla w ww−η⋅∇w 个人通俗的理解梯度消失就是网络模型在反向求导的时候出…...
2024/3/20 10:50:27 - MySQL分库分表的方式有哪些
目录 一、为什么要分库分表 二、什么是分库分表 三、分库分表的几种方式 1.垂直拆分 2. 水平拆分 四、分库分表带来的问题 五、分库分表技术如何选型 一、为什么要分库分表 如果一个网站业务快速发展,那这个网站流量也会增加,数据的压力也会随之而…...
2024/4/22 18:31:53 - 《前端防坑》- JS基础 - 你觉得typeof nullValue === null 么?
问题 JS原始类型有6种Undefined, Null, Number, String, Boolean, Symbol共6种。 在对原始类型使用typeof进行判断时, typeof stringValue string typeof numberValue number 如果一个变量(nullValue)的值为null,那么typeof nullValue "?" const u …...
2024/4/25 5:18:48 - MySQL 底层数据结构 聚簇索引以及二级索引 Explain的使用
数据结构 我们知道MySQL的存储引擎Innodb默认底层是使用B树的变种来存储数据的 下面我们来复习一下B树存储 B树存储 哈希存储的区别 哈希存储,只能使用等值查询 B树与B树存储 我们知道B树实际上就是B树的变种 那么为啥使用B树而不是使用B树呢? 我们知道效率的高低主要取决于…...
2024/4/23 6:22:51 - 【外汇早评】美通胀数据走低,美元调整
原标题:【外汇早评】美通胀数据走低,美元调整昨日美国方面公布了新一期的核心PCE物价指数数据,同比增长1.6%,低于前值和预期值的1.7%,距离美联储的通胀目标2%继续走低,通胀压力较低,且此前美国一季度GDP初值中的消费部分下滑明显,因此市场对美联储后续更可能降息的政策…...
2024/4/26 18:09:39 - 【原油贵金属周评】原油多头拥挤,价格调整
原标题:【原油贵金属周评】原油多头拥挤,价格调整本周国际劳动节,我们喜迎四天假期,但是整个金融市场确实流动性充沛,大事频发,各个商品波动剧烈。美国方面,在本周四凌晨公布5月份的利率决议和新闻发布会,维持联邦基金利率在2.25%-2.50%不变,符合市场预期。同时美联储…...
2024/4/26 20:12:18 - 【外汇周评】靓丽非农不及疲软通胀影响
原标题:【外汇周评】靓丽非农不及疲软通胀影响在刚结束的周五,美国方面公布了新一期的非农就业数据,大幅好于前值和预期,新增就业重新回到20万以上。具体数据: 美国4月非农就业人口变动 26.3万人,预期 19万人,前值 19.6万人。 美国4月失业率 3.6%,预期 3.8%,前值 3…...
2024/4/26 23:05:52 - 【原油贵金属早评】库存继续增加,油价收跌
原标题:【原油贵金属早评】库存继续增加,油价收跌周三清晨公布美国当周API原油库存数据,上周原油库存增加281万桶至4.692亿桶,增幅超过预期的74.4万桶。且有消息人士称,沙特阿美据悉将于6月向亚洲炼油厂额外出售更多原油,印度炼油商预计将每日获得至多20万桶的额外原油供…...
2024/4/27 4:00:35 - 【外汇早评】日本央行会议纪要不改日元强势
原标题:【外汇早评】日本央行会议纪要不改日元强势近两日日元大幅走强与近期市场风险情绪上升,避险资金回流日元有关,也与前一段时间的美日贸易谈判给日本缓冲期,日本方面对汇率问题也避免继续贬值有关。虽然今日早间日本央行公布的利率会议纪要仍然是支持宽松政策,但这符…...
2024/4/27 17:58:04 - 【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响
原标题:【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响近日伊朗局势升温,导致市场担忧影响原油供给,油价试图反弹。此时OPEC表态稳定市场。据消息人士透露,沙特6月石油出口料将低于700万桶/日,沙特已经收到石油消费国提出的6月份扩大出口的“适度要求”,沙特将满…...
2024/4/27 14:22:49 - 【外汇早评】美欲与伊朗重谈协议
原标题:【外汇早评】美欲与伊朗重谈协议美国对伊朗的制裁遭到伊朗的抗议,昨日伊朗方面提出将部分退出伊核协议。而此行为又遭到欧洲方面对伊朗的谴责和警告,伊朗外长昨日回应称,欧洲国家履行它们的义务,伊核协议就能保证存续。据传闻伊朗的导弹已经对准了以色列和美国的航…...
2024/4/26 21:56:58 - 【原油贵金属早评】波动率飙升,市场情绪动荡
原标题:【原油贵金属早评】波动率飙升,市场情绪动荡因中美贸易谈判不安情绪影响,金融市场各资产品种出现明显的波动。随着美国与中方开启第十一轮谈判之际,美国按照既定计划向中国2000亿商品征收25%的关税,市场情绪有所平复,已经开始接受这一事实。虽然波动率-恐慌指数VI…...
2024/4/27 9:01:45 - 【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试
原标题:【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试美国和伊朗的局势继续升温,市场风险情绪上升,避险黄金有向上突破阻力的迹象。原油方面稍显平稳,近期美国和OPEC加大供给及市场需求回落的影响,伊朗局势并未推升油价走强。近期中美贸易谈判摩擦再度升级,美国对中…...
2024/4/27 17:59:30 - 【原油贵金属早评】市场情绪继续恶化,黄金上破
原标题:【原油贵金属早评】市场情绪继续恶化,黄金上破周初中国针对于美国加征关税的进行的反制措施引发市场情绪的大幅波动,人民币汇率出现大幅的贬值动能,金融市场受到非常明显的冲击。尤其是波动率起来之后,对于股市的表现尤其不安。隔夜美国股市出现明显的下行走势,这…...
2024/4/25 18:39:16 - 【外汇早评】美伊僵持,风险情绪继续升温
原标题:【外汇早评】美伊僵持,风险情绪继续升温昨日沙特两艘油轮再次发生爆炸事件,导致波斯湾局势进一步恶化,市场担忧美伊可能会出现摩擦生火,避险品种获得支撑,黄金和日元大幅走强。美指受中美贸易问题影响而在低位震荡。继5月12日,四艘商船在阿联酋领海附近的阿曼湾、…...
2024/4/25 18:39:16 - 【原油贵金属早评】贸易冲突导致需求低迷,油价弱势
原标题:【原油贵金属早评】贸易冲突导致需求低迷,油价弱势近日虽然伊朗局势升温,中东地区几起油船被袭击事件影响,但油价并未走高,而是出于调整结构中。由于市场预期局势失控的可能性较低,而中美贸易问题导致的全球经济衰退风险更大,需求会持续低迷,因此油价调整压力较…...
2024/4/26 19:03:37 - 氧生福地 玩美北湖(上)——为时光守候两千年
原标题:氧生福地 玩美北湖(上)——为时光守候两千年一次说走就走的旅行,只有一张高铁票的距离~ 所以,湖南郴州,我来了~ 从广州南站出发,一个半小时就到达郴州西站了。在动车上,同时改票的南风兄和我居然被分到了一个车厢,所以一路非常愉快地聊了过来。 挺好,最起…...
2024/4/26 22:01:59 - 氧生福地 玩美北湖(中)——永春梯田里的美与鲜
原标题:氧生福地 玩美北湖(中)——永春梯田里的美与鲜一觉醒来,因为大家太爱“美”照,在柳毅山庄去寻找龙女而错过了早餐时间。近十点,向导坏坏还是带着饥肠辘辘的我们去吃郴州最富有盛名的“鱼头粉”。说这是“十二分推荐”,到郴州必吃的美食之一。 哇塞!那个味美香甜…...
2024/4/25 18:39:14 - 氧生福地 玩美北湖(下)——奔跑吧骚年!
原标题:氧生福地 玩美北湖(下)——奔跑吧骚年!让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 啊……啊……啊 两…...
2024/4/26 23:04:58 - 扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!
原标题:扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!扒开伪装医用面膜,翻六倍价格宰客!当行业里的某一品项火爆了,就会有很多商家蹭热度,装逼忽悠,最近火爆朋友圈的医用面膜,被沾上了污点,到底怎么回事呢? “比普通面膜安全、效果好!痘痘、痘印、敏感肌都能用…...
2024/4/27 23:24:42 - 「发现」铁皮石斛仙草之神奇功效用于医用面膜
原标题:「发现」铁皮石斛仙草之神奇功效用于医用面膜丽彦妆铁皮石斛医用面膜|石斛多糖无菌修护补水贴19大优势: 1、铁皮石斛:自唐宋以来,一直被列为皇室贡品,铁皮石斛生于海拔1600米的悬崖峭壁之上,繁殖力差,产量极低,所以古代仅供皇室、贵族享用 2、铁皮石斛自古民间…...
2024/4/25 18:39:00 - 丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者
原标题:丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者【公司简介】 广州华彬企业隶属香港华彬集团有限公司,专注美业21年,其旗下品牌: 「圣茵美」私密荷尔蒙抗衰,产后修复 「圣仪轩」私密荷尔蒙抗衰,产后修复 「花茵莳」私密荷尔蒙抗衰,产后修复 「丽彦妆」专注医学护…...
2024/4/26 19:46:12 - 广州械字号面膜生产厂家OEM/ODM4项须知!
原标题:广州械字号面膜生产厂家OEM/ODM4项须知!广州械字号面膜生产厂家OEM/ODM流程及注意事项解读: 械字号医用面膜,其实在我国并没有严格的定义,通常我们说的医美面膜指的应该是一种「医用敷料」,也就是说,医用面膜其实算作「医疗器械」的一种,又称「医用冷敷贴」。 …...
2024/4/27 11:43:08 - 械字号医用眼膜缓解用眼过度到底有无作用?
原标题:械字号医用眼膜缓解用眼过度到底有无作用?医用眼膜/械字号眼膜/医用冷敷眼贴 凝胶层为亲水高分子材料,含70%以上的水分。体表皮肤温度传导到本产品的凝胶层,热量被凝胶内水分子吸收,通过水分的蒸发带走大量的热量,可迅速地降低体表皮肤局部温度,减轻局部皮肤的灼…...
2024/4/27 8:32:30 - 配置失败还原请勿关闭计算机,电脑开机屏幕上面显示,配置失败还原更改 请勿关闭计算机 开不了机 这个问题怎么办...
解析如下:1、长按电脑电源键直至关机,然后再按一次电源健重启电脑,按F8健进入安全模式2、安全模式下进入Windows系统桌面后,按住“winR”打开运行窗口,输入“services.msc”打开服务设置3、在服务界面,选中…...
2022/11/19 21:17:18 - 错误使用 reshape要执行 RESHAPE,请勿更改元素数目。
%读入6幅图像(每一幅图像的大小是564*564) f1 imread(WashingtonDC_Band1_564.tif); subplot(3,2,1),imshow(f1); f2 imread(WashingtonDC_Band2_564.tif); subplot(3,2,2),imshow(f2); f3 imread(WashingtonDC_Band3_564.tif); subplot(3,2,3),imsho…...
2022/11/19 21:17:16 - 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机...
win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”问题的解决方法在win7系统关机时如果有升级系统的或者其他需要会直接进入一个 等待界面,在等待界面中我们需要等待操作结束才能关机,虽然这比较麻烦,但是对系统进行配置和升级…...
2022/11/19 21:17:15 - 台式电脑显示配置100%请勿关闭计算机,“准备配置windows 请勿关闭计算机”的解决方法...
有不少用户在重装Win7系统或更新系统后会遇到“准备配置windows,请勿关闭计算机”的提示,要过很久才能进入系统,有的用户甚至几个小时也无法进入,下面就教大家这个问题的解决方法。第一种方法:我们首先在左下角的“开始…...
2022/11/19 21:17:14 - win7 正在配置 请勿关闭计算机,怎么办Win7开机显示正在配置Windows Update请勿关机...
置信有很多用户都跟小编一样遇到过这样的问题,电脑时发现开机屏幕显现“正在配置Windows Update,请勿关机”(如下图所示),而且还需求等大约5分钟才干进入系统。这是怎样回事呢?一切都是正常操作的,为什么开时机呈现“正…...
2022/11/19 21:17:13 - 准备配置windows 请勿关闭计算机 蓝屏,Win7开机总是出现提示“配置Windows请勿关机”...
Win7系统开机启动时总是出现“配置Windows请勿关机”的提示,没过几秒后电脑自动重启,每次开机都这样无法进入系统,此时碰到这种现象的用户就可以使用以下5种方法解决问题。方法一:开机按下F8,在出现的Windows高级启动选…...
2022/11/19 21:17:12 - 准备windows请勿关闭计算机要多久,windows10系统提示正在准备windows请勿关闭计算机怎么办...
有不少windows10系统用户反映说碰到这样一个情况,就是电脑提示正在准备windows请勿关闭计算机,碰到这样的问题该怎么解决呢,现在小编就给大家分享一下windows10系统提示正在准备windows请勿关闭计算机的具体第一种方法:1、2、依次…...
2022/11/19 21:17:11 - 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”的解决方法...
今天和大家分享一下win7系统重装了Win7旗舰版系统后,每次关机的时候桌面上都会显示一个“配置Windows Update的界面,提示请勿关闭计算机”,每次停留好几分钟才能正常关机,导致什么情况引起的呢?出现配置Windows Update…...
2022/11/19 21:17:10 - 电脑桌面一直是清理请关闭计算机,windows7一直卡在清理 请勿关闭计算机-win7清理请勿关机,win7配置更新35%不动...
只能是等着,别无他法。说是卡着如果你看硬盘灯应该在读写。如果从 Win 10 无法正常回滚,只能是考虑备份数据后重装系统了。解决来方案一:管理员运行cmd:net stop WuAuServcd %windir%ren SoftwareDistribution SDoldnet start WuA…...
2022/11/19 21:17:09 - 计算机配置更新不起,电脑提示“配置Windows Update请勿关闭计算机”怎么办?
原标题:电脑提示“配置Windows Update请勿关闭计算机”怎么办?win7系统中在开机与关闭的时候总是显示“配置windows update请勿关闭计算机”相信有不少朋友都曾遇到过一次两次还能忍但经常遇到就叫人感到心烦了遇到这种问题怎么办呢?一般的方…...
2022/11/19 21:17:08 - 计算机正在配置无法关机,关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机...
关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!关机提示 windows7 正在配…...
2022/11/19 21:17:05 - 钉钉提示请勿通过开发者调试模式_钉钉请勿通过开发者调试模式是真的吗好不好用...
钉钉请勿通过开发者调试模式是真的吗好不好用 更新时间:2020-04-20 22:24:19 浏览次数:729次 区域: 南阳 > 卧龙 列举网提醒您:为保障您的权益,请不要提前支付任何费用! 虚拟位置外设器!!轨迹模拟&虚拟位置外设神器 专业用于:钉钉,外勤365,红圈通,企业微信和…...
2022/11/19 21:17:05 - 配置失败还原请勿关闭计算机怎么办,win7系统出现“配置windows update失败 还原更改 请勿关闭计算机”,长时间没反应,无法进入系统的解决方案...
前几天班里有位学生电脑(windows 7系统)出问题了,具体表现是开机时一直停留在“配置windows update失败 还原更改 请勿关闭计算机”这个界面,长时间没反应,无法进入系统。这个问题原来帮其他同学也解决过,网上搜了不少资料&#x…...
2022/11/19 21:17:04 - 一个电脑无法关闭计算机你应该怎么办,电脑显示“清理请勿关闭计算机”怎么办?...
本文为你提供了3个有效解决电脑显示“清理请勿关闭计算机”问题的方法,并在最后教给你1种保护系统安全的好方法,一起来看看!电脑出现“清理请勿关闭计算机”在Windows 7(SP1)和Windows Server 2008 R2 SP1中,添加了1个新功能在“磁…...
2022/11/19 21:17:03 - 请勿关闭计算机还原更改要多久,电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机怎么办...
许多用户在长期不使用电脑的时候,开启电脑发现电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机。。.这要怎么办呢?下面小编就带着大家一起看看吧!如果能够正常进入系统,建议您暂时移…...
2022/11/19 21:17:02 - 还原更改请勿关闭计算机 要多久,配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以...
配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!配置windows update失败 还原更改 请勿关闭计算机&#x…...
2022/11/19 21:17:01 - 电脑配置中请勿关闭计算机怎么办,准备配置windows请勿关闭计算机一直显示怎么办【图解】...
不知道大家有没有遇到过这样的一个问题,就是我们的win7系统在关机的时候,总是喜欢显示“准备配置windows,请勿关机”这样的一个页面,没有什么大碍,但是如果一直等着的话就要两个小时甚至更久都关不了机,非常…...
2022/11/19 21:17:00 - 正在准备配置请勿关闭计算机,正在准备配置windows请勿关闭计算机时间长了解决教程...
当电脑出现正在准备配置windows请勿关闭计算机时,一般是您正对windows进行升级,但是这个要是长时间没有反应,我们不能再傻等下去了。可能是电脑出了别的问题了,来看看教程的说法。正在准备配置windows请勿关闭计算机时间长了方法一…...
2022/11/19 21:16:59 - 配置失败还原请勿关闭计算机,配置Windows Update失败,还原更改请勿关闭计算机...
我们使用电脑的过程中有时会遇到这种情况,当我们打开电脑之后,发现一直停留在一个界面:“配置Windows Update失败,还原更改请勿关闭计算机”,等了许久还是无法进入系统。如果我们遇到此类问题应该如何解决呢࿰…...
2022/11/19 21:16:58 - 如何在iPhone上关闭“请勿打扰”
Apple’s “Do Not Disturb While Driving” is a potentially lifesaving iPhone feature, but it doesn’t always turn on automatically at the appropriate time. For example, you might be a passenger in a moving car, but your iPhone may think you’re the one dri…...
2022/11/19 21:16:57