【问题标题】:How to find ranges for the 'rate' property of NSSpeechSynthesizer?如何找到 NSSpeechSynthesizer 的“速率”属性的范围?
【发布时间】:2011-12-05 10:32:59
【问题描述】:

我有一个 OS X 应用程序,它使用 NSSpeechSynthesizer 类来阅读一些文本。我需要能够设置阅读速度,这是使用NSSpeechSynthesizer 的rate 属性完成的。然而,不同的声音有不同的基线阅读率和不同的范围。问题是我找不到从语音中获取此范围的方法,以便我知道语音可以接受哪些值。这很重要,因为我希望能够从范围的差异中抽象出来,让用户选择慢/正常/快之类的东西。但是对于基线为每分钟 180 个单词的语音,100 的值将被视为慢,对于基线为每分钟 100 个单词的语音显然不是这种情况。

有没有办法获得这些范围?我没有在 NSSpeechSynthesizer 的类参考中找到任何有用的东西。

【问题讨论】:

  • 您是否说您的问题是因为声音不同,您无法让声音保持恒定速率?所以我认为你必须有不同的声音?您始终可以使用您自己的自定义 NSVoice 对象并为其赋予与其他对象相同的属性,只需使速率保持不变。在您的对象中使用这些属性,代码应该可以正常工作。虽然你是对的,但应该有一种方法可以设置基线文本阅读速度:(
  • 好吧,我可以为所有声音设置相同的速率(以每分钟字数为单位),但那是不对的。问题是,人们以不同的速度说话,所以对于一个人来说自然的速度是不同的(因此对于合成声音也是如此)。所以我的慢/正常/快值需要相对于基线。我可能会将慢设置为正常速度的一半,将快速设置为两倍,看看是否有意义。

标签: objective-c macos cocoa speech-synthesis


【解决方案1】:

您可以在更改之前获得语音的速率,并且您可以估计可接受的范围是默认速率± 50 WPM 或其他东西。

也就是说,如果您使用它来设置滑块,我会提醒您不要将用户限制在“自然”的声音范围内。一些人,包括许多盲人,为了节省聆听时间,故意尽可能快地调高音量。

【讨论】:

  • 请注意,如果速率很快,例如 220,而您将其置于范围以下,例如 50,它将继续以最快的速率说话,而不是转到最低的可用速率
  • 同样是另一个方向。我在实验中发现基本速率为 180 wpm,最低为 90 wpm,最高为 700 左右。大概 0.5 倍到 4 倍是安全范围。
【解决方案2】:

好吧,我知道这不是您可能一直在寻找的答案,但据我所知,Apple 尚未向公众提供一种更改 NSSpeechSynthesizer 对象实例的基线速度的方法(正如你所说,它有一个“速率”实例,但它不能为每个不同的声音制作恒定的速率)。为此,我知道你不会喜欢它,你必须让较慢的速度更快,让速度更快的速度变慢,直到它们匹配。再次抱歉,但据我所知,Apple 没有提供更改基准费率的方法。编码愉快!

~猴哥

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-11-14
    • 1970-01-01
    • 1970-01-01
    • 2010-12-17
    • 2015-07-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多