Il mio scopo è di ottenere un registratore per le vari device per costruire una DLL da utilizzare in altri ambiti.
Cercando sul web ed essendo appena approdato al C# ho trovato di appetibile questo snippet:
http://www.tek-tips.com/faqs.cfm?fid=4782
Ho creato varie funzioni per esempio per ottenere la lista dei device, il loro guid e nome, settare vari parametri ecc... però mi sono incartato sul salvataggio del buffer su file.
Così mi è venuto in aiuto lo snippet di cui ho postato il link, però stranamente il contenuto del WAV è nullo. Tutte le info sono scritte correttamente come la frequenza, durata, byte ecc... però il campo "DATA" del formato wav è nullo.
Il codice usato per salvare è quello dell'esempio:
- passo il capturebuffer ad uno stream
- apro uno stream di tipo file
- crea un array di byte e dentro ci metto la struttura di un file wav + lo stream del capturebuffer
- copio l'array di byte sullo stream di tipo file aperto prima (creo il file in pratica)
Ho controllato la lunghezza dello Stream quando viene riempito col capturebuffer ed è corretta e quindi non riesco a capire se il problema consiste nella creazione del file o nel riempimento del capturebuffer (che si riempirebbe di "nulla" nel senso che occuperebbe posto, ma posto "inutile").
A tal proposito volevo vedere se il capturebuffer aveva contenuto "valido" e quindi volevo creare una funzione Play() per ascoltarlo:
Ma c'è un errore legato allo spazio occupato nel buffer...codice:public void Play() { int writeposition, readposition; Stream MemStream2 = new MemoryStream(); //capacità dinamica //stream che conterrà tutte le info catturate captureBuffer.GetCurrentPosition(out writeposition, out readposition); captureBuffer.Read(0, MemStream2, writeposition, LockFlag.None); //Ok, MemStream2 contiene i dati correttamente o almeno occupa le giuste pos //copiamo il buffer di cattura su Memstream2 //Buffer per playare BufferDescription bufferDescription = new BufferDescription(waveFormat); //bufferDescription.BufferBytes = (int) MemStream2.Length; //settarlo da errore sconosciuto bufferDescription.ControlPositionNotify = true; bufferDescription.ControlFrequency = true; bufferDescription.ControlPan = true; bufferDescription.ControlVolume = true; //C'è qualche problema qui //[errore: indice oltre ai limite della matrice] se metto new Buffer(MemStrem, (int)MemStream.lenght, bufferDescription, device) //[errore: valore non compreso nell'intervallo previsto] se metto new Buffer(bufferDescription, device); Buffer bufferplay = new Buffer(bufferDescription, device); //errore qui bufferplay.Format = waveFormat; bufferplay.Write(0, MemStream2, (int)MemStream2.Length, LockFlag.EntireBuffer); bufferplay.Play(0, BufferPlayFlags.Default); MemStream2.Close(); }
Scusate la nabbanza, ma vediamo se qualcuno di voi sa darmi una mano.
Ringrazio in anticipo per l'attenzione.

Rispondi quotando
