11/03/10 13:34
sirpesa
Salve, premetto che sono nuovo da queste parti e che ho provato a cercare nei post precedenti del forum ma non ho trovato nulla che potesse aiutarmi.. per cui se per caso cmi fosse sfuggito chiedo umilmente perdono =)
In ogni caso mi ritrovo a dover scrivere una applicazione che cattura dei dati da una piccola radio (input tramite jack audio) (utilizzata in un modo un pò strano, sostanzialemnte devo capire quando il segnale ricevuto è disturbato e mandare un'email) la parte software che comprende il campionamento dei dati e l'invio tramite smtp dell'email non è un problema, ho invece difficoltà a capire come gestire l'input audio.
Bazzicando in internet ho inteso che dovrei usare delle librerie DirectX, tali DirectInput o DirectAudio (credo decisamente la seconda).
Ho scaricato il tutto e ho provato a scrivere una semplice applicazione console che stampi "a schermo" i valori che riceve dalla scheda audio, ma è molto più complicato di quanto pensassi. Aggiungo il codice, anche se penso ci sia una serie di castronerie spaventose =)
la quale restiruisce un'errore all'istruzione
Premetto che la mia preparazione è quella di un comune studente di un'istituto tecnico, per cui non sono ancora molto a mio completo agio con strutture come frames, buffers e streams.
Qulasiasi aiuto sarebbe molto gradito, ringrazio in anticipo per la disponibilità. E mi scuso per eventuali castronerie =\.
Luca.
In ogni caso mi ritrovo a dover scrivere una applicazione che cattura dei dati da una piccola radio (input tramite jack audio) (utilizzata in un modo un pò strano, sostanzialemnte devo capire quando il segnale ricevuto è disturbato e mandare un'email) la parte software che comprende il campionamento dei dati e l'invio tramite smtp dell'email non è un problema, ho invece difficoltà a capire come gestire l'input audio.
Bazzicando in internet ho inteso che dovrei usare delle librerie DirectX, tali DirectInput o DirectAudio (credo decisamente la seconda).
Ho scaricato il tutto e ho provato a scrivere una semplice applicazione console che stampi "a schermo" i valori che riceve dalla scheda audio, ma è molto più complicato di quanto pensassi. Aggiungo il codice, anche se penso ci sia una serie di castronerie spaventose =)
static void Main(string[] args) { Microsoft.DirectX.DirectSound. Capture SoundCapture = new Capture(); CaptureBuffer MySoundBuffer; WaveFormat MyFormat = new WaveFormat(); MyFormat.SamplesPerSecond = 22000; MyFormat.Channels = 1; MyFormat.BitsPerSample = 8; MyFormat.AverageBytesPerSecond = 22000; MyFormat.BlockAlign = 1; CaptureBufferDescription MySBufDesc = new CaptureBufferDescription(); MySBufDesc.Format = MyFormat; MySBufDesc.BufferBytes = 100000; MySBufDesc.ControlEffects = false; MySBufDesc.WaveMapped = true; MySoundBuffer = new CaptureBuffer(MySBufDesc, SoundCapture); MemoryStream NStream = new MemoryStream(100); int count = 0, Byte = 0; MySoundBuffer.Start(true); for (; ; ) { MySoundBuffer.Stop(); //Narr = MySoundBuffer.Read( Console.WriteLine("read:" + Byte); MySoundBuffer.Read(1, NStream,10, Microsoft.DirectX.DirectSound.LockFlag.FromWriteCursor); count++; Console.WriteLine("read:" + Byte); while (Byte != -1) { Byte = NStream.ReadByte(); Console.WriteLine("read:"+ Byte); } Byte = NStream.ReadByte() ; MySoundBuffer.Start(true); Thread.Sleep(100); }
la quale restiruisce un'errore all'istruzione
MySoundBuffer.Read(1, NStream,10, Microsoft.DirectX.DirectSound.LockFlag.FromWriteCursor);(che si corregge cambiando il flag da "fromWriteCursor" (o "EntireBuffer" a "none" (però se non leggo niente a che serve -.- )
Premetto che la mia preparazione è quella di un comune studente di un'istituto tecnico, per cui non sono ancora molto a mio completo agio con strutture come frames, buffers e streams.
Qulasiasi aiuto sarebbe molto gradito, ringrazio in anticipo per la disponibilità. E mi scuso per eventuali castronerie =\.
Luca.
aaa