1 module polyplex.core.audio.effects.vocalmorph; 2 import polyplex.core.audio.effects; 3 import polyplex.core.audio.effect; 4 import openal; 5 6 enum Phoneme : ALenum { 7 A = AL_VOCAL_MORPHER_PHONEME_A, 8 E = AL_VOCAL_MORPHER_PHONEME_E, 9 I = AL_VOCAL_MORPHER_PHONEME_I, 10 O = AL_VOCAL_MORPHER_PHONEME_O, 11 U = AL_VOCAL_MORPHER_PHONEME_U, 12 13 AA = AL_VOCAL_MORPHER_PHONEME_AA, 14 AE = AL_VOCAL_MORPHER_PHONEME_AE, 15 AH = AL_VOCAL_MORPHER_PHONEME_AH, 16 AO = AL_VOCAL_MORPHER_PHONEME_AO, 17 18 EH = AL_VOCAL_MORPHER_PHONEME_EH, 19 ER = AL_VOCAL_MORPHER_PHONEME_ER, 20 21 IH = AL_VOCAL_MORPHER_PHONEME_IH, 22 IY = AL_VOCAL_MORPHER_PHONEME_IY, 23 24 UH = AL_VOCAL_MORPHER_PHONEME_UH, 25 UW = AL_VOCAL_MORPHER_PHONEME_UW, 26 27 B = AL_VOCAL_MORPHER_PHONEME_B, 28 D = AL_VOCAL_MORPHER_PHONEME_D, 29 F = AL_VOCAL_MORPHER_PHONEME_F, 30 G = AL_VOCAL_MORPHER_PHONEME_G, 31 J = AL_VOCAL_MORPHER_PHONEME_J, 32 K = AL_VOCAL_MORPHER_PHONEME_K, 33 L = AL_VOCAL_MORPHER_PHONEME_L, 34 M = AL_VOCAL_MORPHER_PHONEME_M, 35 N = AL_VOCAL_MORPHER_PHONEME_N, 36 P = AL_VOCAL_MORPHER_PHONEME_P, 37 R = AL_VOCAL_MORPHER_PHONEME_R, 38 S = AL_VOCAL_MORPHER_PHONEME_S, 39 T = AL_VOCAL_MORPHER_PHONEME_T, 40 V = AL_VOCAL_MORPHER_PHONEME_V, 41 Z = AL_VOCAL_MORPHER_PHONEME_Z, 42 } 43 44 /** 45 A 4-band formant filter, allowing to morph vocal-ish texture in to sound. 46 47 WARNING: Only few *hardware* OpenAL implementations support this currently. 48 */ 49 public class VocalMorpherEffect : AudioEffect { 50 public: 51 this() { 52 super(EffectType.VocalMorpher); 53 setupDone(); 54 } 55 56 @property Phoneme PhonemeA() { 57 ALenum val; 58 alGetEffecti(id, AL_VOCAL_MORPHER_PHONEMEA, &val); 59 return cast(Phoneme)val; 60 } 61 62 @property void PhonemeA(Phoneme val) { 63 alEffecti(id, AL_VOCAL_MORPHER_PHONEMEA, cast(ALuint)val); 64 } 65 66 @property float TuningA() { 67 ALfloat val; 68 alGetEffectf(id, AL_VOCAL_MORPHER_PHONEMEA_COARSE_TUNING, &val); 69 return val; 70 } 71 72 @property void TuningA(ALfloat val) { 73 alEffectf(id, AL_VOCAL_MORPHER_PHONEMEA_COARSE_TUNING, val); 74 } 75 76 @property Phoneme PhonemeB() { 77 ALenum val; 78 alGetEffecti(id, AL_VOCAL_MORPHER_PHONEMEB, &val); 79 return cast(Phoneme)val; 80 } 81 82 @property void PhonemeB(Phoneme val) { 83 alEffecti(id, AL_VOCAL_MORPHER_PHONEMEB, cast(ALuint)val); 84 } 85 86 @property float TuningB() { 87 ALfloat val; 88 alGetEffectf(id, AL_VOCAL_MORPHER_PHONEMEB_COARSE_TUNING, &val); 89 return val; 90 } 91 92 @property void TuningB(ALfloat val) { 93 alEffectf(id, AL_VOCAL_MORPHER_PHONEMEB_COARSE_TUNING, val); 94 } 95 96 @property WaveformType Waveform() { 97 ALenum val; 98 alGetEffecti(id, AL_VOCAL_MORPHER_WAVEFORM, &val); 99 return cast(WaveformType)val; 100 } 101 102 @property void Waveform(WaveformType val) { 103 alEffecti(id, AL_VOCAL_MORPHER_WAVEFORM, cast(ALuint)val); 104 } 105 106 @property float Rate() { 107 ALfloat val; 108 alGetEffectf(id, AL_VOCAL_MORPHER_RATE, &val); 109 return val; 110 } 111 112 @property void Rate(ALfloat val) { 113 alEffectf(id, AL_VOCAL_MORPHER_RATE, val); 114 } 115 }