Post recenti

Pagine: [1] 2 3 ... 10
1
Altri linguaggi / Re:Da un long derivare i due short (c)
« Ultimo post da vuott il Oggi alle 00:38:44 »
Chi crede in San Midi, programmerà in eterno !

 sanmidi
2
Altri linguaggi / Re:Da un long derivare i due short (c)
« Ultimo post da Gianluigi il Ieri alle 21:21:36 »

Per gli utenti, ...vicini e lontani...
Prendete e mangiatene tutti:
...
Grazie  :D

ma non ho capito se sei il novello Nunzio Filogamo o il novello Messia  :-\
3
Programmazione / Re:Continuaimo con i discorsi di stampante
« Ultimo post da Franco_da_vc il Ieri alle 21:09:19 »
Non ti corrucciare oltre per il discorso del default, il fatto è che io sono un comodone e quindi quando realizzo un programma tendo a fare in modo che quest'ultimo faccia già tutte le scelte per me, in questo caso la stampante di default di sistema è la inkjet, ma i moduli che devo stampare con questo port che sto realizzando sono a ricalco e quindi mi ci vuole la Epson ad impatto.

inoltre come dici tu un buon programma è quello che anche altri utenti possono usare, e per finire: la piccola modifica di cui parlavo non intendevo certo dire che dovevi farmela tu... non mi permetterei mai.

In ogni caso per ora ti ringrazio infinitamente.
4
Altri linguaggi / Re:Da un long derivare i due short (c)
« Ultimo post da vuott il Ieri alle 18:25:19 »
In questo codice il programmatore prende un segnale mono (il device default di alsa) e ne legge il valore per visualizzarlo a schermo.
https://github.com/johnliu55tw/ALSASoundMeter
Per gli utenti, ...vicini e lontani, ho tradotto in Gambas il simpatico programmino, scritto in C, sopra indicato da AllegFede.

Prendete e mangiatene tutti:
Codice: [Seleziona]
Private handle As Pointer
Private bo As Boolean
Private lb As Label
 
Library "libasound:2"

Private Const SND_PCM_STREAM_CAPTURE As Byte = 1
Private Const SND_PCM_FORMAT_S16_LE As Byte = 2
Private Const SND_PCM_ACCESS_RW_INTERLEAVED As Byte = 3

' int snd_pcm_open(snd_pcm_t **pcm, const char *name, snd_pcm_stream_t stream, int mode)
' Opens a PCM.
Private Extern snd_pcm_open(handleP As Pointer, nome As String, flusso As Integer, mode As Integer) As Integer

' int snd_pcm_set_params(snd_pcm_t * pcm, snd_pcm_format_t format, snd_pcm_access_t access, unsigned int channels, unsigned int rate, int soft_resample, unsigned Int latency)
' Set the hardware and software parameters in a simple way.
Private Extern snd_pcm_set_params(pcm As Pointer, formatInt As Integer, accesso As Integer, channels As Integer, rate As Integer, soft_resample As Integer, latency As Integer) As Integer

' snd_pcm_sframes_t snd_pcm_readi (snd_pcm_t *pcm, void *buffer, snd_pcm_uframes_t size)
' Read interleaved frames from a PCM.
Private Extern snd_pcm_readi(pcm As Pointer, buffer As Pointer, size As Integer) As Integer

' const char * snd_strerror (int errnum)
' Returns the message for an error code.
Private Extern snd_strerror(errnum As Integer) As String

' int snd_pcm_recover (snd_pcm_t *pcm, int err, int silent)
' Recover the stream state from an error or suspend.
Private Extern snd_pcm_recover(pcm As Pointer, err As Integer, silent As Integer) As Integer
   
' snd_pcm_close(snd_pcm_t *pcm)
' Close PCM handle.
Private Extern snd_pcm_close(pcm As Pointer)


Public Sub Form_Open()

  Dim err As Integer
   
' Apre il sub-sistema PCM di ALSA per la registrazione:
   err = snd_pcm_open(VarPtr(handle), "default", SND_PCM_STREAM_CAPTURE, 0)
   If err < 0 Then Error.Raise("Errore nell'apertura del sub-sistema PCM: " & snd_strerror(err))
 
' Imposta i parametri del sub-sistema PCM di ALSA per la registrazione:
   err = snd_pcm_set_params(handle, SND_PCM_FORMAT_S16_LE, SND_PCM_ACCESS_RW_INTERLEAVED, 1, 48000, 1, 500000)
   If err < 0 Then
     snd_pcm_close(handle)
     Error.Raise("Errore nell'impostazione dei parametri del sub-sistema PCM: " & snd_strerror(err))
   Endif
 
   With ProgressBar1
     .Value = 0
     .Label = False
   End With
 
   With lb = New Label(ProgressBar1)
     .Background = Color.Transparent
     .Alignment = Align.Center
   End With
   
   bo = True

End


Public Sub Button1_Click()
 
  Dim err, dB, peak As Integer
  Dim k As Float = 0.45255
  Dim Pvalue As Float
  Dim buffer As Short[]
  Dim buffer_size, frames As Long
  Dim b As Byte

   buffer = New Short[8 * 1024]
 
   buffer_size = CLong(Shr(buffer.Count * SizeOf(gb.Short), 1))
   
   While bo
' Legge i dati intercettati:
     frames = snd_pcm_readi(handle, buffer.Data, buffer_size)
     If frames < 0 Then
' Tenta di ripristinare:
       err = snd_pcm_recover(handle, frames, 0)
       If err < 0 Then
         snd_pcm_close(handle)
         Error.Raise("Errore alla funzione snd_pcm_readi( ): " & snd_strerror(err))
       Endif
     Endif

     If (frames > 0) And (frames < CLong(buffer_size)) Then
       snd_pcm_close(handle)
       Error.Raise("Lettura dati ridotta (atteso: " & CStr(buffer_size) & ", letto: " & CStr(frames) & ")")
     Endif
       
' Calcola dB e aggiorna eventualmente il valore di picco:
     Pvalue = rms(buffer, buffer_size) * k
     dB = CInt(20 * Log10(Pvalue))
     If dB > peak Then peak = dB
       
     For b = 1 To 8
       ProgressBar1.Value = dB / 100
       lb.Text = CStr(dB) & " dB"
       Wait 0.001
     Next
     
     Label1.Text = "Picco max: " & CStr(peak) & " dB"

   Wend
   
' Va in Chiusura liberando la memoria precedentemente occupata:
   buffer.Clear
   snd_pcm_close(handle)
   Me.Close
   
End


Public Sub Button2_Click()

   bo = False
   
End


Private Function rms(buf As Short[], dimbuffer As Long) As Float
 
  Dim i As Integer
  Dim square_sum As Long
  Dim result As Float
   
   For i = 0 To dimbuffer - 1
     square_sum += CLong(buf[i]) * CLong(buf[i])
   Next
   result = Sqr(square_sum / dimbuffer)
 
   Return result
   
End


5
Programmazione / Re:Continuaimo con i discorsi di stampante
« Ultimo post da Gianluigi il Ieri alle 17:56:46 »
...magari aggiungendo un controllo per avere una stampante di default.

Franco,
gli ultimi suggerimenti che ti ho dato circa la scelta della stampante non mi convincono affatto.
Un buon programma è quello che può essere usato anche da altro utente su altro computer e configurazione hardware.
Direi pertanto di lasciarli perdere e di usare più o meno il primo codice proposto.
Se la paura è quella di stampare sulla stampante errata (anche se non ne capisco il motivo) ti crei una finestra che quando clicca sul pulsante stampa ricorda all'utente quale è la stampante scelta, se va bene lo fai continuare altrimenti o gli dai anche li la possibilità di scegliere oppure annulla e sceglie dalla combo un'altra stampante.

Non penso che ci siano possibilità diverse da queste.
7
Programmazione / Re:Continuaimo con i discorsi di stampante
« Ultimo post da Gianluigi il Ieri alle 16:24:17 »
Scusa GianLuigi,

ma quale è l'ultima versione del PDFReport, ne ho scaricata una, ma si pianta appena cerco di farla partire tramite l'ide.

In ogni caso grazie per i suggerimenti.

Mi sa che avevi ragione, l'ultima è questa
8
Programmazione / Re:Continuaimo con i discorsi di stampante
« Ultimo post da Gianluigi il Ieri alle 15:31:28 »

Puoi togliermi la curiosità sulla combo per le stampanti?


Routine provata, devi scusare il ritardo, ma nel frattime avevo reinstallato e quindi ho dovuto reinserire la stampante: ho inglobato la routine nel mio programma con il nome SceltaStampante.class e gli ho descritto un form, risultato: la routine gira e rivela nella combo le mie due stampanti inserite.

Molto bene, ti ringrazio.

Citazione
Stavo pensando quindi, se tu sei d'accordo, di utilizzarlo nella mia procedura, magari aggiungendo un controllo per avere una stampante di default.

Perché non dovrei essere d'accordo? Devi essere tu a decidere cosa ti serve.
Te l'ho suggerito apposta perché tu lo potessi usare.  :D
Non capisco però la faccenda della stampante di default, tu la ottieni con le impostazioni del sistema.
Poi se vuoi nel tuo programma metti il text della combo che ti interessa come testo visibile (ComboBox1.Text = "il nome della stampante che ti serve") al posto di quello di default dell'esempio (sempre che il nome sia diverso), così eviti di sbagliare la scelta.

Ciao

P.s. Naturalmente il suggerimento vale se il programma lo usi solo tu e devi anche ricordarti di cambiare il codice quando cambierai la stampante.
Altrimenti meglio lasciare il codice così come suggerito.
C'è una terza via, visto che le stampanti sono solo due e se capisco quella di default non è quella corretta allora:
Codice: [Seleziona]
For Each s In ComboBox1.List
    If s <> Printer.Default Then ComboBox1.Text = s
Next
9
Altri linguaggi / Re:Da un long derivare i due short (c)
« Ultimo post da vuott il Ieri alle 15:04:37 »
Si può fare shiftando i bits?
Exactement.


In Gambas non ho trovato nessuna pagina web.
http://gambaswiki.org/wiki/cat/bit
http://www.gambas-it.org/wiki/index.php?title=Sostituire_gli_operatori_logici_di_spostamento_dei_bit_con_semplici_operazioni

Il problema è che - con riferimento al suo argomento - io non ho compreso perché AllegFede li vuole spostare. Per ottenere "cosa" ?  :-X
10
Programmazione / Re:Continuaimo con i discorsi di stampante
« Ultimo post da Franco_da_vc il Ieri alle 14:56:50 »

Puoi togliermi la curiosità sulla combo per le stampanti?


Routine provata, devi scusare il ritardo, ma nel frattime avevo reinstallato e quindi ho dovuto reinserire la stampante: ho inglobato la routine nel mio programma con il nome SceltaStampante.class e gli ho descritto un form, risultato: la routine gira e rivela nella combo le mie due stampanti inserite.

Stavo pensando quindi, se tu sei d'accordo, di utilizzarlo nella mia procedura, magari aggiungendo un controllo per avere una stampante di default.
Pagine: [1] 2 3 ... 10