Questo sito utilizza cookies, anche di terze parti, per mostrare pubblicità e servizi in linea con il tuo account. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - play sound
Forum - C/C++ - play sound

Avatar
munkaka (Member)
Pro


Messaggi: 119
Iscritto: 07/09/2008

Segnala al moderatore
Postato alle 0:18
Sabato, 21/03/2009
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


Q: I need help, give me some pointers!
R: 0x3A28213A, 0x6339392C, 0x7363684E, ...
PM Quote
Avatar
theprogrammer (Normal User)
Guru^2


Messaggi: 2509
Iscritto: 28/01/2009

Segnala al moderatore
Postato alle 0:27
Sabato, 21/03/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.


- Se le mie risposte non vi soddisfano, ignoratele, altrimenti un "grazie" e' molto gradito ...

"Dai un pesce (programma) a un uomo e lo nutrirai per un giorno. Insegnagli a pescare (programmare) e lo nutrirai per tutta la vita." (niente pappa pronta)
PM Quote
Avatar
munkaka (Member)
Pro


Messaggi: 119
Iscritto: 07/09/2008

Segnala al moderatore
Postato alle 12:22
Sabato, 21/03/2009
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


Q: I need help, give me some pointers!
R: 0x3A28213A, 0x6339392C, 0x7363684E, ...
PM Quote
Avatar
theprogrammer (Normal User)
Guru^2


Messaggi: 2509
Iscritto: 28/01/2009

Segnala al moderatore
Postato alle 12:43
Sabato, 21/03/2009
Usa il flag

SND_NOSTOP


- Se le mie risposte non vi soddisfano, ignoratele, altrimenti un "grazie" e' molto gradito ...

"Dai un pesce (programma) a un uomo e lo nutrirai per un giorno. Insegnagli a pescare (programmare) e lo nutrirai per tutta la vita." (niente pappa pronta)
PM Quote
Avatar
munkaka (Member)
Pro


Messaggi: 119
Iscritto: 07/09/2008

Segnala al moderatore
Postato alle 18:18
Sabato, 21/03/2009
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


Q: I need help, give me some pointers!
R: 0x3A28213A, 0x6339392C, 0x7363684E, ...
PM Quote
Avatar
theprogrammer (Normal User)
Guru^2


Messaggi: 2509
Iscritto: 28/01/2009

Segnala al moderatore
Postato alle 21:48
Sabato, 21/03/2009
E non e' quello che volevi?

Scusa, ma se non mostri il codice e non spieghi meglio, la cosa non si comprende ...


- Se le mie risposte non vi soddisfano, ignoratele, altrimenti un "grazie" e' molto gradito ...

"Dai un pesce (programma) a un uomo e lo nutrirai per un giorno. Insegnagli a pescare (programmare) e lo nutrirai per tutta la vita." (niente pappa pronta)
PM Quote
Avatar
munkaka (Member)
Pro


Messaggi: 119
Iscritto: 07/09/2008

Segnala al moderatore
Postato alle 21:38
Domenica, 22/03/2009
si hai ragione, ecco il codice
Codice sorgente - presumibilmente C/C++

  1. char c;
  2. CString ripr;
  3. ifstream leggi ("testo.txt");
  4.  
  5.         while(!leggi.eof())
  6.         {
  7.                 leggi.get(c);
  8.  
  9.                 ripr=linea[k];
  10.                 ripr+=".wav";
  11.                 PlaySound(ripr, NULL, SND_FILENAME | SND_ASYNC);
  12.         }


è 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?


Q: I need help, give me some pointers!
R: 0x3A28213A, 0x6339392C, 0x7363684E, ...
PM Quote
Avatar
theprogrammer (Normal User)
Guru^2


Messaggi: 2509
Iscritto: 28/01/2009

Segnala al moderatore
Postato alle 21:45
Domenica, 22/03/2009
Togli SND_ASYNC e inserisci SND_NOSTOP


- Se le mie risposte non vi soddisfano, ignoratele, altrimenti un "grazie" e' molto gradito ...

"Dai un pesce (programma) a un uomo e lo nutrirai per un giorno. Insegnagli a pescare (programmare) e lo nutrirai per tutta la vita." (niente pappa pronta)
PM Quote
Avatar
munkaka (Member)
Pro


Messaggi: 119
Iscritto: 07/09/2008

Segnala al moderatore
Postato alle 21:53
Domenica, 22/03/2009
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


Q: I need help, give me some pointers!
R: 0x3A28213A, 0x6339392C, 0x7363684E, ...
PM Quote