Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Samsung Micro RGB R95H, il primo LCD a LED rossi, verdi e blu di Samsung alla prova del banco di misura
Samsung Micro RGB R95H, il primo LCD a LED rossi, verdi e blu di Samsung alla prova del banco di misura
Il primo Micro RGB di Samsung per il salotto è il 65 pollici da 2.749 euro. Sul banco di misura abbiamo rilevato 2.000 nit di picco, nero assoluto con il local dimming e il 91,4% del BT.2020, il colore più ampio che abbiamo misurato su un LCD
iPhone 18 Pro: la recensione del miglior iPhone compatto di sempre
iPhone 18 Pro: la recensione del miglior iPhone compatto di sempre
Apple ha rinnovato iPhone 18 Pro soprattutto dentro: chip A20 Pro a 2 nm con memoria affiancata al SoC, camera di vapore tre volte più ampia, Dynamic Island più piccola del 25% grazie a Face ID sotto il display e fotocamera principale con diaframma variabile da f/1.48 a f/4. Lo abbiamo misurato al colorimetro e nei benchmark, usato con iOS 27 e messo alla prova in fotografia tra laghi, borghi e interni poco illuminati
Panasonic, 30 anni di Toughbook: la "Bibbia" di mille regole dietro i nuovi G3 e 34
Panasonic, 30 anni di Toughbook: la "Bibbia" di mille regole dietro i nuovi G3 e 34
A Londra, per il trentennale dei Toughbook, Panasonic ha presentato il tablet G3 e il 2-in-1 34. Con Jon Tucker, a capo dell'ingegneria europea, abbiamo parlato di ciò che non si vede: batterie, antenne, porte seriali e accorgimenti nati sul campo
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 30-07-2014, 16:12   #1
dyablo96
Senior Member
 
L'Avatar di dyablo96
 
Iscritto dal: Mar 2013
Città: vicino vicenza
Messaggi: 787
c# streaming audio

buon giorno a tutti, sto cercando di creare un programma in c# che mi permetta di riprodurre l'audio in entrata sul microfono del pc sul un altro ipotetico pc sulla stessa rete come se fosse una cassa.
ho cercato online ed ho trovato NAudio, una utilissima libreria.
per il momento sono riuscito a fare in modo che l'audio in entrata sul microfono venga salvato sotto forma di file.
ora io vorrei sostituire al salvataggio venga fatto partire lo streaming attraverso la rete fino ad arrivare all'host che dovrà riprodurre.

questo è il codice fino ad ora:
Codice:
        static WaveFormat waveFormat = new WaveFormat(44100, 8, 1);
        WaveFileWriter writer = new WaveFileWriter("nomeFile", waveFormat);
        WaveIn waveIn = new WaveIn();

        private void BtnStartRecording_Click(object sender, RoutedEventArgs e)
        {
            int waveInDevices = WaveIn.DeviceCount;
            for (int waveInDevice = 0; waveInDevice < waveInDevices; waveInDevice++)
            {
                WaveInCapabilities deviceInfo = WaveIn.GetCapabilities(waveInDevice);
                MessageBox.Show("Device found\n" + waveInDevice + ": " + deviceInfo.ProductName + ", "+ deviceInfo.Channels +" channels");

                waveIn.DeviceNumber = 0;
                waveIn.DataAvailable += waveIn_DataAvailable;
                waveIn.WaveFormat = new WaveFormat(44100, 1);

                writer = new WaveFileWriter("uno.wav", waveIn.WaveFormat);

                waveIn.StartRecording();
            }
        }

        void waveIn_DataAvailable(object sender, WaveInEventArgs e)
        {
            if (writer == null)
                return;

            writer.WriteData(e.Buffer, 0, e.BytesRecorded);
            writer.Flush();
        }

        private void BtnStop_Click(object sender, RoutedEventArgs e)
        {
            if (waveIn != null)
            {
                waveIn.StopRecording();
                waveIn.Dispose();
                waveIn = null;
            }
            if(writer != null)
            {
                writer.Dispose();
                writer = null;
            }
        }
grazie in anticipo a tutti quelli che mi aiuteranno
__________________
il mio pc [Case] Cooler Master Elite 370[RAM]Vengeance Blue1600MHz 8GB cl9[Scheda Madre AsRock B75 PRO3-M[CPU] Intel i5-3470 3,2GHz[Masterizzatore Interno] Samsung SH-224BB 24x[Alimentatore PC] Seasonic S12II-520 520W 80+ Bronze[Hard Disk Interno] 3.5" Toshiba 500GB+ WD Caviar Blue 500GB[vga] sapphire 7870[monitor] LG 22EA53VQ-P LCD IPS LED 21.5 "

Ultima modifica di dyablo96 : 30-07-2014 alle 16:15.
dyablo96 è offline   Rispondi citando il messaggio o parte di esso
Old 31-07-2014, 08:44   #2
dyablo96
Senior Member
 
L'Avatar di dyablo96
 
Iscritto dal: Mar 2013
Città: vicino vicenza
Messaggi: 787
Nessuno?
__________________
il mio pc [Case] Cooler Master Elite 370[RAM]Vengeance Blue1600MHz 8GB cl9[Scheda Madre AsRock B75 PRO3-M[CPU] Intel i5-3470 3,2GHz[Masterizzatore Interno] Samsung SH-224BB 24x[Alimentatore PC] Seasonic S12II-520 520W 80+ Bronze[Hard Disk Interno] 3.5" Toshiba 500GB+ WD Caviar Blue 500GB[vga] sapphire 7870[monitor] LG 22EA53VQ-P LCD IPS LED 21.5 "
dyablo96 è offline   Rispondi citando il messaggio o parte di esso
Old 01-08-2014, 08:44   #3
dyablo96
Senior Member
 
L'Avatar di dyablo96
 
Iscritto dal: Mar 2013
Città: vicino vicenza
Messaggi: 787
Up
__________________
il mio pc [Case] Cooler Master Elite 370[RAM]Vengeance Blue1600MHz 8GB cl9[Scheda Madre AsRock B75 PRO3-M[CPU] Intel i5-3470 3,2GHz[Masterizzatore Interno] Samsung SH-224BB 24x[Alimentatore PC] Seasonic S12II-520 520W 80+ Bronze[Hard Disk Interno] 3.5" Toshiba 500GB+ WD Caviar Blue 500GB[vga] sapphire 7870[monitor] LG 22EA53VQ-P LCD IPS LED 21.5 "
dyablo96 è offline   Rispondi citando il messaggio o parte di esso
Old 01-08-2014, 11:49   #4
Daniels118
Senior Member
 
L'Avatar di Daniels118
 
Iscritto dal: Jan 2014
Messaggi: 852
Non conosco il c#, però suppongo che basterebbe sostituire il WaveFileWriter con un socket. Ovviamente dovrai creare un programma complementare che legga i dati dal socket e li invii al dispositivo di riproduzione.
Naturalmente stai facendo qualcosa a livello sperimentale, perché senza applicare un algoritmo di compressione consumi una banda enorme.
Sicuramente esistono librerie per lo streaming audio in c#, prova a fare una ricerca in rete.
Daniels118 è offline   Rispondi citando il messaggio o parte di esso
Old 01-08-2014, 18:44   #5
dyablo96
Senior Member
 
L'Avatar di dyablo96
 
Iscritto dal: Mar 2013
Città: vicino vicenza
Messaggi: 787
Scusa ma non conosco i società, potresti spiegarmi cosa sono e come funzionano, magari anche in un altro linguaggio, io poi cerco per il c#.
Ovviamente dovrò creare una applicazione per la ricezione dei dati.
Si, é tutto a livello sperimentale.
Per quanto riguarda la compressione dei consumi non saprei come fare se hai qualche idea suggerisci pure anche in altri linguaggi.
Ho provato a cercare ma con scarsi risultati, proverò a cercare in modo ancora più approfondito
__________________
il mio pc [Case] Cooler Master Elite 370[RAM]Vengeance Blue1600MHz 8GB cl9[Scheda Madre AsRock B75 PRO3-M[CPU] Intel i5-3470 3,2GHz[Masterizzatore Interno] Samsung SH-224BB 24x[Alimentatore PC] Seasonic S12II-520 520W 80+ Bronze[Hard Disk Interno] 3.5" Toshiba 500GB+ WD Caviar Blue 500GB[vga] sapphire 7870[monitor] LG 22EA53VQ-P LCD IPS LED 21.5 "
dyablo96 è offline   Rispondi citando il messaggio o parte di esso
Old 01-08-2014, 18:45   #6
dyablo96
Senior Member
 
L'Avatar di dyablo96
 
Iscritto dal: Mar 2013
Città: vicino vicenza
Messaggi: 787
Socket non società, correttore automatico di merd* :P
__________________
il mio pc [Case] Cooler Master Elite 370[RAM]Vengeance Blue1600MHz 8GB cl9[Scheda Madre AsRock B75 PRO3-M[CPU] Intel i5-3470 3,2GHz[Masterizzatore Interno] Samsung SH-224BB 24x[Alimentatore PC] Seasonic S12II-520 520W 80+ Bronze[Hard Disk Interno] 3.5" Toshiba 500GB+ WD Caviar Blue 500GB[vga] sapphire 7870[monitor] LG 22EA53VQ-P LCD IPS LED 21.5 "
dyablo96 è offline   Rispondi citando il messaggio o parte di esso
Old 01-08-2014, 19:05   #7
Daniels118
Senior Member
 
L'Avatar di Daniels118
 
Iscritto dal: Jan 2014
Messaggi: 852
Quote:
Originariamente inviato da dyablo96 Guarda i messaggi
Socket non società, correttore automatico di merd* :P
Leggendo quella parola mi stava venendo un infarto

I socket sono un meccanismo software che consente l'utilizzo della rete attraverso il protocollo IP. In particolare a te serve un socket TCP, ovvero un meccanismo che ti mette a disposizione uno stream. Per stream si intende un flusso continuo e ordinato di dati.
Immagina che la rete sia un tubo, ad un'estremità inserisci delle biglie, dall'altro lato le biglie usciranno nello stesso ordine in cui sono entrate. Se al posto delle biglie inserisci WaveInEventArgs.Buffer, dall'altro lato usciranno i byte che rappresentano il segnale audio.

Quando utilizzi un socket ci sono sempre due parti: il client e il server.
Prima di tutto il server si mette in ascolto su una porta.
Il client effettua una connessione specificando l'indirizzo ip e la porta del server. Se il server lo consente, più client possono connettersi contemporaneamente.
La connessione è bidirezionale (sia il client che il server possono inviare e ricevere i dati), una volta stabilita non c'è più differenza tra client e server, di seguito li chiamerò semplicemente "parti".
Supponiamo che la parte A invii dati a B; in B si verificherà un evento, proprio come "waveIn_DataAvailable", non lo chiama nessuno, si scatena da solo. In alternativa B può fare un loop per controllare quando sono disponibili i dati, oppure fare una lettura bloccante (cioè chiama il metodo di lettura e l'operazione si blocca finché non ci sono dati disponibili).
B legge i dati e li elabora, per esempio mandandoli sul buffer di output della periferica di riproduzione.
Daniels118 è offline   Rispondi citando il messaggio o parte di esso
Old 01-08-2014, 19:13   #8
dyablo96
Senior Member
 
L'Avatar di dyablo96
 
Iscritto dal: Mar 2013
Città: vicino vicenza
Messaggi: 787
ah ok, ho capito

è come se creassi una connessione tcp tra i due host e iniziano a scambiarsi i dati.
ok, la parte relativa alla rete la conosco, so come funzionano tcp udp ecc ecc, questanno ho fatto la prima delle certificazioni cisco e diciamo che questi erano all'ordine del giorno
non li avevo mai visti applicati ad un programma, adesso cercherò come creare la connessione e passare i dati.

sul come ridurre i consumi sulla banda sai dirmi niente? se vuoi puoi farmi degli esempi anche con altri linguaggi, c, java ecc ecc.

intanto grazie

EDIT:
avrei un altra domanda, sto leggnedo online come fare connessioni con socket, ci sono due tipi di connessioni, sincroni e asincroni, io avrei pensato di costruire il programma in modo asincrono così che i due programmi non debbanno bloccarsi e proseguire in parallelo, secondo te è azzecata la mia scelta?.
leggo online che nel pc ricevente avverà un evento ricezione come dici te, che però sarà bloccante, quindi fermerà il programma fino a che non avrà ricevuto tutti i dati.
io però vorrei fare in modo che quando arrivano i dati vengano subito riprodotti e avrei pensato di fare così per risolvere.
sul pc B faccio partire il programma per la ricezione dei dati.
il programma crea un thread che resta in ascolto ed in attesa dei dati.
ora iniziano ad arrivare i dati
il thread inizia a ricevere ed eleaborare le informazioni salvandole sul pc B
un secondo thread iniziera a leggere le informazioni scritte sul disco dal primo thread e a riprodurle.

dici che così potrebbe funzionare?
__________________
il mio pc [Case] Cooler Master Elite 370[RAM]Vengeance Blue1600MHz 8GB cl9[Scheda Madre AsRock B75 PRO3-M[CPU] Intel i5-3470 3,2GHz[Masterizzatore Interno] Samsung SH-224BB 24x[Alimentatore PC] Seasonic S12II-520 520W 80+ Bronze[Hard Disk Interno] 3.5" Toshiba 500GB+ WD Caviar Blue 500GB[vga] sapphire 7870[monitor] LG 22EA53VQ-P LCD IPS LED 21.5 "

Ultima modifica di dyablo96 : 01-08-2014 alle 19:31.
dyablo96 è offline   Rispondi citando il messaggio o parte di esso
Old 01-08-2014, 19:34   #9
Daniels118
Senior Member
 
L'Avatar di Daniels118
 
Iscritto dal: Jan 2014
Messaggi: 852
La compressione è un argomento abbastanza vasto, si tratta fondamentalmente di ridurre la dimensione dei dati senza alterarne*** il contenuto. Esistono svariati algoritmi, alcuni detti lossless (letteralmente "senza perdita") che consentono di ricostruire i dati esattamente com'erano prima (esempi: zip, png), ed altri detti lossy che invece consentono di ricostruire un'approssimazione del dato originale (per esempio jpeg, mp3).

Prima di tutto ti mostro un esempio in pseudocodice di come dovrebbe venire:
Codice:
waveIn_DataAvailable(dati) {
  dati_compressi = comprimi(dati);
  socket.invia(dati_compressi);
}
Codice:
socket_DataAvailable(dati_compressi) {
  dati = decomprimi(dati_compressi);
  waveOut.scrivi(dati);
}
le funzioni comprimi e decomprimi dipendono dall'algoritmo di compressione scelto. Se vuoi divertirti un po' ti consiglio di utilizzare l'ADPCM che è un algoritmo di compressione utilizzato in telefonia, è abbastanza semplice sia da comprendere che da implementare.
Se non vuoi scrivere tu l'algoritmo puoi affidarti a librerie già pronte che puoi sicuramente trovare in rete.
Daniels118 è offline   Rispondi citando il messaggio o parte di esso
Old 01-08-2014, 19:36   #10
dyablo96
Senior Member
 
L'Avatar di dyablo96
 
Iscritto dal: Mar 2013
Città: vicino vicenza
Messaggi: 787
Quote:
Originariamente inviato da Daniels118 Guarda i messaggi
le funzioni comprimi e decomprimi dipendono dall'algoritmo di compressione scelto. Se vuoi divertirti un po' ti consiglio di utilizzare l'ADPCM che è un algoritmo di compressione utilizzato in telefonia, è abbastanza semplice sia da comprendere che da implementare.
Se non vuoi scrivere tu l'algoritmo puoi affidarti a librerie già pronte che puoi sicuramente trovare in rete.
ok, grazie, ora guardo anche come funziona questo algoritmo di compressione.
credo che costruirò io la funzione all'interno di una classe compressione.
__________________
il mio pc [Case] Cooler Master Elite 370[RAM]Vengeance Blue1600MHz 8GB cl9[Scheda Madre AsRock B75 PRO3-M[CPU] Intel i5-3470 3,2GHz[Masterizzatore Interno] Samsung SH-224BB 24x[Alimentatore PC] Seasonic S12II-520 520W 80+ Bronze[Hard Disk Interno] 3.5" Toshiba 500GB+ WD Caviar Blue 500GB[vga] sapphire 7870[monitor] LG 22EA53VQ-P LCD IPS LED 21.5 "
dyablo96 è offline   Rispondi citando il messaggio o parte di esso
Old 02-08-2014, 14:24   #11
dyablo96
Senior Member
 
L'Avatar di dyablo96
 
Iscritto dal: Mar 2013
Città: vicino vicenza
Messaggi: 787
E per il fatto del trasferimento dati che ho descritto prima dici che possa funzionare?
__________________
il mio pc [Case] Cooler Master Elite 370[RAM]Vengeance Blue1600MHz 8GB cl9[Scheda Madre AsRock B75 PRO3-M[CPU] Intel i5-3470 3,2GHz[Masterizzatore Interno] Samsung SH-224BB 24x[Alimentatore PC] Seasonic S12II-520 520W 80+ Bronze[Hard Disk Interno] 3.5" Toshiba 500GB+ WD Caviar Blue 500GB[vga] sapphire 7870[monitor] LG 22EA53VQ-P LCD IPS LED 21.5 "
dyablo96 è offline   Rispondi citando il messaggio o parte di esso
Old 02-08-2014, 15:35   #12
Daniels118
Senior Member
 
L'Avatar di Daniels118
 
Iscritto dal: Jan 2014
Messaggi: 852
Il c# è un linguaggio di altissimo livello, ha sicuramente la possibilità di gestire i socket con gli eventi, quindi non hai bisogno di avviare un thread per utilizzare la modalità non bloccante.
Cosa molto più importante, non devi assolutamente scrivere il dati su disco, ma devi inviarli direttamente al buffer di riproduzione.
Daniels118 è offline   Rispondi citando il messaggio o parte di esso
Old 02-08-2014, 18:41   #13
dyablo96
Senior Member
 
L'Avatar di dyablo96
 
Iscritto dal: Mar 2013
Città: vicino vicenza
Messaggi: 787
Ok grazie
__________________
il mio pc [Case] Cooler Master Elite 370[RAM]Vengeance Blue1600MHz 8GB cl9[Scheda Madre AsRock B75 PRO3-M[CPU] Intel i5-3470 3,2GHz[Masterizzatore Interno] Samsung SH-224BB 24x[Alimentatore PC] Seasonic S12II-520 520W 80+ Bronze[Hard Disk Interno] 3.5" Toshiba 500GB+ WD Caviar Blue 500GB[vga] sapphire 7870[monitor] LG 22EA53VQ-P LCD IPS LED 21.5 "
dyablo96 è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Samsung Micro RGB R95H, il primo LCD a LED rossi, verdi e blu di Samsung alla prova del banco di misura Samsung Micro RGB R95H, il primo LCD a LED rossi...
iPhone 18 Pro: la recensione del miglior iPhone compatto di sempre iPhone 18 Pro: la recensione del miglior iPhone ...
Panasonic, 30 anni di Toughbook: la "Bibbia" di mille regole dietro i nuovi G3 e 34 Panasonic, 30 anni di Toughbook: la "Bibbia...
realme C100x, lo smartphone economico con la batteria da 7500 mAh. La recensione realme C100x, lo smartphone economico con la bat...
Star Wars Zero Company è l'erede di XCOM 2 Star Wars Zero Company è l'erede di XCOM ...
Nuovi rincari da Fastweb: l'operatore ha...
Sconti Amazon sui nuovi Google Pixel 11 ...
Dal RE Engine al 'motore generativo': il...
SpaceX mostra nuove immagini del lancio ...
Cina: CAS Space e Guangzhou Laboratory e...
Nikon Comedy Wildlife Awards 2026: le fo...
Samsung Galaxy A57 e A37 costano di più ...
Windows 11 26H2 taglia il consumo di RAM...
KINGPIN è tornato! Il re dell'ove...
CPU usata, ban ereditato: il caso del Ry...
Spunta un engineering sample di Ryzen 9 ...
iPhone 18 Pro, alcuni utenti segnalano s...
Android Auto: Gemini ascolta la domanda ...
OpenAI avvisa oltre 100 organizzazioni p...
Dall'AI alla SI: il rebranding di Trump ...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 07:46.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v