Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何做一个;说";在Swift 3内部的命令行程序中?_Swift_Macos - Fatal编程技术网

如何做一个;说";在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
的变量,而它实际上是一个数组?ಠ_ಠ