Newsgroup: it.comp.lang.visual-basic
Titolo: [?] WAV uno dopo l'altro

Con la presente sequenza ascolto tranquillamente i file Wav:
MMControl1.Command = "close"
MMControl1.DeviceType = "WaveAudio"
MMControl1.FileName = "audio1.wav"
MMControl1.Command = "Open"
MMControl1.Command = "play"
Ora perň ho un grosso problema, cioč di sentire in breve successione diversi
WAV del tipo: AUDIO1.WAV AUDIO2.WAV AUDIO3.WAV AUDIO4.WAV
che mi genera parole vocali.
Come posso effettuare questa "sequenza" di segnali WAV audio uno dopo
l'altro senza troppe pause?
Grazie
email: 
wl...@ticino.com
reply togliere [Nospam]


Puoi usare l'API sndPlaySound, includendo i waves nell'EXE come risorsa.
Guardati anche l'esempio del VB ( non ricordo come si chiami ), che simula
una validazione della carta di credito ( o giů di lě, scusami se sbaglio).
Se hai bisogno, credo che sul sito comune ci sia qualcosa del genere.
Genesio Conti - Calvizzano (NA) - Italy
E-Mail :  gen...@NOSPAMsofthome.net
( remove NOSPAM for answer )

 Se hai bisogno, credo che sul sito comune ci sia qualcosa del genere.
l'exe nel senso del programma?
da escludere, diverrebbe mastodontico!
devo proprio caricare e sentire una trentina di suoni alternativamente.
ciao

AIUTOOOOOOO!
Praticamente devo poter ascoltare in successione dei file wavaudio del tipo:
a.wav
b.wav
c.wac
d.wav
e.wav
f.wav
che non sono altro chbe la riproduzione in diverse lingue delle lettere
fonetiche dell'alfabeto e parole composte che il programma richiama di tanto
in tanto per i suoi bisogni.
Cavolo possible che non si possa fare un
play "a.wav"
play "b.wav"
ecc...
tipo il classico SAY A B C D del buon vecchio C64 del MAc o di AMIGA?
Su amiga eseguo nel programma
play a.wav
play b.wav
dove play è un eseguibile esterno play.exe in path.
ciao

 for...next) esegui il wave associato alla lettera.
si questo not problem ma il problema sussiste nel fatto che non riesco a
sentire due file wav
sto semplicemente cercando di trovare una breve routine come descritto che
mi permetta di sentire:
a.wav
b.wav
c.wav
al resto nessun problema ma tutte querlle che ho trovato finora, anche
nell'help e nella doc, spcificano SOLO un singolo file e se ne metto due o
tre, sento sempre solo l'ultimo.
Non aspettanoil ciclo del primo poio del secondo e cosě via.
Cerco disperatemente di sentire:
a.wav
b.wav
c.wav
in successione!
ciao grazie!
Frank

Non aspettanoil ciclo del primo poi del secondo e così via.
C'è la proprietà .Wait, sei sicuro di averla messa a True ?
E di rimetterla a True dopo _OGNI_ comando MCI ?
        MMControl1.filename = "C:\WINDOWS\MEDIA\Robotz - Uscita da
Windows.wav"
        MMControl1.Wait = True
        MMControl1.Command = "Open"
        MMControl1.Wait = True
        MMControl1.Command = "Play"
        MMControl1.Command = "Close"
        MMControl1.filename = "C:\WINDOWS\MEDIA\Utopia - Uscita da
Windows.wav"
        MMControl1.Wait = True
        MMControl1.Command = "Open"
        MMControl1.Wait = True
        MMControl1.Command = "Play"
        MMControl1.Command = "Close"
Così a me funzia.
Bye, G.
--
---------------------------------------------
    Le risposte alle tue domande le trovi sul
    Sito Comune di questo NewsGroup:
 
http://www.murialdo.it/it_lang_vb
---------------------------------------------
Real E-address: 
gaet...@hotmail.com

         MMControl1.Command = "Close"
Ciao, grazie dell'esempio, subito usato, non avevo il true!
Ho comunque aggiunto la seguente fonetica:
parola = "ABCD"
for x = 1 to len(parola)
xx= mid(parola,x,1)
         MMControl1.Command = "Close"
         MMControl1.filename = xx + ".wav"
         MMControl1.Wait = True
         MMControl1.Command = "Open"
         MMControl1.Wait = True
         MMControl1.Command = "Play"
         MMControl1.Command = "Close"
next x
così facendo mi pronuncia lettera per lettera ma purtroppo, malgrado le
lettere A B C D siano dei WAV tagliati e corti, anche con un PII400 c'e'
sempre uno spazio piuttosto lungo tra le varie lettere dovuti ai vari OPEN e
CLOSE che dovrei evitare.
E mettendo le lettere assieme in un file ricreandolo del tipo:
copy a.wav + b.wav + c.wav + d.wav  suono.wav /b  (NON FUNZIA!!)
il SUONO.wav non viene riconosciuto come tale... ma potrebbe essere una
soluzione per velocizzare la lettura del WAV sempre ammesso e concesso che
non sia più lenta la copiatura dei 5 o 6 files in uno solo.
qualche idea?
grazzzzzzie!

grazzzzzzie!
Ho provato anche con le API senza l'ocx, ma il problema rimane, anzi
_i_ problemi. Il primo deriva dai tempi di apertura e chiusura del device
audio, ma c'č di peggio. Se non ho capito male, nei file WAV i dati sono in
blocchi di lunghezza fissa, quindi se il blocco finale non č completo viene
riempito con qualche attimo di silenzio; in un suono singolo non si sente,
ma concatenandoli il risultato č orrendo. In pratica dovresti aprire i
files,
scartarne l'header, scrivere tutti i dati audio in un nuovo file, con un
header corretto, poi suonare quel file.
Su 
www.wotsit.org
 c'č il formato dei file .wav, ci ho dato appena
un'occhiata,
ma al tuo posto cercherei un'altra soluzione... :-(((((
P.S.: Con le immagini puoi creare una struttura in memoria e lavorare su
quella
con le API, forse qualcuno che se ne intende piů di me sa se c'č qualcosa di
analogo per l'audio ?



urka... siamo nei pasticci....
e se con un comando tipo quello per sommare files riuscissi a mettere
assieme i file da "sentire" del tipo:
copy a.wav + b.wav + c.wav + d.wav  PIPPO.WAV e ascolto solo il PIPPO???
Solo che non riesco a trovare COME concatenarli...
cavolo su AMIGA facevo in dos:
JOIN A B C D as PIPPO e mi sentivo tutti i files in uno solo!
che comando potrei usare e come per metterli assieme ?
anche col COPY /B non mi riconosce più il Wav !!
grazie per qualche aiutino... vada per la cassa virtuale di birra!
ciao
Frank

anche col COPY /B non mi riconosce più il Wav !!
NON puoi semplicemente concatenarli, ogni file è suddiviso in una serie di
chunk,
cioè di blocchi di dati, ognuno con un tag che ne definisce lo scopo, cioè
se
contiene un blocco di dati di suono, delle informazioni sul file, il metodo
di
compressione ecc., e una serie di info anche in coda, fra cui quello che
trovi
se fai click destro-proprietà-dettagli su un wav qualunque.
Per peggiorare le cose pare non ci sia in effetti nessuna regola fissa
sull'ordine in cui devono trovarsi questi chunk, tranne per i primi, credo;
comunque se le lettere le registri tu non dovresti avere questo problema.
In pratica dovresti:
-aprire un file nuovo
-aprire uno dopo l'altro i file  A B C D
-interpretare gli header per scoprire dove sono i dati
-Creare un tuo header e scriverlo sul tuo file
-per ogni file A B C D:
    -prendere i blocchi di dati, fino all'ultimo ma scartando
     il silenzio finale e le info che non ti servono
    -scriverli nel tuo file unico
-ripetere per ogni file
-chiudere il tuo file unico e suonarlo.
Se vai su quel sito, scaricati wav.zip e wave.zip. Non è per scoraggiarti,
ma
con quello che dicono nel secondo, c'è da farsi venire i capelli dritti...
Buon divertimento :-)))
P.S. Hai problemi con l'orario del PC, sei preveggente oppure in Svizzera
avete un fuso orario diverso ? ;-)
Hai risposto "ieri" al mio messaggio di oggi !


...


andiamo sul semplicistico:
se riesco a concaterane
a.wav + b.wav + c.wav = finale.wav
credo che ho la soluzione ammesso e concesso che il concatenare non duri
n'eternità!
ma come concateno dei file wav ????
ciao



Quello che ti consiglio io e'  di unire insieme i file wave    a.wav b.wav
c.wav d.wav,
tieni presente che in un file wave dal primo byte al quarantaquattresimo
compreso vi e' l'intestazione (Header)
dal quarantacinquesimo in poi iniziano i dati quindi non puoi unirli senza
togliere l'intestazione dove necessario altrimenti
non potrebbero piu' essere letti dalle applicazioni multimediali quindi devi
unirli insieme in questo modo.
1)leggi l'intestazione contenuta nel file a.wav che deve essere uguale a
b.wav c.wav d.wav,
2)crea un nuovo file wave dal nome abcd.wav con la stessa intestazione di
a.wav
3)leggi  i dati contenuti nel file a.wav (escludendo l'intestazione) e
inseriscili nel file abcd.wav
3)leggi  i dati contenuti nel file b.wav  (escludendo l'intestazione) e
inseriscili nel file abcd.wav
4)leggi  i dati contenuti nel file c.wav  (escludendo l'intestazione) e
inseriscili nel file abcd.wav
5)leggi  i dati contenuti nel file d.wav  (escludendo l'intestazione) e
inseriscili nel file abcd.wav
a questo punto hai un file unico che contiene i dati di a.wav + b.wav +
c.wav + d.wav,
 Naturalmente per rendere piů veloci le operazioni di lettura e scrittura
dei files i dati dovranno essere letti e scritti in un blocco
unico (senza cicli FOR NEXT).
6) a questo punto i dati si troveranno in un file unico e quindi saranno
eseguiti senza pause dal
    controllo MCI multimediale o altro.
Tutto questo puo' essere eseguito con del codice in VB.
Scrivimi se vuoi ulteriori schiarimenti.
Paolo 
paor...@tin.it


salve
 Il seguente codice unisce file wave e non mi sembra per niente lento.
Funziona soltanto con file wave mono 8bit (se li vuoi diversamente devi
cambiare la dichiarazione delle variabili)
e i file da unire devono avere la stessa frequenza di campionamento, inoltre
dai  tuoi file wave devi prima
togliere  le pause  silenziose.
 I file a.wav e.wav o.wav u.wav sono i file da unire, il file aeo.wav è il
file risultato unito senza pause.
 Naturalmente i nomi dei file possono essere sostituiti da variabili in modo
da creare la sequenza
di vocali o consonanti che vuoi.
Private Sub Command1_Click()
      Dim TotLenFileDGrezz As Long
      Dim LenFileDGrezz As Long
      Dim sizeFileTotRaw As Long
      Dim sizeFileRaw As Long
      Dim sizeFileWave As Long
      Open "c:\consonanti\a.wav" For Binary As #1
                       Dim header(44) As Byte
                       Get #1, 1, header()
                       Get #1, 41, LenFileDGrezz       'Stringa "Data"
                       TotLenFileDGrezz = LenFileDGrezz
                       ReDim DatiGrezzi(LenFileDGrezz) As Byte
                       Get #1, 45, DatiGrezzi()
      Close #1
      Open "c:\consonanti\aeo.wav" For Binary As #1
                       Put #1, 45, DatiGrezzi()
      Close #1
      Open "c:\consonanti\e.wav" For Binary As #1
                       Get #1, 41, LenFileDGrezz       'Stringa "Data"
                       ReDim DatiGrezzi(LenFileDGrezz) As Byte
                       Get #1, 45, DatiGrezzi()
      Close #1
      Open "c:\consonanti\aeo.wav" For Binary As #1
                       Put #1, TotLenFileDGrezz, DatiGrezzi()
      Close #1
      TotLenFileDGrezz = TotLenFileDGrezz + LenFileDGrezz
      Open "c:\consonanti\o.wav" For Binary As #1
                       Get #1, 41, LenFileDGrezz        'Lunghezzatotale
file datigrezzi =
                       ReDim DatiGrezzi(LenFileDGrezz) As Byte
                       Get #1, 45, DatiGrezzi()
      Close #1
      Open "c:\consonanti\aeo.wav" For Binary As #1 ' mai nessun codice
                       Put #1, TotLenFileDGrezz, DatiGrezzi()
      Close #1
      TotLenFileDGrezz = TotLenFileDGrezz + LenFileDGrezz
      Open "c:\consonanti\u.wav" For Binary As #1
                       Get #1, 41, LenFileDGrezz        'Lunghezzatotale
file datigrezzi =
                       ReDim DatiGrezzi(LenFileDGrezz) As Byte
                       Get #1, 45, DatiGrezzi()
      Close #1
      Open "c:\consonanti\aeo.wav" For Binary As #1 ' mai nessun codice
                       Put #1, TotLenFileDGrezz, DatiGrezzi()
      Close #1
      TotLenFileDGrezz = TotLenFileDGrezz + LenFileDGrezz
      Open "c:\consonanti\aeo.wav" For Binary As #1 ' mai nessun codice
                       Put #1, 1, header()
                       Put #1, 41, TotLenFileDGrezz      'Lunghezzatotale
file datigrezzi =
                       Put #1, TotLenFileDGrezz, DatiGrezzi()
      Close #1
      sizeFileWave = FileLen("c:\consonanti\aeo.wav")
      sizeFileWave = sizeFileWave - 8     'variabile Long
      Open "c:\consonanti\aeo.wav" For Binary As #1
                       Put #1, 5, sizeFileWave
      Close #1
End Sub
Ciao e buon lavoro, Paolo