Visualizzazione dei risultati da 1 a 8 su 8
  1. #1

    [C#] Leggere l'output del microfono...

    Salve,
    Mi sapete dire come posso fare per leggere byte per byte l'output prodotto da un microfono attaccato alla scheda sonora? Immagino che si debba usare la libreria directsound, ma non so proprio da dove cominciare.

    Grazie a tutti.

    Ciao

  2. #2
    Ho fatto qualche ricerca, e ho scritto questo codice:

    codice:
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System;
    using System.Drawing;
    using System.Collections;
    using System.ComponentModel;
    using System.Windows.Forms;
    using System.Data;
    using Microsoft.DirectX;
    using Microsoft.DirectX.DirectSound;
    using DS = Microsoft.DirectX.DirectSound;
    
    
    
    class Classe1 : System.Windows.Forms.Form
    {
        private DS.Device sounddevice;
        private SecondaryBuffer shotsound;
     
        static void Main()
        {
            System.IO.Stream data = System.IO.Stream.Null;
            Classe1 class1 = new Classe1();
            int a = 0;
            class1.sounddevice = new DS.Device();
            class1.sounddevice.SetCooperativeLevel(class1, CooperativeLevel.Normal);
    
    
            BufferDescription description = new BufferDescription();
            description.ControlEffects = false;
            class1.shotsound = new SecondaryBuffer("suono1.wav", description, class1.sounddevice);
    
    //        class1.shotsound.Play(0, BufferPlayFlags.Default);
    
    
            while (a != -1)
            {
                class1.shotsound.Read(0, data, 1, LockFlag.None);
                a = data.ReadByte();
                Console.WriteLine(a);
            }
            Console.ReadLine();
        }
    }
    Mi sarei aspettato di vedere stampati su schermo dei numeri rappresentanti i byte letti dal file wave, ma così non è stato. Viene stampato solo un -1 (quindi il buffer è sempre vuoto).

    Se tolgo il flag di commento dalla riga
    class1.shotsound.Play(0, BufferPlayFlags.Default);
    sento suonare il file wav, quindi non tutto quello che ho fatto dovrebbe essere sbagliato .

    Mi sapete dire come fare per ottenere quello che voglio?

    Il prossimo passo sarà cercare di leggere lo stream audio direttamente dalla porta microfono...

    Grazie a tutti.

    Ciao

  3. #3
    Nessuno sa aiutarmi?

  4. #4
    Utente di HTML.it L'avatar di albgen
    Registrato dal
    Jun 2005
    Messaggi
    3,249
    forse devieseguire il programma come amministratore!?
    I got the remedy

  5. #5
    Sono loggato come amministratore, ma poi onestamente non vedo il nesso tra i diritti dell'utente e la lettura di un file wave.
    Sto evidentemente sbagliando il modo di utilizzare le direct sound. Se tu volessi analizzare byte per byte un wave in modo da poter (per esempio) scatenare un evento quando viene ripropoddo uno specifico campione, come faresti?

    Grazie ancora, ciao

  6. #6
    Utente di HTML.it L'avatar di albgen
    Registrato dal
    Jun 2005
    Messaggi
    3,249
    Originariamente inviato da MonsterMash
    Sono loggato come amministratore, ma poi onestamente non vedo il nesso tra i diritti dell'utente e la lettura di un file wave.
    beh stai "leggendo" da un device...
    cmq, non è banale fare una cosa del genere.

    Prova a vedere qui http://www.tek-tips.com/faqs.cfm?fid=4782
    I got the remedy

  7. #7
    Utente di HTML.it
    Registrato dal
    Sep 2009
    Messaggi
    10
    Ciao, vorrei avere anchio qualche aiuto!!!
    MonsterMash, sei riuscito a risolvere?
    Io sto cercando di recuperare dal file WAV, i dati delle frequenze, in modo da creare un'onda...

    Mi aiutate?

  8. #8
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,472

    Moderazione

    Originariamente inviato da uelfox
    Ciao, vorrei avere anchio qualche aiuto!!!
    MonsterMash, sei riuscito a risolvere?
    Io sto cercando di recuperare dal file WAV, i dati delle frequenze, in modo da creare un'onda...
    Mi aiutate?
    Non intervenire in discussioni già avviate, e vecchie di mesi, per porre un problema differente: apri una discussione separata in cui poterlo discutere il tuo caso.
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

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 © 2025 vBulletin Solutions, Inc. All rights reserved.