Skocz do zawartości

Syntezator czytanie


KozakPL

Rekomendowane odpowiedzi

Siemka :D Robię taki mały pseudo syntezator mowy i mam 1 pytanko.Zaczynam pisać kod na czytanie i nie wiem jak to zrobić.Zrobiłem zmienną:

GML
text=''

I ustawie że jak ciśniesz a to

GML
text+='a'

Do tego momentu ok...ale dalej...Jak napisać że ma czytać literki?Czy jeśli napisze:

GML
if text='a' then """odtwórz literke a"""

to będzie dobrze?Mi się wydaje że nie ale innego pomysłu nie mam ;/

 

Będę wdzięczny za pomoc

 

Kozak :D

 

EDIT: Źle napisałem...nie dokładnie...co jeśli text='lol' a nie sama literka?odtworzy po kolei?

Odnośnik do komentarza
Udostępnij na innych stronach

Lepiej operować na keyboard_string. Ta zmienna zapisuje Ci wszystkie wciśnięte litery i cyfry. Syntezatory mowy to dość ciężka sprawa. Jeżeli chcesz odczytywać literkę po literce użyj funkcji string_char_at( string, pozycja ), która zwróci Ci literę na danej pozycji. Po prostu przejedź pętlą for cały string i odczytuj pojedyncze litery.

 

To będzie wyglądać jakoś tak:

GML
for( i = 0; i < string_length( keyboard_string ); i += 1 )

{

litera = string_char_at( keyboard_string, i );

}

I po każdym przypisaniu odpowiedniej litery do zmiennej litera możesz z nią robić co chcesz.
Odnośnik do komentarza
Udostępnij na innych stronach

GML
czyta = false

text = '';

pos = 1;

sound = noone;

can_read = true;

 

if ( czyta = false ) //zbieranie tekstu

{

text = keyboard_sttring

 

if ( keyboard_check_pressed( vk_enter )) czyta = true

}

else

{

//czytanie

if ( can_read = true )

{

char = string_char_at( text, pos ) //zczytuje literkę w pozycji (pos).

switch( char ) // przypisanie dzwięku do zmiennej sound, w zależności od czytanej literki

{

case 'a': sound = litera_a; break

case 'b': sound = litera_b; break

case 'c': sound = litera_c; break

}

 

sound_play( sound ) //odtwarzanie dzwięku

can_read = false;

pos += 1;

}

 

if ( sound_isplaying( sound )) can_redy = true; //jeśli skończy odtarzać literkę, pozwól mu czytać drugą

}

Odnośnik do komentarza
Udostępnij na innych stronach

create

GML
czyta = false

text = '';

pos = 1;

sound = noone;

can_read = true;

step

GML
if ( czyta = false )

{

text = keyboard_string

 

if ( keyboard_check_pressed( vk_enter )) czyta = true

}

else

{

if ( can_read = true )

{

char = string_char_at( text, pos )

 

switch( char )

{

case 'a': sound = sound_play(sWczytajDzwiek('a.wav')); break

case 'b': sound = sound_play(sWczytajDzwiek('b.wav')); break

case 'c': sound = sound_play(sWczytajDzwiek('c.wav')); break

case 'd': sound = sound_play(sWczytajDzwiek('d.wav')); break

case 'e': sound = sound_play(sWczytajDzwiek('e.wav')); break

case 'f': sound = sound_play(sWczytajDzwiek('f.wav')); break

case 'g': sound = sound_play(sWczytajDzwiek('g.wav')); break

case 'h': sound = sound_play(sWczytajDzwiek('h.wav')); break

case 'i': sound = sound_play(sWczytajDzwiek('i.wav')); break

case 'j': sound = sound_play(sWczytajDzwiek('j.wav')); break

case 'k': sound = sound_play(sWczytajDzwiek('k.wav')); break

case 'l': sound = sound_play(sWczytajDzwiek('l.wav')); break

case 'm': sound = sound_play(sWczytajDzwiek('m.wav')); break

case 'n': sound = sound_play(sWczytajDzwiek('n.wav')); break

case 'o': sound = sound_play(sWczytajDzwiek('o.wav')); break

case 'p': sound = sound_play(sWczytajDzwiek('p.wav')); break

case 'r': sound = sound_play(sWczytajDzwiek('r.wav')); break

case 's': sound = sound_play(sWczytajDzwiek('s.wav')); break

case 't': sound = sound_play(sWczytajDzwiek('t.wav')); break

case 'u': sound = sound_play(sWczytajDzwiek('u.wav')); break

case 'w': sound = sound_play(sWczytajDzwiek('w.wav')); break

case 'y': sound = sound_play(sWczytajDzwiek('y.wav')); break

case 'z': sound = sound_play(sWczytajDzwiek('z.wav')); break

}

 

sound_play( sound )

 

can_read = false;

pos += 1;

}

 

if ( sound_isplaying( sound )) can_redy = true;

}

 

I nie działa zbytnio ;] Czasem czyta złe litery(a dźwięki są dobre) no i jak już raz nacisnę enter to niby czyta...ok...ale nie da się 2 raz

Odnośnik do komentarza
Udostępnij na innych stronach

stary.. Ty przy tym switchu nie masz odtwarzać dzwieku tylko go wybrać...

przypisanie jest po to aby później sprawdzić czy nie jest już odtwarzany..

 

 

Create:

GML
czyta = false

can_read = true;

text = '';

char = '';

pos = 1;

sound = noone;

Step:

GML
if ( czyta = false ) //zbieranie tekstu

{

text = keyboard_sttring

 

if ( keyboard_check_pressed( vk_enter )) czyta = true

}

else

{

//czytanie

if ( can_read = true )

{

char = string_char_at( text, pos ) //zczytuje literkę w pozycji (pos).

switch( char ) // przypisanie dzwięku do zmiennej sound, w zależności od czytanej literki

{

case 'a': sound = sWczytajDzwiek('a.wav'); break

case 'b': sound = sWczytajDzwiek('b.wav'); break

case 'c': sound = sWczytajDzwiek('c.wav'); break

}

 

sound_play( sound ) //odtwarzanie dzwięku

can_read = false;

pos += 1;

}

 

if ( sound_isplaying( sound )) can_redy = true; //jeśli skończy odtarzać literkę, pozwól mu czytać kolejną

if ( pos == string_length( text )) // zakonczy czytanie i wyczyści keyboard_stringa

{

czyta = false;

keyboard_string = '';

}

}

Draw:

GML
if ( czyta = true ) stan = "TAK" else stan = "NIE";

draw_text( 0, 0, "Piszesz: " + keyboard_string + "#Czyta: " + stan + "#Czytana literka: " + char );

 

 

PS.

@Nobody: Pętla jest złym rozwiązaniem, też nad nią myślałem, ale Jak chcesz na niej otworzyć dzwięk skoro wszystko wykona się w jednym stepie?

 

PS2. Poprawiłem trochę kod ;)

Odnośnik do komentarza
Udostępnij na innych stronach

Lepiej zrób podział na głoski (prze, przy, pra, prze, że ża, ży żu, my, ma, mu, mo itd.) - przy dobrze wyciętych będzie to chociaż odrobinkę przypominało mowę, a nie literowanie - z tym, że tego będzie dość dużo :P

 

Nie czytałem całego tematu, ale ja bym zrobił listę plików do czytania.

Albo od razu silnik takich list odtwarzania :P

Odnośnik do komentarza
Udostępnij na innych stronach

Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto

Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.

Zarejestruj nowe konto

Załóż nowe konto. To bardzo proste!

Zarejestruj się

Zaloguj się

Posiadasz już konto? Zaloguj się poniżej.

Zaloguj się
  • Ostatnio przeglądający   0 użytkowników

    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...