在OSX上合成音素对

时间:2014-05-19 16:19:51

标签: macos speech-synthesis phoneme

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

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

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

我可以使用OSX的内置语音合成API吗?

如果没有,还有其他方法吗?

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

编辑:我会尝试解决下面的问题,如果我达成了一些我很满意的事情,我会将其分解为答案。

Speech Synthesis Programming Guide似乎拥有一切,它谈论使用轮廓here控制音高,并输入拼音输入here

然而,要弄清楚整个API并编写一个OS X项目来做这件事需要做很多工作。因此,我对命令行选项或使用现有合成器感兴趣。

CRGreen回答用户参数,并说出'我无法在manpage中找到记录:

刚刚在这里找到了一个例子: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

2 个答案:

答案 0 :(得分: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。

"说"还有其他几种选择。命令字典。

然而,

我并不认为它就这么简单。语音合成器如何对待这些双音素可能很奇怪,甚至根据您使用的声音而有所不同。您可能需要操纵相当多的声音才能达到您想要的效果。例如,Vicki说" Di"喜欢" DEE"和" Bi"喜欢" BYE"。真的很难让这些声音在短片中int" i" (就像在"大")就像双音素一样。甚至可能有必要让它说"大" (例如),然后在Audacity中编辑声音,切断结束并在编辑版本的末尾放置淡出,然后导出。我刚刚做了这个并且它有效,但是,是的,你需要做一些特殊的案例调整。如果您有开发人员工具,那么还有一个名为"在我之后重复的应用程序"这使你可以调整"口头文字,但(令人惊讶的)对于我刚刚描述的情况,它并没有帮助。 (尽管如此,它对于更大的块来说非常强大。)

[edit] 所以,是的,上面的拼音输入版本可能是这样的:

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的声音都是一样的,你可以调整任何声音来完美地演唱一首歌(我做了#34; Star Spangled Banner&#34;一晚)。然后,出于某种原因,开发人员不仅改变了声音,而且还消除了一致性,使得某些声音与其他声音的行为完全不同。我对此并不高兴。 请考虑以下事项:

使用默认语音(&#34; Alex&#34;),以下话语(您将被鼓励发现),即使可以:

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"

但是如果你使用&#34;大提琴&#34;或者&#34; Pipe Organ&#34;,即使您使用此TUNE模式,最终也会获得奇异的提升。不要问我为什么。那么我是如何让这个工作的,至少对于#34; Alex&#34;?我使用了前面提到的&#34;重复我&#34;应用程序并简化了&#34; tuned&#34;输出。我想你可以使用TUNE和PHON的一些变化来获得你想要的东西。但是你可能不得不远离&#34; Cellos&#34;和&#34;管风琴&#34;因为它们制作单调的语调是有问题的(虽然它们可能适用于某些双音素/三音素)。也许你必须同时使用两者,我知道这很烦人。我感觉到你的痛苦。

还有一个变种。请注意以下&#34; rate&#34;标签强迫更长的话语:

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"

[ADDENDUM II]

啊,但是看看这个。这样可以平衡管道器官#34 ;;通过在最后一个音素之前强制音调调制(&#34; pbas&#34;)来摆脱终点升力:

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"

答案 1 :(得分: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,听起来像是&#34; doo-ee&#34;,最后的ee是完美的第四高。

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

有什么方法可以解决这个问题吗?