Visualizzazione dei risultati da 1 a 2 su 2
  1. #1
    Utente di HTML.it L'avatar di maz85
    Registrato dal
    Mar 2003
    Messaggi
    75

    [c#] Registratore tramite DirectSound

    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:

    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();
               
            }
    Ma c'è un errore legato allo spazio occupato nel buffer...

    Scusate la nabbanza, ma vediamo se qualcuno di voi sa darmi una mano.
    Ringrazio in anticipo per l'attenzione.

  2. #2
    Utente di HTML.it L'avatar di maz85
    Registrato dal
    Mar 2003
    Messaggi
    75
    Ok, ho fatto la funzione play che prende i dati direttamente dal buffer e il suono è sempre quello ovvero nullo.
    Quindi il problema non è nella costruzione del file wav, ma proprio nel catturare il suono visto che il buffer non ha catturato ciò che doveva catturare.
    Ora so dove focalizzare l'attenzione.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.