Audiograph 1.0.0

Audiograph 1.0.0

Andreas Neusüß 维护。




声音反馈图表,帮助视障用户

GitHub tag (0.5.0) License

背景

iOS 13 引入了一个向视障用户提供股票图表的绝佳方式。使用自定义的可访问性旋转器,他们提供语音图表分析和通过音频渲染图表的 audiograph。这是描述图表最准确的方法,否则这些图表只能以视觉形式呈现。
如果您还没有亲自尝试,请查看以下视频

Screenshot

Audiograph

不幸的是,苹果还没有公开 API,让开发者能够在他们的应用中实现它(目前还没有)。我认为图表可以提供一种展示信息的好方式,但我们的使用不应仅限于那些没有残疾的人。
这就是 Audiograph 发挥作用的地方

Screenshot

示例

示例应用提供了许多与展示酷炫图表相关的内容。我在我的 博客 中讨论了这个图表。然而,这个项目是关于可访问性的。
您可以在文件 ChartView+Accessibility.swift 中找到所有与可访问性相关的内容。

要运行示例项目,请克隆此仓库,并从 iOS Example 目录中打开 iOS Example.xcworkspace。

使用方法

在声明 import Audiograph 之后,您可以使用本地化短语初始化 Audiograph。这些短语将改善您用户的使用体验。
它们描述了如何启动 Audiograph (例如,accessibilityIndicationTitle, 例如 "Play Audiograph") 以及应该用哪个短语表示播放结束 (例如,completionIndicationUtterance, 例如 "Complete")
您需要存储对 Audiograph 的强引用。

let audiograph: Audiograph = {
    let completion = NSLocalizedString("CHART_ACCESSIBILITY_AUDIOGRAPH_COMPLETION_PHRASE", comment: "This phrase is read when the Audiograph has completed describing the chart using audio. Should be something like 'complete'.")
    let indication = NSLocalizedString("CHART_PLAY_AUDIOGRAPH_ACTION", comment: "The title of the accessibility action that starts playing the audiograph. 'Play audiograph.' for example.")
    let localizations = AudiographLocalizations(completionIndicationUtterance: completion, accessibilityIndicationTitle: indication)

    return Audiograph(localizations: localizations)
}()

现在您有多种播放 Audiograph 的选项。

  1. 使用自定义无障碍操作
  2. 直接调用 .play(graphContent: ),参数类型为 [CGPoint],应该是您用来绘制 UI 的相同点。

第二个选项仅在您确切知道何时播放 Audiograph 时建议使用。在其他情况下,第一个选项将最适合您。

为了利用系统,开始使您的图表视图遵循 AudiographProvidable
这样操作时,视图可以通过将 graphContent 设置为绘制 UI 也用到的 [CGPoint] 来提供数据点。

在配置无障碍属性时,确保使用 audiograph.createCustomAccessibilityAction(for: ) 作为自定义操作

extension ChartView: AudiographProvidable {
    var graphContent: [CGPoint] {
        scaledPoints
    }
    var accessibilityLabelText: String { "Chart, price over time" }
    var accessibilityHintText: String { "Actions for playing Audiograph available." }

    func setupAccessibility() {
        isAccessibilityElement = true
        shouldGroupAccessibilityChildren = true
        accessibilityLabel = accessibilityLabelText
        accessibilityHint = accessibilityHintText

        accessibilityCustomActions = [audiograph.createCustomAccessibilityAction(for: self)]
    }
}

按照这种方式操作时,Audiograph 和返回的操作将负责开始和停止播放。

您可以在“ChatzChartView+Accessibility.swift”文件中找到如何配置它的示例

配置

所有提到的自定义设置都需要在调用 play(graphContent:completion:) 开始播放之前设置。

播放时长

指定音频应该播放的秒数。可能选项包括:

public enum PlayingDuration {
    case short
    case recommended
    case long
    case exactly(DispatchTimeInterval)
}
  • .short: 以最简方式呈现 Audiograph。
  • .recommended: 在播放时长和最大长度之间取得最佳平衡,避免跳过数据点。
  • .long: 最大时长。根据您的输入,可能会产生大量样本,从而引入内存压力。
  • .exactly: 指定播放应该持续的确切时间。所需时间越长,存储在内存中的样本就越多:权力越大,责任越大。

上述选项(除.exactly外)仅作为建议。最终的Audiograph可能会因为输入而耗时更长。确保每个段落有足够的时间播放,以便用户能够听到图表两点之间的差异。
但是,可能会删除一些数据点,以便将播放时长控制在合理范围内。

频率

输入点被缩放,以便它们位于最小和最大频率之间。Audiograph的最低频率在minFrequency中指定,最高频率存储在maxFrequency中。
这些频率可以根据使用情况进行调整。

音量

音量可以通过设置volumeCorrectionFactor进行配置。该系数应用于最终音量。
在运行单元测试时,指定0可能更方便。如果使用情况需要更高的音量,该系数可以设置为2

完成短语

上面的视频以Siri语音说“完成”结束。参数completionIndicationUtterance控制系统在播放Audiograph完成后说的话。
尽管可以将该短语设置为空字符串,但建议通知用户不会再有任何东西可期待。然而,必须由应用程序设置,因为Swift-Package在开发时不能包含本地化文件。

平滑处理

当为图表播放Audiograph时,用户最可能不关心曲线的每一处细节。用户更希望听到图表何时移动到哪个方向。
为了实现这一点,库可以在生成Audiograph之前对图表进行平滑处理。

考虑以下输入图表


                          _   /
                         / \_/
         _   _   _     _/
    -   / \_/ \_/ \   /
   / \_/           \_/
 _/
/

应用平滑处理后,听起来会更像这样

                        /
                      _/
                     /
     ____________   /
   _/            \_/
  /
 /
/

默认情况下,平滑度被设置为适用于大多数需求的参数。但是,您可以完全关闭它(将其设置为 .none),或者根据您的特定使用场景进行微调,以提供最佳的用户体验。
为此,它使用指数移动平均和自定义值应在 [0, 1] 的范围内,其中 1 表示使用原始数据,而 0 表示最大平滑度。

安装

Swift 包管理器

使用 Swift 包管理器将此添加到您的项目中。在 Xcode 中,这样操作:文件 > Swift 包 > 添加包依赖... 完成后,您就完成了。以下是针对旧项目的其他安装选项。

CocoaPods

如果您已经使用 CocoaPods,只需在您的 Podfile 中添加 'Audiograph' 然后运行 pod install

Carthage

如果您已经使用 Carthage,只需将其添加到您的 Cartfile

github "Tantalum73/Audiograph" ~> 0.5

然后运行 carthage update 来构建框架,然后将构建的 Audiograph.framework 拖到您的 Xcode 项目中。

作者

Andreas Neusüß

我很乐意听取您的反馈。您可以通过电子邮件或通过 Twitter 与我联系!😊

许可证

Audiograph可在MIT许可证下使用。有关更多信息,请参阅LICENSE文件