天道酬勤,学无止境

如何编程计算机在R中大声说话(How to program the computer to speak put loud in R)

问题

我在 R 中有一个脚本,它返回a ,我可以将结果打印为

print(a)

我想要“speak()”之类的东西,而不是print() 。 这样计算机就可以使用它的“内部声音”并大声说出变量a是什么。

这在R中甚至可能吗?

(我使用 OSX)

(例如,在选择一条文本时,可以在OSX中听“语音” - >右键单击 - > Speacal - >开始说话。)

回答1

问题解决了!

正如@Dason 指出的那样,可以使用 system() 在 R 中进行系统调用并as command

system() 中的命令需要是一个以“say”开头的完整字符串,并且可以使用 sprintf() 将字符串组合在一起。

例子:

a <- 2+5
b <- sprintf("say The result is %d", a)
system(b, intern = FALSE, ignore.stdout = FALSE, ignore.stderr =
    FALSE, wait = TRUE, input = NULL)
标签

受限制的 HTML

  • 允许的HTML标签:<a href hreflang> <em> <strong> <cite> <blockquote cite> <code> <ul type> <ol start type> <li> <dl> <dt> <dd> <h2 id> <h3 id> <h4 id> <h5 id> <h6 id>
  • 自动断行和分段。
  • 网页和电子邮件地址自动转换为链接。

相关推荐
  • 如何防止android对讲说话seekbar进度(How to prevent android talkback to speak seekbar progress)
    问题 我有一个扩展SeekBar的自定义控件,其中我重写了onInitializeAccessibilityNodeInfo ,如下所示: @Override public void onInitializeAccessibilityNodeInfo(AccessibilityNodeInfo info) { super.onInitializeAccessibilityNodeInfo(info); info.setClassName(TextView.class.getName()); } 然后我将此控件的内容描述设置为“我的控件”,但是当可访问性焦点来到此控件时,对讲仍然说“我的控件,%x%”。 我不希望它说进步,即“x%”。 相反,我想覆盖对讲文本,而不是宣布“x%...”,而是宣布我设置的自定义文本,例如“选择的x值”。 怎么做? 回答1 我在 C# 中的 Xamarin.Android 中做了类似的事情,但代码应该很容易移植回 Java。 此外,请记住,当控件突出显示时,这些更改将覆盖初始对讲。 首先在跟踪值集的 textView 上: textView.AccessibilityLiveRegion = AndroidViews.AccessibilityLiveRegion.Assertive; 然后我必须创建自己的自定义AccessibilityDelegate
  • C++核心编程(四)—— 类和对象(7) :多态
    C++系列内容的学习目录 → \rightarrow →C++学习系列内容汇总。7. 多态7.1 多态的基本概念7.2 多态案例1 —— 计算器类7.3 纯虚函数和抽象类7.4 多态案例2 —— 制作饮品7.5 虚析构和纯虚析构7.6 多态案例3 —— 电脑组装7. 多态7.1 多态的基本概念  多态按字面的意思就是多种形态。当类之间存在层次结构,并且类之间是通过继承关联时,就会用到多态。C++多态意味着调用成员函数时,会根据调用函数的对象的类型来执行不同的函数。  多态是C++面向对象三大特性之一。多态分为两类:静态多态:函数重载和运算符重载属于静态多态,复用函数名;动态多态:派生类和虚函数实现运行时多态。  静态多态和动态多态的区别:静态多态的函数地址早绑定(编译阶段确定函数地址);动态多态的函数地址晚绑定(运行阶段确定函数地址)。  实例如下所示。#includeusing namespace std;//多态//动物类class Animal{public: virtual void speak() //虚函数(函数前面加virtual关键字):编译器在编译的时候就不能确定函数调用了 { cout << "动物在说话" << endl; }};//猫类class Cat :public Animal //父类的引用指向(接收)子类的对象 Animal &animal =
  • 程序如何执行? 操作系统在哪里发挥作用?(How does program execute? Where does the Operating Systems come into play?)
    问题 程序从某种语言编译为 ASM --> 机器代码(可直接执行)。 当人们说这取决于平台时,这意味着所形成的二进制文件只能在具有相同指令集架构(如 x86、x86-64)的 CPU 上(正确)运行。 由于 ISA 的差异,它可能(错误地)/可能(根本)不会在其他进程上运行。 正确的? 现在,二进制的概念让我感到困惑。 一切都与“机器语言代码”和“CPU”有关。 操作系统在哪里发挥作用? 我的意思是编译后的二进制文件在加载到内存中时具有 CPU 的直接指令。 & CPU 一次执行一条指令。 除了进程管理链接文本之外,我在任何地方都看不到操作系统的作用。 无论操作系统如何,它都应该在相同 ISA 的 CPU 上运行。 正确的? 然而事实并非如此。 如果我在 Windows 机器上为 x86 构建代码。 它不会在 Mac x86 机器或 Linux x86 机器上运行。 我在这里遗漏了一些东西。 请清除我的困惑。 回答1 首先,现代 CPU 具有(至少)两种模式,一种是运行操作系统本身的核心模式(“内核模式”),另一种是运行程序的模式(“用户模式”)。 在用户模式下,CPU 不能做很多事情。 例如,鼠标点击通常在内核中被注意到,而不是在用户模式中。 但是,操作系统将事件分派到用户模式,然后从那里分派到正确的程序。 反过来也需要配合:程序不能自由地在屏幕上绘制
  • 如何让Python说话(How to make Python speak)
    问题 如何让Python说一些文字? 我可以在子进程中使用Festival,但是我将无法控制它(或者可能是在交互模式下,但它不是干净的)。 有Python TTS库吗? 就像节日的API一样,eSpeak,...? 回答1 请注意,这仅适用于python 2.x 由于PyTTS已过时,因此您应尝试使用PyTTSx软件包。 PyTTSx使用最新的python版本。 http://pypi.python.org/pypi/pyttsx/1.0->程序包 希望能帮助到你 回答2 有点俗气,但是如果您使用的是Mac,则可以从python将终端命令传递给控制台。 尝试在终端中键入以下内容: $ say 'hello world' 从Mac发出的声音会说出这一点。 从python这样的事情相对容易: import os os.system("echo 'hello world'") os.system("say 'hello world'") 回答3 安装pip安装pypiwin32 如何使用Windows PC的文字转语音功能 from win32com.client import Dispatch speak = Dispatch("SAPI.SpVoice").Speak speak("Ciao") 使用google text-to-speech Api创建mp3并收听
  • Monad非编程术语[重复](Monad in non-programming terms [duplicate])
    问题 这个问题已经在这里有了答案: 9年前关闭。 可能重复: 什么是单子? 您将如何用非编程术语来描述单子? 编程之外是否存在某些概念/事物(在所有编程之外,而不仅仅是FP),可以说在很大程度上发挥着作用或像monad一样? 回答1 这是我目前的目标: Monad是桶式旅: 每个操作都是排队的人; 即有一个明确的顺序,其中发生的操作。 每个人都将一个存储桶作为输入,从存储桶中取出东西,然后将新东西放入存储桶中。 相应地,将存储桶向下传递给旅中的下一个人(通过bind或>>=操作)。 return操作只是将物料放入桶中的操作。 对于序列( >> )操作,存储桶中的内容在传递给下一个人之前就被转储了。 下一个人不在乎存储桶中的内容,他们只是在等待接收它。 对于()上的单子,将在存储桶内传递票证。 它被称为“单位”,它只是一张空白的纸。 就IO monad而言,每个人都大声说出完全深刻或完全愚蠢的话-但他们只能在握着水桶的时候说话。 希望这可以帮助。 :-) 编辑:非常感谢您的支持,但可悲的是,《 Monad教程》的诅咒再次发生。 我所描述的只是带有容器的函数应用程序,而不是monad! 但是我不是虚无主义者-我相信Monad教程的诅咒可以被打破! 因此,这是一张稍微有些复杂的图片,我认为它描述得更好。 您可以决定是否值得带给您的朋友。 Monads是项目经理的一个水桶大队。
  • 20201204-1 面向对象介绍
    面向对象编程介绍: 为什么要用面向对象进行开发? 面向对象的特性、封装、继承、多态 类、方法、 面向对象介绍 # 如果想在计算机中描述世界,就要遵循现实世界的一些规则# 面向对象就是遵循现实世界规则的一种编程范式世界万物,皆可分类 世界万物,皆为对象 只要是对象,就肯定属于某种品类 只要是对象,就肯定有属性(属性可以理解为它的名字) 你是上帝 地球 山川,河流,大海,森林 飞禽走兽, 飞禽 几百种鸟 布谷鸟 飞,吃虫子,下蛋,唱歌 乌鸦 飞,吃虫子,下蛋,叫# 虽然是不同的鸟,但是有重复,因此可以先 建立 飞禽 模型飞禽 飞,吃虫子,下蛋 布谷鸟 唱歌 乌鸦 叫# 这样就不用重复做,飞,吃虫子,下蛋的功能了走兽 狮子 森林之王 老虎 百兽之王 人,思考,说话,吃喝拉撒睡# 计算机中,可以建造角色特性classobject 封装 继承 多态 语法 属性 方法 构造函数 析构函数 私有方法,私有属性 类变量 实例变量 面向过程 VS 面向对象 编程范式 编程是 程序员 用特定的语法 + 数据结构 + 算法组成的代码来告诉计算机如何执行任务的过程,一个程序是 程序员为了得到一个任务结果而编写的一组指令的集合,正所谓条条大路通罗马,实现一个任务的方式有多种 不同的方式,对这些不同的编程方式的特点进行归纳总结得出来的编程方式类别,即为编程范式。不同的编程
  • 开始对计算机以外的其他事物进行编程的最佳方式是什么? [关闭](Best way to get started with programming other things than your computer? [closed])
    问题 关闭。 这个问题是基于意见的。 它目前不接受答案。 想改善这个问题吗? 更新问题,以便通过编辑这篇文章用事实和引文来回答问题。 5年前关闭。 改进这个问题 在计算机之外开始编程的最佳方式是什么? 我指的不是带有 API 的手机之类的主流产品。 请假设有 C/C++ 的工作知识 回答1 布赖恩,你可能会发现 Arduino 很有趣。 它很便宜而且很受欢迎。 几年前我开始玩微控制器板,这导致了对机器人的兴趣。 有点意思,至少对我来说。 如果您对 .NET 风格的开发环境感兴趣,那么有一个类似于 arduino 调用 netduino 的类比值得一看。 回答2 我投票给 Nintendo DS: 出色的硬件:2 个 CPU、2 个屏幕、触摸屏、麦克风、扬声器、无线、2D 和 3D 加速没有操作系统可言不受限制地与裸机交谈的自由有据可查非常活跃的开发社区对您创造的任何酷炫事物都充满热情便宜(如果您购买第一代设备,则令人震惊) 总而言之,玩起来真的非常有趣。 开始: 获取 DS 得到一个 SLOT1 闪存车(我有一个 DS-X,但还有很多其他的) 获取 devkitpro 到这里寻求帮助或建议 回答3 嵌入式编程很有趣。 您可以从基本图章或 PIC 之类的东西开始,或者因为您知道 c/c++,所以您可以使用真正的微控制器,例如 Atmel AVR。 看看 Butterfly 或
  • 带有tamagotchi类的面向对象编程(object oriented programming with tamagotchi class)
    问题 编写一个类Tamagotchi ,用于创建具有指定名称的 Tamagotchi 对象。 您应该决定Tamagotchi对象应该具有哪些属性以支持所需的行为,如下所述。 一个Tamagotchi对象,t 有三个方法: teach哪里可以有可变数量的字符串输入。 这教了tamagotchi这些话。 符号也将起作用。 如果您尝试多次教 tamagotchi 相同的单词,它将忽略以后的尝试。 play将使 tamagotchi 返回一个字符串化的单词列表(按顺序)。 kill将杀死 tamagotchi。 一旦tamagotchi在天堂,它就无法被教导,并且当您尝试与它玩耍时也不会做出反应。 相反,所有进一步的方法调用将返回字符串"<name> is pining for the fjords" pining for the fjords "<name> is pining for the fjords" ,其中<name>是 tamagotchi 的名称。 这是我的代码: class Tamagotchi(): def __init__(self, name): self.name = name def teach(self, words): new_words = [] [new_words.append(x) for x in words if x not in new
  • Knuth 计算机编程艺术 ex 1.1.8(Knuth the art of computer programming ex 1.1.8)
    问题 我不明白 Knuth 在他对第 1.1 章练习 8 的说明中的意思。 任务是使用他的符号theta[j] , phi[j] , b[j]和a[j]制作两个正整数m和n的高效 gcd 算法,其中 theta 和 phi 是字符串, a和b - 正在这种情况下表示计算步骤的整数。 让输入为a^mb^n形式的字符串。 schnaader 在这里给出了 Knuth 算法的一个很好的解释。 我的问题是如何将这与练习中给出的方向联系起来,以使用书中给出的算法 E,并将原始r (余数)替换为|mn| 和n替换为min(m,n) 。 回答1 当 Knuth 说“让输入由字符串a^mb^n ”时,他的意思是输入应该采用m个a s 和n个b s 的形式。 因此输入f((m,n))其中m = 3和n = 2将由字符串aaabb表示。 花点时间回顾一下他在那章中的方程 3,它代表了马尔可夫算法。 (以下) f((σ,j)) = (σ,a_j) if θ_j does not occur in σ f((σ,j)) = (αφ_jω,b_j) if α is the shortest string for which σ = αθ_jω f((σ,N)) = (σ,N) 所以想法是为每个变量j, θ_j, φ_j, a_j & b_j定义序列。 这样,使用上述马尔可夫算法
  • 当用户停止说话时,如何在 Apple Watch 中停止语音识别(听写)?(How to stop Speech Recognition (Dictation) in Apple Watch when the user stops speaking?)
    问题 我已经成功地在 Apple Watch(WatchOS 2.1,iOS 9.2.1)中实现了原生语音识别(听写),基本上我使用了这个代码,带有一个空的“菜单选项数组”: func launchDictation(){ self.presentTextInputControllerWithSuggestions([], allowedInputMode: WKTextInputMode.Plain, completion:{ (results) -> Void in let aResult = results?[0] as? String if(!(aResult == nil)){ print(aResult) print("SHORT ASR COMPLETED") dispatch_async(dispatch_get_main_queue()) { // Update UI } }//end if })//end show voice menu } 事实上......用户点击“说话按钮”,然后弹出一个视图(显示用户说话时检测到的单词和一个漂亮的小音量图表)。 现在,用户必须说话,然后点击“完成”以完成语音识别。 如果检测到短语但未点击“完成”,则最终会在屏幕上显示“听写失败”。 有人知道如何实现一些侦听器或委托来检测用户停止说话几秒钟后听写过程何时结束吗?
  • 学习C语言的教材、如何成为一名优秀的C程序员、激发程序员创意的6本书、国外程序员推荐:每个程序员都应读的书
    学习C语言的教材 我的C语言是自学的,这些年看过不少教材。 下面,我对其中一些教材做个点评。 1. How to Think Like a Computer Scientist: C version 这是我读过最易懂的C语言教材。 虽然它只讲解最基本的语法,但是写得特别好懂,深入浅出,读起来不觉得累,而且它还允许免费下载。我认为,这是C语言的首选入门教材。 下载网址:http://prof.beuth-hochschule.de/scheffler/lehre/programmieren-in-c/ 2. C Primer Plus 和 C Programming: A Modern Approach (《C语言程序设计:现代方法》 上面这两本,都是著名的C语言初级教材,都是厚厚的大部头。 我通读过它们,感觉都写得不错,都值得推荐。但是因为这两本书定位类似,内容重复,相比之下,我觉得C Primer Plus可能更适合中国读者的思维,更易读一些。 3. C Programming Language (2nd Edition) (《C程序设计语言》) 这是最著名的C语言书籍。 但是,它不是写给初学者看的,更偏重C语言的编程技巧和算法思维。我读过两遍,还是觉得很多地方没读懂。 4. 国产教材 通常来说,国产教材质量不高,不值得推荐。但是有两本,我想特别提一下。 《零基础学C语言》
  • Web与人工智能时代
    https://v.qq.com/x/page/q0504mcxpob.html 增强人类的智慧现在人工智能非常火,首先是因为云计算发达,提供了强大的计算能力。高强度的算法可以帮助做到人工智能。人工智能需要大量数据来训练、规划,我们有海量的数据来做人工智能。这是人工智能三股强大的动力。MicrosoftGraph是一个开发平台,它提供了强大的网络、强大的API,可以连接不同的数据、不同应用。利用相应平台的不同数据,做到跨设备跨平台的无缝对接。AI Infrastructure&Service微软在人工智能提供了不同的平台,要把AI带到每个人身边,让不同层次的开发者都能利用微软技术帮助他们的业务。如图所示,最底层是硬件的创新,有海量的硬件计算能力。有GPU、scale和FPGA。例如FPGA可以把相应的算法编成可编程的阵列写进硬件里,使计算更高速。上一层提供了海量数据的存储和分析。第三层是Machine Learning的算法,Cognitive Toolkit。提供了开源算法的工具包,研究人员可以用工具包来写自己的算法并研究相应的人工智能技术。Azure Machine Learning Studio是Azure的一项机器学习的服务,服务包含了一些现成算法。通过可视化界面,用拖拉拽的方式就可以将算法运行起来,也可以添加Python或者R的脚本。数据科学家只需理解这些算法
  • 在 Android 中----我们如何在 Text to Speech 中提供提示哪个单词正在说话?(In Android----How can we provide hint which word is speaking in Text to Speech?)
    问题 任何机构帮助我在文本到语音中提供提示? 我在 Array 中得到单词,但TextToSpeech.QUEUE_ADD需要几秒钟才能说话,并使粗体单词快速运行。 我的代码如下:-(tts 是一个TextToSpeech对象) String[] strArr = txtText.getText().toString().split(" "); txtText.setText(""); for(int i=0;i<strArr.length;i++) { Log.d("","Value :- "+strArr[i]); HashMap<String, String> myHashAlarm = new HashMap<String, String>(); myHashAlarm.put(TextToSpeech.Engine.KEY_PARAM_STREAM, String.valueOf(AudioManager.STREAM_NOTIFICATION)); myHashAlarm.put(TextToSpeech.Engine.KEY_PARAM_UTTERANCE_ID, "test"); tts.speak(strArr[i], TextToSpeech.QUEUE_ADD,myHashAlarm); txtText.append(Html.fromHtml("<b>" +
  • 2019--Target Speaker Extraction for Multi-Talker Speaker Verification
    Target Speaker Extraction for Multi-Talker Speaker Verification Wei Rao1 , Chenglin Xu2,3 , Eng Siong Chng2,3 , Haizhou Li1 1Department of Electrical and Computer Engineering, National University of Singapore, Singapore 1新加坡国立大学电气与计算机工程系 2School of Computer Science and Engineering, Nanyang Technological University, Singapore 2新加坡南洋理工大学计算机科学与工程学院 3Temasek Laboratories, Nanyang Technological University, Singapore 3新加坡南洋理工大学电子科技实验室 elerw@nus.edu.sg, xuchenglin@ntu.edu.sg speaker verification,Speaker diarization, overlapped multi-talker speech https://www.isca-speech.org/archive/Interspeech_2019
  • 如何在 Voiceover 说话时停止 Text to Speech,反之亦然在 Swift 中?(How to stop Text to Speech when Voiceover is speaking, or vice versa in Swift?)
    问题 现在,我的应用程序实现了AVSpeechSynthesizer来读出每个屏幕的说明。 该应用程序还会考虑启用 Voiceover 辅助功能的情况。 我现在面临的问题是文本到语音功能与画外音功能重叠。 是否有解决方案可以检测当用户导航到屏幕上的另一个元素时,TTS 停止说话,或者当 TTS 正在说话时,画外音在 TTS 完成之前不会说话(尽管前者是首选)。 当前的开发是在 iOS 8 上,使用 Swift。 回答1 选项1 您可以通过观察UIAccessibilityElementFocusedNotification通知来监听新元素何时聚焦 [[NSNotificationCenter defaultCenter] addObserver:yourTTSManager selector:@selector(interruptTTSFunction:) name:UIAccessibilityElementFocusedNotification object:nil]; 并在收到自定义语音合成通知时打断它们。 优点:为 VoiceOver 用户提供了很多控制权。 缺点:您不知道 VoiceOver 何时完成读取新聚焦的控件,因此您不能使用它来中断和重新启动公告。 选项 2 您可以通过发布来告诉 VoiceOver 暂停和重新启动
  • r data.table 函数式编程/元编程/语言计算(r data.table functional programming / metaprogramming / computing on the language)
    问题 我正在探索使用 data.table(还提供了一个 dplyr 示例)来包装聚合函数(但实际上它可以是任何类型的函数)的不同方法,并且想知道关于函数式编程/元编程的最佳实践 性能(实现与 data.table 可能应用的潜在优化有关) 可读性(是否有共同商定的标准,例如在大多数使用 data.table 的包中) 易于泛化(元编程的“泛化”方式是否存在差异) 基本应用是灵活聚合一个表,即参数化要聚合的变量、要聚合的维度、两者各自的结果变量名称和聚合函数。 我已经(几乎)在三个 data.table 和一个 dplyr 方式中实现了相同的功能: fn_dt_agg1(这里我不知道如何参数化聚合函数) fn_dt_agg2(受到@jangorecki 在这里他称之为“语言计算”的回答的启发) fn_dt_agg3(受@Arun 的回答启发,这似乎是另一种元编程方法) fn_df_agg1(我在 dplyr 中采用的相同方法) 图书馆 library(data.table) library(dplyr) 数据 n_size <- 1*10^6 sample_metrics <- sample(seq(from = 1, to = 100, by = 1), n_size, rep = T) sample_dimensions <- sample(letters[10:12], n
  • 苹果AI技术新突破:Siri可识别热门单词和多语种说话者
    策划 | 钰莹作者 | Kyle Wiggers译者 | 李冬梅AI 前线导读: 语音识别一直是苹果迫切需要关注的领域。其跨平台 Siri 虚拟助手已服务了全球 5 亿多客户。因此,优化语音触发检测、说话者识别和多个说话者语言识别的技术成为苹果亟待解决的问题。更多优质内容请关注微信公众号“AI 前线”(ID:ai-front)过去一周,科技巨头苹果发表了一系列预印本研究论文,旨在优化语音触发检测、说话者识别和多个说话者语言识别的技术。(编者注:预印本研究论文是指科研工作者的研究成果指尚未经过同行评议,还未在正式出版物上发表,而出于和同行交流目的自愿先在学术会议上或通过互联网发布的科研论文、科技报告等文章)说话者识别和语音触发检测在论文的第一部分,苹果研究人员提出了一种训练好的 AI 模型,可同时执行自动语音识别和说话者识别的任务。正如研究人员在论文摘要中所解释的那样,基于语音个人助手识别的指令通常以触发短语(例如,“嘿,Siri”)为前缀,检测该触发短语涉及两个步骤:首先,AI 需要判断输入音频中的语音内容是否与触发短语的语音内容相匹配(语音触发检测);其次,AI 还需判断说话者的语音与注册用户或用户的语音是否匹配(说话者识别)。这两个任务通常被分开来看,但是论文的合著者认为,对说话者的了解可能有助于判断声音信号中的语音内容,反之亦然,这有助于对这两种属性进行评估
  • PHP:我是否将事件驱动编程与信号感知接口(信号和插槽/观察者模式)混为一谈?(PHP: Am I mixing up event-driven programming with signals-aware interfaces (Signal and Slots / Observer Pattern)?)
    问题 我看到很多人说 Symfony2、Zend Framework 2 和其他人是事件驱动的。 在桌面世界中,通过事件驱动编程,我理解应用程序会在其状态发生变化时通知其观察者。 由于 PHP 应用程序是无状态的,因此无法做这样的事情。 IE 将观察者绑定到视图观察用户使用界面时的变化。 相反,它需要一个新的请求过程来更新视图。 所以,这不是一个事件,而是一个全新的请求。 另一方面,还有一个类似的概念:事件驱动架构。 在这里你可以阅读两者: http://en.wikipedia.org/wiki/Event-driven_programming http://en.wikipedia.org/wiki/Event-driven_architecture 这是另一个: http://en.wikipedia.org/wiki/Signal_programming 信号是对发生事件的进程的通知。 信号有时被描述为软件中断。 信号类似于硬件中断,因为它们会中断程序的正常执行流程; 在大多数情况下,无法准确预测信号何时到达。 Stackoverflow [singals] 标签说明 而且,我之前所说的事件驱动,似乎和 Qt 引入的 Signals and Slots Pattern(观察者模式实现)更相关 例如,有声称是事件驱动的 Prado 框架: http://www
  • 我收到一个IndentationError。 我如何解决它?(I'm getting an IndentationError. How do I fix it?)
    问题 我有一个Python脚本: if True: if False: print('foo') print('bar') 但是,当我尝试运行脚本时,Python引发IndentationError : File "script.py", line 4 print('bar') ^ IndentationError: unindent does not match any outer indentation level 我一直在玩我的程序,并且还能够产生其他三个错误: IndentationError: unexpected indent IndentationError: expected an indented block TabError: inconsistent use of tabs and spaces in indentation 这些错误是什么意思? 我究竟做错了什么? 如何修复我的代码? 回答1 缩进为何重要? 在Python中,缩进用于分隔代码块。 这与许多其他使用大括号{}来分隔块(例如Java,Javascript和C)的语言不同。因此,Python用户必须密切注意缩进代码的时间和方式,因为空格很重要。 当Python遇到程序缩进问题时,它会引发一个称为IndentationError或TabError的异常。 一点历史 Python的创建者Guido
  • 如何让我的应用程序音频在说话时很好地中断 iPhone 音频(How to let my app audio to nicely interrupt iPhone audio while speaking)
    问题 我的 iOS 7 应用程序在必要时会发声文本。 我想要做的是让用户在我的运行时听他的音乐或播客(或任何其他使用音频的应用程序)。 预期的行为是,当我的应用程序说话时,其他音频要么混合要么降低,然后其他音频立即恢复到初始级别的音量。 我尝试了很多方法来实现这个目标,但没有什么是足够好的,因为我在代码之后列出了我面临的问题。 我当前的实现基于在播放或文本到语音之前创建会话,如下所示: + (void)setAudioActive { [[self class] setSessionActiveWithMixing:YES]; } 播放/演讲后,我将 i 设置为空闲,如下所示: + (void)setAudioIdle { [[self class] setSessionActiveWithMixing:NO]; } 根据 active 参数处理会话设置的核心函数,如下所示: + (void)setSessionActiveWithMixing:(BOOL)active { NSError *error = NULL; BOOL success; AVAudioSession *session = [AVAudioSession sharedInstance]; static NSInteger counter = 0; success = [session setActive