2016-01-06 20:02:06 +00:00
|
|
|
#pragma once
|
2015-11-20 21:20:19 +00:00
|
|
|
|
2016-02-02 09:13:07 +00:00
|
|
|
#include <iostream>
|
2016-03-08 20:44:57 +00:00
|
|
|
#include <vector>
|
|
|
|
#include "enumTools.h"
|
2015-11-20 21:20:19 +00:00
|
|
|
|
|
|
|
// The classic Hanna-Barbera mouth shapes A-F phus the common supplements G-H
|
|
|
|
// For reference, see http://sunewatts.dk/lipsync/lipsync/article_02.php
|
|
|
|
// For visual examples, see https://flic.kr/s/aHsj86KR4J. Their shapes "BMP".."L" map to A..H.
|
|
|
|
enum class Shape {
|
2015-11-25 21:00:24 +00:00
|
|
|
Invalid = -1,
|
2015-11-20 21:20:19 +00:00
|
|
|
A, // Closed mouth (silence, M, B, P)
|
|
|
|
B, // Clenched teeth (most vowels, m[e]n)
|
|
|
|
C, // Mouth slightly open (b[ir]d, s[ay], w[i]n...)
|
|
|
|
D, // Mouth wide open (b[u]t, m[y], sh[ou]ld...)
|
|
|
|
E, // h[ow]
|
|
|
|
F, // Pout ([o]ff, sh[ow])
|
|
|
|
G, // F, V
|
|
|
|
H // L
|
|
|
|
};
|
|
|
|
|
2016-03-08 20:44:57 +00:00
|
|
|
template<>
|
|
|
|
const std::string& getEnumTypeName<Shape>();
|
2015-11-20 21:20:19 +00:00
|
|
|
|
2016-03-08 20:44:57 +00:00
|
|
|
template<>
|
|
|
|
const std::vector<std::tuple<Shape, std::string>>& getEnumMembers<Shape>();
|
|
|
|
|
|
|
|
std::ostream& operator<<(std::ostream& stream, Shape value);
|
|
|
|
|
|
|
|
std::istream& operator>>(std::istream& stream, Shape& value);
|