2

我需要创建 144 个音素对的波形文件,例如“Da Di Du, Beh Bi Burr, ...”

具体来说,我需要每个人保持一个恒定的音高,这样我就可以对它们进行音高转换来制作音符(如果我能输入音高值会更好!)。

我真的不想录制我试图唱歌的 144 个 .WAV 文件。

我可以使用 OSX 的内置语音合成 API 来做到这一点吗?

如果没有,我还有其他方法可以做到吗?

编辑:我不需要任何特定的质量等级。重要的是,每个话语都是可区分的,并且音调正确。

编辑:我将尝试在下面解决这个问题,如果我得到满意的结果,我会将其分解为答案。

Speech Synthesis Programming Guide似乎应有尽有,它在这里谈到了使用轮廓控制音高,这里输入语音输入。

但是,要弄清楚整个 API 并编写一个 OS X 项目来完成它,将需要做很多工作。所以我对命令行选项或使用现有的合成器很感兴趣。

CRGreen 的回答用户参数“说”我在手册页中找不到记录:

刚刚在这里找到了一个例子:http: //hints.macworld.com/article.php?story= 20120204172337402

编辑:音素https://apple.stackexchange.com/questions/53858/in-terminal-how-to-get-say-to-say-things-right-ie-using-custom-phonetics

4

2 回答 2

2

在 AppleScript 脚本编辑器中:

set diphones to {"Dah", "Di", "Du", "Beh", "Bi", "Burr"} --etc.

set targetFolder to ((choose folder) as text)

repeat with p in diphones
    say p using "Vicki" pitch 55 modulation 0 saving to (targetFolder & p & ".aif")
end repeat

然后将文件转换为 WAV。

“say”命令字典中还有一些其他选项可用。

然而,我不认为事情就这么简单。语音合成器如何处理这些双音素可能很奇怪,甚至会根据您使用的声音而有所不同。您可能必须操纵很多声音才能成为您想要的方式。例如,Vicki 像“DEE”一样说“Di”,像“BYE”一样说“Bi”。真的很难让这些声音像双音素一样发出短小的“i”(如“big”)。甚至可能有必要让它说“大”(例如),然后在 Audacity 中编辑声音,切断结尾并在编辑版本的结尾处淡出,然后将其导出。我只是这样做了,它可以工作,但是是的,你需要做一些特殊情况的调整。如果您有开发者工具,还有一个名为“Repeat After Me”的应用程序,可让您“调整”语音文本,但是(令人惊讶的是)对于我刚才描述的情况,它没有帮助。(不过,它对于较大的块非常强大)。

[编辑]所以,是的,上面的语音输入版本可能是这样的:

set diphones to {"dAO", "dIH", "dAX", "bEH", "bIH", "brr"} --etc., changed to be phonetic based on Apple's system

set targetFolder to ((choose folder) as text)

repeat with p in diphones
    say ("[[inpt PHON]]" & p & "[[inpt TEXT]]") using "Vicki" pitch 52 modulation 0 saving to (targetFolder & p & ".aif")
end repeat

[附录]

几年前,Apple 的声音都会表现得一样,你可以调整任何声音来完美地唱一首歌(我在一个晚上做了“星条旗”)。然后,出于某种原因,开发人员不仅改变了声音,还取消了一致性,使得某些声音的行为与其他声音完全不同。我对此并不高兴。考虑以下:

使用默认语音(“Alex”),以下话语(您会被鼓励找到)即使是这样:

say "[[inpt TUNE]] d {D 114; P 95.0:100} UW {D 227; P 95.0:100} 1IY {D 382; P 95.0:100} . {D 30} [[inpt TEXT]]" using "Alex"

但是如果你使用“大提琴”或“管风琴”,即使你使用这种 TUNE 模式,你也会在最后得到那种奇怪的提升。不要问我为什么。那么我是如何让这个工作的,至少对于“亚历克斯”?我使用了前面提到的“Repeat After Me”应用程序并简化了“调整过的”输出。我想你可以使用 TUNE 和 PHON 的一些变体来获得你想要的东西。但是你可能不得不远离“大提琴”和“管风琴”,因为它们对于制作单调的语调是有问题的(尽管它们对于某些双音素/三音素可能很好)。也许您必须同时使用两者,我知道这很烦人。我感觉到你的痛苦。

还有一种变体。请注意以下“rate”标签强制使用更长话语的方式:

say "[[rate - 66]] [[inpt TUNE]] d {D 114; P 95.0:100} UW {D 227; P 95.0:100} 1IY {D 382; P 95.0:100} . {D 30} [[inpt TEXT]]" using "Alex"

[附录二]

啊,但是看看这个。这平衡了“管风琴”;通过在最后一个音素之前强制进行音高调制(“pbas”)来消除末端提升:

say "[[rate - 66]] [[inpt TUNE]] d {D 114; P 95.0:100} UW {D 227; P 95.0:100} [[pbas - 5]] 1IY {D 382; P 95.0:100} . {D 30} [[inpt TEXT]]" using "Pipe Organ"

他们让我们在这里工作太辛苦了:-)

这是一个简化版本,可以回到原来的版本,但将 pbas 保留在那里:

say "[[inpt TUNE]] d UW [[pbas - 5]] 1IY [[inpt TEXT]]" using "Pipe Organ"
于 2014-05-19T16:57:54.233 回答
1

我已经设法让它与以下脚本一起工作:

-- to run, '/usr/bin/osascript genPhonemes'

-- https://developer.apple.com/library/mac/documentation/UserExperience/Conceptual/SpeechSynthesisProgrammingGuide/Phonemes/Phonemes.html
-- http://stackoverflow.com/questions/23742648/synthesize-phoneme-pairs-on-osx
-- http://applescript.wikia.com/wiki/Say

set Vowels to { "AA", "AY", "EH", "EY", "IY", "AO", "OY", "UW", "UWIY", "AX", "AXIY", "IH"}
set Consonants to { "d", "b", "r", "N", "m", "v", "S", "z", "h", "l", "k", "t" }
set NoteOffsets to { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, -3, -2, -1 }
set NoteNumbers to { "00", "01", "02", "03", "04", "05", "06", "07", "08", "09", "10", "11" }

set targetFolder to "OUT" -- ((choose folder) as text)

repeat with i from 1 to 12
    set C to (item i of Consonants)

    set midinote to 60 - 12 + (item i of NoteOffsets)

    repeat with j from 1 to 12
        set V to (item j of Vowels)

        set filename to targetFolder  &  C & "_" & (item j of NoteNumbers) & ".aif"

        set utterance to "[[inpt PHON]]" & C & V      

        say utterance   using "Pipe Organ"   speaking rate 120   pitch midinote   modulation 0   saving to filename
    end repeat
end repeat

由于某种原因,元音对出现错误。第二个元音的音调越来越高。使用管风琴,最后一个元音是完美的第四高。

所以例如 dUWIY,听起来像“doo-ee”,最后的 ee 是完美的第四高。

唯一合适的声音是大提琴,它也会破坏它,虽然间隔更小,可能是半音。

有没有什么办法解决这一问题?

于 2014-05-21T16:41:09.760 回答