如何做一个;说";在Swift 3内部的命令行程序中?
在这种情况下,我应该使用以下代码做什么如何做一个;说";在Swift 3内部的命令行程序中?,swift,macos,Swift,Macos,在这种情况下,我应该使用以下代码做什么 func convertToM4A(filename: String, voice: String) -> Bool { let full_string = speaking_queue?.joined(separator: " ") let command_string: [String] = [/"-v \"\(voice)\"",*/ "--progress", "--output-file=\"\(filename)\"",
func convertToM4A(filename: String, voice: String) -> Bool {
let full_string = speaking_queue?.joined(separator: " ")
let command_string: [String] = [/"-v \"\(voice)\"",*/ "--progress", "--output-file=\"\(filename)\"","-i", " \"\(full_string!)\""]
print(command_string)
/
let DocumentsDirectory = FileManager().homeDirectory(forUser: "shyamalchandra")
print((DocumentsDirectory?.absoluteString)!)
*/
let task = Process()
task.launchPath = "/usr/bin/say"
task.arguments = command_string
let pipe = Pipe()
task.standardOutput = pipe
task.launch()
let data = pipe.fileHandleForReading.readDataToEndOfFile()
let output: String? = String(data: data, encoding: String.Encoding.utf8)
task.waitUntilExit()
if let output = output {
if !output.isEmpty {
print(output.trimmingCharacters(in: .whitespacesAndNewlines))
}
}
return true
}
在运行时,它抱怨没有设置术语环境,而且没有将文件写入磁盘。怎么办?主要错误是如何构建参数数组。给定的论点 直接传递给进程<代码>进程不使用shell 解释这些论点,因此不能用引号括起来 马克 另一个问题是不能使用“-i”(交互式)选项 写入文件时 因此,您的代码应该如下所示:
func convertToM4A(filename: String, voice: String) -> Bool {
let fullString = "Hello world"
let task = Process()
task.launchPath = "/usr/bin/say"
task.arguments = [ "-v", voice, "-o", filename, fullString]
task.launch()
task.waitUntilExit()
return true
}
“--progress”选项使进度表显示在屏幕上
标准误差。如果你想显示,那么你必须
从标准错误异步读取 主要错误是如何构建参数数组。给定的论点 直接传递给进程<代码>进程不使用shell 解释这些论点,因此不能用引号括起来 马克 另一个问题是不能使用“-i”(交互式)选项 写入文件时 因此,您的代码应该如下所示:
func convertToM4A(filename: String, voice: String) -> Bool {
let fullString = "Hello world"
let task = Process()
task.launchPath = "/usr/bin/say"
task.arguments = [ "-v", voice, "-o", filename, fullString]
task.launch()
task.waitUntilExit()
return true
}
“--progress”选项使进度表显示在屏幕上
标准误差。如果你想显示,那么你必须
从标准错误异步读取 看看这个库,我以前用过它,它非常适合运行shell脚本。这样,您就可以使用“say”命令并发送一些参数 例如,你可以这样做
import SwiftShell
try runAndPrint("say", "Hello world", 4, "arguments")
let array = ["Hello world", "we", "are"]
try runAndPrint("say", array, array.count + 2, "arguments")
看看这个库,我以前使用过它,它非常适合运行shell脚本。这样,您就可以使用“say”命令并发送一些参数 例如,你可以这样做
import SwiftShell
try runAndPrint("say", "Hello world", 4, "arguments")
let array = ["Hello world", "we", "are"]
try runAndPrint("say", array, array.count + 2, "arguments")
如果您正在编写一个本机Mac应用程序,并且希望将合成语音录制到音频文件中,那么不要尝试包装shell命令-有本机API 为此。是用于文本到语音转换的macOS API,它有一种将输出记录到音频文件的方法 此API输出到一个AIFF文件,但有许多API可用于将其转换/编码为M4A:
avassetrader
/AVAssetWriter
,AVAudioFile
,较低级别的CoreAudio C API等
(通常,如果您正在编写一个本机Mac程序,并且您想做一些事情,那么在尝试包装shell命令之前,请检查是否有用于该程序的API。通常这些shell命令都使用相同的API,因此您只是在用所有间接寻址、I/O解析等来惩罚自己。)
是的,
NSSpeechSynthesizer
是一个AppKit API,但您可以在命令行工具中使用它。如果您正在编写一个本机Mac应用程序,并希望将合成语音录制到音频文件中,不要尝试包装shell命令-有本机API
为此。是用于文本到语音转换的macOS API,它有一种将输出记录到音频文件的方法
此API输出到一个AIFF文件,但有许多API可用于将其转换/编码为M4A:avassetrader
/AVAssetWriter
,AVAudioFile
,较低级别的CoreAudio C API等
(通常,如果您正在编写一个本机Mac程序,并且您想做一些事情,那么在尝试包装shell命令之前,请检查是否有用于该程序的API。通常这些shell命令都使用相同的API,因此您只是在用所有间接寻址、I/O解析等来惩罚自己。)
是的,
NSSpeechSynthesizer
是一个AppKit API,但您可以在命令行工具中使用它。不清楚您想要实现什么。是否要打印控制台日志?@ShyamalChandra为什么要创建名为command\u string
的变量,而它实际上是一个数组?ಠ_ಠ你想要实现什么还不清楚。是否要打印控制台日志?@ShyamalChandra为什么要创建名为command\u string
的变量,而它实际上是一个数组?ಠ_ಠ