munkaka (Member)
Pro
Messaggi: 119
Iscritto: 07/09/2008
|
ciao
sto cercando una funzione che mi riproduce un file audio (wav,mp3,wma,non importa) perchè sto creando un programma che mi legge un file di testo
il problema è che con PlaySound mi legge la prima lettera e poi passa subito alla seconda senza neanche fare a a tempo a riprodurre la prima, e cosi non mi riproduce niente perchè quando sta per riprodurre una lettera è gia a passato a quella successiva e non riproduce un bel niente
qualcuno di voi conosce un modo per fermare il programma finche non viene riprodotto il file fino alla fine? senza usare sleep perchè ogni file ha una lunghezza diversa
grazie
|
|
theprogrammer (Normal User)
Guru^2
Messaggi: 2509
Iscritto: 28/01/2009
|
Riprodurre parola per parola non ha molto senso perche' non si capirebbe nulla della parola.
Dovresti costruire un algoritmo che traduca le parole in insieme di "fonemi" e li riproduca in sequenza.
|
|
munkaka (Member)
Pro
Messaggi: 119
Iscritto: 07/09/2008
|
si hai ragione, adesso per cominciare volevo fargli riprodurre lettera per lettera, ma poi vorrei fargli riprodurre delle sillabe
ma comunque il problema è che dove riuscire a fermare il programma quando riproduce un file, altrimenti intanto che riproduce passa gia al file successivo e non fa a tempo a riprodurre quello di prima
|
|
theprogrammer (Normal User)
Guru^2
Messaggi: 2509
Iscritto: 28/01/2009
|
Usa il flag
SND_NOSTOP
|
|
munkaka (Member)
Pro
Messaggi: 119
Iscritto: 07/09/2008
|
adesso mi da il problema contrario
mi legge il primo e intanto passa alle lettere successive, ma non le riproduce perchè sta ancora riproducendo la prima
|
|
theprogrammer (Normal User)
Guru^2
Messaggi: 2509
Iscritto: 28/01/2009
|
E non e' quello che volevi?
Scusa, ma se non mostri il codice e non spieghi meglio, la cosa non si comprende ...
|
|
munkaka (Member)
Pro
Messaggi: 119
Iscritto: 07/09/2008
|
si hai ragione, ecco il codice
Codice sorgente - presumibilmente C/C++ |
char c;
CString ripr;
ifstream leggi ("testo.txt");
while(!leggi.eof())
{
leggi.get(c);
ripr=linea[k];
ripr+=".wav";
PlaySound(ripr, NULL, SND_FILENAME | SND_ASYNC);
}
|
è un ciclo che mi legge un file di testo, un carattere per volta. I file audio hanno il nome del carattere. In pratica io voglio che mi legge un carattere dal file di testo e mi riproduce il file audio corrispondente. Il problema è che il codice come è adesso mi riproduce soltanto l'ultima lettera del testo, perchè quando sta per riprodurre una letttera il ciclo è già arrivato alla lettera successiva e gli da l'ordine di riprodurre la lettera attuale, che poi non farà a tempo a riprodurre, perchè sarà gia arrivato alla lettera dopo ecc. Con il comando NOSTOP fa esattamente il contrario. Mi riproduce la prima, intanto che sta riproducendo la prima è gia arrivato alla seconda, che però non riproduce perché sta ancora riproducendo la prima, allora passa alla terza, che non riproduce perchè sta ancora riproducendo la prima, ecc.
Avete soluzioni?
|
|
theprogrammer (Normal User)
Guru^2
Messaggi: 2509
Iscritto: 28/01/2009
|
Togli SND_ASYNC e inserisci SND_NOSTOP
|
|
munkaka (Member)
Pro
Messaggi: 119
Iscritto: 07/09/2008
|
grazie mille, ora funziona alla perfezione, non ha più il problema di prima
però fa l'effetto robot, devo trasformare le riproduzione di singole lettere in sillabe, aggiungere la punteggiatura ecc, il problema sarà fargli decidere quando fargli riprodurre una o o una ò ecc
|
|