2015-12-29 15:26:01 +00:00
|
|
|
#include "mouthAnimation.h"
|
2016-03-01 20:57:05 +00:00
|
|
|
#include "logging.h"
|
2015-11-20 21:20:19 +00:00
|
|
|
|
|
|
|
using std::map;
|
|
|
|
|
|
|
|
Shape getShape(Phone phone) {
|
|
|
|
switch (phone) {
|
|
|
|
case Phone::P:
|
|
|
|
case Phone::B:
|
|
|
|
case Phone::M:
|
|
|
|
return Shape::A;
|
|
|
|
|
|
|
|
case Phone::Unknown:
|
2016-01-31 20:39:49 +00:00
|
|
|
case Phone::IY:
|
2015-11-20 21:20:19 +00:00
|
|
|
case Phone::T:
|
|
|
|
case Phone::D:
|
|
|
|
case Phone::K:
|
|
|
|
case Phone::G:
|
|
|
|
case Phone::CH:
|
|
|
|
case Phone::JH:
|
|
|
|
case Phone::TH:
|
|
|
|
case Phone::DH:
|
|
|
|
case Phone::S:
|
|
|
|
case Phone::Z:
|
|
|
|
case Phone::SH:
|
|
|
|
case Phone::ZH:
|
|
|
|
case Phone::N:
|
|
|
|
case Phone::NG:
|
|
|
|
case Phone::R:
|
2016-01-31 20:39:49 +00:00
|
|
|
case Phone::Y:
|
2015-11-20 21:20:19 +00:00
|
|
|
return Shape::B;
|
|
|
|
|
2016-01-31 20:39:49 +00:00
|
|
|
case Phone::EH:
|
2015-11-20 21:20:19 +00:00
|
|
|
case Phone::IH:
|
2016-01-31 20:39:49 +00:00
|
|
|
case Phone::AH:
|
2015-11-20 21:20:19 +00:00
|
|
|
case Phone::EY:
|
|
|
|
case Phone::HH:
|
|
|
|
return Shape::C;
|
|
|
|
|
2016-01-31 20:39:49 +00:00
|
|
|
case Phone::AA:
|
2015-11-20 21:20:19 +00:00
|
|
|
case Phone::AE:
|
|
|
|
case Phone::AY:
|
|
|
|
case Phone::AW:
|
2016-01-31 20:39:49 +00:00
|
|
|
return Shape::D;
|
2015-11-20 21:20:19 +00:00
|
|
|
|
|
|
|
case Phone::AO:
|
2016-01-31 20:39:49 +00:00
|
|
|
case Phone::UH:
|
2015-11-20 21:20:19 +00:00
|
|
|
case Phone::OW:
|
2016-01-31 20:39:49 +00:00
|
|
|
case Phone::ER:
|
|
|
|
return Shape::E;
|
|
|
|
|
|
|
|
case Phone::UW:
|
|
|
|
case Phone::OY:
|
|
|
|
case Phone::W:
|
2015-11-20 21:20:19 +00:00
|
|
|
return Shape::F;
|
|
|
|
|
|
|
|
case Phone::F:
|
|
|
|
case Phone::V:
|
|
|
|
return Shape::G;
|
|
|
|
|
|
|
|
case Phone::L:
|
|
|
|
return Shape::H;
|
|
|
|
|
|
|
|
default:
|
|
|
|
throw std::runtime_error("Unexpected Phone value.");
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2016-05-02 18:31:59 +00:00
|
|
|
ContinuousTimeline<Shape> animate(const BoundedTimeline<Phone> &phones) {
|
|
|
|
ContinuousTimeline<Shape> shapes(phones.getRange(), Shape::A);
|
|
|
|
for (const auto& timedPhone : phones) {
|
|
|
|
Timed<Shape> timedShape(timedPhone.getTimeRange(), getShape(timedPhone.getValue()));
|
2016-04-09 20:07:25 +00:00
|
|
|
shapes.set(timedShape);
|
2016-05-02 18:31:59 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
for (const auto& timedShape : shapes) {
|
2016-04-13 20:37:39 +00:00
|
|
|
logging::logTimedEvent("shape", timedShape);
|
2016-03-01 20:57:05 +00:00
|
|
|
}
|
|
|
|
|
2015-11-20 21:20:19 +00:00
|
|
|
return shapes;
|
|
|
|
}
|