Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
© 2019 Apple Inc. All rights reserved. Redistribution or public display not permitted without written permission from Apple.
•
Expressing content
•
Dynamic parameters
•
Expressing content
•
Dynamic parameters
•
Expressing content
•
Dynamic parameters
•
Expressing content
•
Dynamic parameters
•
Expressing content
•
Dynamic parameters
•
App
Core Haptics
App
AVFoundation UIKit
UIFeedbackGenerator
AVAudioSession
AVAudioPlayer
AVAudioEngine
CoreMIDI
Core Haptics
AudioToolbox
SystemSound
AudioUnits
App
AVFoundation UIKit
UIFeedbackGenerator
AVAudioSession
AVAudioPlayer
AVAudioEngine
CoreMIDI
Core Haptics
AudioToolbox
SystemSound
AudioUnits
UIFeedbackGenerator
Impact, Selection, Notification
Visceral feeling
Gaming Applications
Visceral feeling
Increase immersion
Core Haptics and Augmented Reality
Increase immersion
Increase immersion
Expressing Content
Classes for Content
CHHapticPattern
CHHapticEvent
CHHapticParameter
Classes for Content Classes for Playback
CHHapticPattern CHHapticEngine
CHHapticEvent
CHHapticParameter owns and vends
CHHapticPatternPlayer(s)
CHHapticAdvancedPatternPlayer(s)
Events, Parameters, and Patterns
CHHapticEvent
Time
Type
[EventParameters]
0.0 Time
Events, Parameters, and Patterns
CHHapticEvent
Time
Type
[EventParameters]
CHHapticEvent CHHapticEvent
Time Time
Type Type
[EventParameters] [EventParameters]
0.0 Time
Events, Parameters, and Patterns
CHHapticPattern CHHapticEvent
Time
Type
[EventParameters]
0.0 Time
Types of Events
HapticTransient
Think “striking”;
momentary;
instantaneous
Types of Events
Think “bowing”
Think “striking”;
momentary;
Can be background texture
instantaneous
Richer set of knobs
Types of Events
Think “bowing”
Think “striking”;
Developer-provided
momentary;
Can be background texture waveform
instantaneous
Richer set of knobs
Our First EventParameter
HapticIntensity / AudioVolume
0.0 1.0
Our First EventParameter
HapticIntensity / AudioVolume
0.0 1.0
HapticSharpness
An abstraction layer for physical dimensions
0.0 1.0
HapticSharpness
An abstraction layer for physical dimensions
Round, organic
0.0 1.0
HapticSharpness
An abstraction layer for physical dimensions
0.0 1.0
HapticSharpness
An abstraction layer for physical dimensions
0.0 1.0
HapticSharpness
An abstraction layer for physical dimensions
0.0 1.0
Flashlight button
HapticSharpness
An abstraction layer for physical dimensions
0.0 1.0
CHHapticPattern NSDictionary
Playing a Haptic Pattern: Recommended Flow
1. Create haptic content
CHHapticEngine
Playing a Haptic Pattern: Recommended Flow
1. Create haptic content
CHHapticPatternPlayer
CHHapticEngine
Playing a Haptic Pattern: Recommended Flow
1. Create haptic content
CHHapticEngine (Running)
Playing a Haptic Pattern: Recommended Flow
1. Create haptic content
CHHapticEngine (Running)
Playing a Haptic Pattern: Recommended Flow
1. Create haptic content
Done?
Playing a Haptic Pattern: Recommended Flow
1. Create haptic content
Demo
Using the Core Haptics API
// Using the API
import UIKit
import CoreHaptics
import CoreMotion
// Using the API
import UIKit
import CoreHaptics
import CoreMotion
// Using the API
import UIKit
import CoreHaptics
import CoreMotion
import UIKit
import CoreHaptics
import CoreMotion
Dynamic Parameters
Dynamic Parameters
{
"Version": 1.0
}
// An Example of a Simple AHAP File
{
"Version": 1.0
}
// An Example of a Simple AHAP File
{
"Version": 1.0,
“Pattern": [ ]
}
// An Example of a Simple AHAP File
{
"Version": 1.0,
“Pattern": [ ]
}
// Adding our first Event
{
"Version": 1.0,
“Pattern": [
{
“Event": {
"Time": 0.0,
"EventType": “HapticTransient"
}
},
]
}
// Adding our first Event
{
"Version": 1.0,
“Pattern": [
{
“Event": {
"Time": 0.0,
"EventType": “HapticTransient"
}
},
]
}
// Adding an optional EventParameter array
{
"Version": 1.0,
“Pattern": [
{
“Event": {
"Time": 0.0,
"EventType": “HapticTransient",
“EventParameters": []
}
},
]
}
// Adding an optional EventParameter array
{
"Version": 1.0,
“Pattern": [
{
“Event": {
"Time": 0.0,
"EventType": “HapticTransient",
“EventParameters": []
}
},
]
}
// Adding EventParameters for Intensity and Sharpness
{
"Version": 1.0,
“Pattern": [
{
“Event": {
"Time": 0.0,
"EventType": “HapticTransient",
“EventParameters": [
{ "ParameterID": "HapticIntensity", "ParameterValue": 0.8 },
{ "ParameterID": "HapticSharpness", "ParameterValue": 0.4 }
]
}
}
]
}
// Adding EventParameters for Intensity and Sharpness
{
"Version": 1.0,
“Pattern": [
{
“Event": {
"Time": 0.0,
"EventType": “HapticTransient",
“EventParameters": [
{ "ParameterID": "HapticIntensity", "ParameterValue": 0.8 },
{ "ParameterID": "HapticSharpness", "ParameterValue": 0.4 }
]
}
}
]
}
// A second event
“Pattern": [
{
“Event": { ... }
},
{
“Event": {
"Time": 0.5,
"EventType": “HapticContinuous”,
"EventDuration": 0.25,
“EventParameters": [
{ "ParameterID": "HapticIntensity", "ParameterValue": 0.8 },
{ "ParameterID": "HapticSharpness", "ParameterValue": 0.4 }
]
}
}
]
// A second event
“Pattern": [
{
“Event": { ... }
},
{
“Event": {
"Time": 0.5,
"EventType": “HapticContinuous”,
"EventDuration": 0.25,
“EventParameters": [
{ "ParameterID": "HapticIntensity", "ParameterValue": 0.8 },
{ "ParameterID": "HapticSharpness", "ParameterValue": 0.4 }
]
}
}
]
// EventDuration key is required for AudioContinuous, HapticContinuous
“Pattern": [
{
“Event": { ... }
},
{
“Event": {
"Time": 0.5,
"EventType": “HapticContinuous”,
"EventDuration": 0.25,
“EventParameters": [
{ "ParameterID": "HapticIntensity", "ParameterValue": 0.8 },
{ "ParameterID": "HapticSharpness", "ParameterValue": 0.4 }
]
}
}
]
// EventDuration key is required for AudioContinuous, HapticContinuous
“Pattern": [
{
“Event": { ... }
},
{
“Event": {
"Time": 0.5,
"EventType": “HapticContinuous”,
"EventDuration": 0.25,
“EventParameters": [
{ "ParameterID": "HapticIntensity", "ParameterValue": 0.8 },
{ "ParameterID": "HapticSharpness", "ParameterValue": 0.4 }
]
}
}
]
Building an AHAP File
AHAP Structure Summary
“Version”
1.0
“Pattern”
0.0 3.0
“EventDuration”
“1.0” “ParameterCurveControlPoints” “ParameterCurveControlPoints”
0.5
“EventParameters”
“Time”
0
“ParameterID”
“HapticIntensity” “ParameterValue”
1.0
“ParameterValue”
0.8
HapticSampler
Sample code
•
More to Discover
•Custom audio + synthesized audio •Use Parameter Curves to achieve the same effect
Audio Events and •Pitch; Pan; Brightness as a sequence of DynamicParameters
Modulation
Parameters •Attack, Decay, Release •Statically defined as part of the Pattern, or created
•Haptics-only mode during playback
•Routing and interruption behavior follows •Error Handling for Pattern Parsing
AudioSession AudioSession Category Error Handling •Error Handling and Recovery during Playback
Integration
•New API to allow haptics during recording •Query HW Capabilities
Performant API
Summary
Performant API
Performant API