gpt4 book ai didi

speech-synthesis - 为什么我无法使用 slider 值控制 Apple macOS Speech Synthesis 音频单元?

转载 作者:行者123 更新时间:2023-12-04 08:29:39 26 4
gpt4 key购买 nike

我正在努力将 Apple 语音合成音频单元的东西(仅适用于 macOS,不适用于 iOS)合并到 AudioKit 中,并且我已经构建了一个 AKSpeechSynthesizer Class (最初由 wangchou 在此 pull request 中创建)和一个 demo project两者都在 AudioKit 的开发分支上可用。

我的项目与此非常相似 Cocoa Speech Synthesis Example但是在这个项目中,速率变量可以在每分钟低字数 (40) 到高字数 (300 ish) 之间平滑地改变和变化。但是,我的项目以默认速率 175 开始,任何更改都会将速率减慢到爬行 - 除非您将其更改为 350,否则它会变得非常快。

我看不出我在做什么与这个例子不同,因为这两个项目都依赖

SetSpeechProperty(speechChannel, kSpeechRateProperty, newRate as NSNumber?)

设置费率。

这是 my implementationworking one .

最大的区别是我的合成器设置为音频单元,而我认为工作示例仅使用默认输出到扬声器。

频率(音高)或调制(pitchMod)的其他参数也表现出奇怪的行为,但在这些参数上不太明显,并且在两个项目中都有些有趣。

有人可以告诉我为什么我的不起作用或通过拉取请求修复它吗?任何帮助将不胜感激并在代码中归因。

谢谢!

最佳答案

似乎速率、音调和调制语音属性需要是整数值,没有小数部分,才能正常工作。

CocoaSpeechSynthesis 示例实际上表现出相同的行为,但将 rate 字段初始化为整数值。例如,要重现该问题,请尝试先将速率设置为 333,然后再设置为 333.3。

其他音高和调制参数似乎对小数部分同样挑剔,并且似乎也只有在设置为整数值时才能产生合理的结果。

不幸的是,我找不到任何在线引用文档 Material 来证实这些发现,但这里有一个补丁可以让 3 个语音参数在 SpeechSynthesizer 示例项目中起作用:

diff --git a/AudioKit/Common/Nodes/Generators/Speech Synthesizer/AKSpeechSynthesizer.swift b/AudioKit/Common/Nodes/Generators/Speech Synthesizer/AKSpeechSynthesizer.swift
index 81286b8fb..324966e13 100644
--- a/AudioKit/Common/Nodes/Generators/Speech Synthesizer/AKSpeechSynthesizer.swift
+++ b/AudioKit/Common/Nodes/Generators/Speech Synthesizer/AKSpeechSynthesizer.swift
@@ -47,7 +47,7 @@ open class AKSpeechSynthesizer: AKNode {
return
}
AKLog("Trying to set new rate")
- let _ = SetSpeechProperty(speechChannel, kSpeechRateProperty, newRate as NSNumber?)
+ let _ = SetSpeechProperty(speechChannel, kSpeechRateProperty, newRate.rounded() as NSNumber?)
}
}

@@ -70,7 +70,7 @@ open class AKSpeechSynthesizer: AKNode {
return
}
AKLog("Trying to set new freq")
- let _ = SetSpeechProperty(speechChannel, kSpeechPitchBaseProperty, newFrequency as NSNumber?)
+ let _ = SetSpeechProperty(speechChannel, kSpeechPitchBaseProperty, newFrequency.rounded() as NSNumber?)
}
}

@@ -93,7 +93,7 @@ open class AKSpeechSynthesizer: AKNode {
return
}
AKLog("Trying to set new modulation")
- let _ = SetSpeechProperty(speechChannel, kSpeechPitchModProperty, newModulation as NSNumber?)
+ let _ = SetSpeechProperty(speechChannel, kSpeechPitchModProperty, newModulation.rounded() as NSNumber?)
}
}

这只是对 Swift 的数字舍入方法的 3 次额外调用。

关于speech-synthesis - 为什么我无法使用 slider 值控制 Apple macOS Speech Synthesis 音频单元?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49716391/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com