Visualizza post

Questa sezione ti permette di visualizzare tutti i post inviati da questo utente. N.B: puoi vedere solo i post relativi alle aree dove hai l'accesso.


Post - allegfede

Pagine: 1 [2] 3 4 ... 50
16
Altre piattaforme ARM / Lo smartphone per i programmatori Gambas
« il: 04 Ottobre 2019, 21:05:34 »
https://www.lffl.org/2019/10/ubuntu-touch-sbarca-sul-pinephone-pine64.html

Uno smartphone economico, ma con Ubuntu Touch :-)

Riusciremo a cros compilarci le nostre applicazioni gambas?

17
necroposting .. ma mi e' risultato molto utile ....

il succo del discorso e':

Codice: [Seleziona]
Shell Application.Path &/ "Relaunch.gambas &"
 
 Me.Close()

18
MAGARI !!!!

io odio JAVA (il C e' sceso ad una insistente antipatia invece :D)

19
Programmazione / Re:Problemi con Filechooser.dir
« il: 13 Settembre 2019, 19:14:54 »
io invece della tilde uso   User.Home ... che restituisce la home dell'utente :D

sorry sono ad oggetti dentro :D

20
Programmazione / Re:GSTREAMER errore troppi file aperti
« il: 13 Settembre 2019, 19:12:03 »
in ogni caso, dando un'occhiata qui':
https://fossies.org/linux/gambas/gb.media/src/c_media.c

sembrerebbe che GIA' ORA, fermando una pipeline con il metodo pipeline.stop
si dovrebbe mandare il segnale EOS ....
Codice: [Seleziona]
 1807 void MEDIA_stop_pipeline(CMEDIACONTROL *_object)
 1808 {
 1809     int try;
 1810
 1811     // "It is not allowed to post GST_MESSAGE_EOS when not in the PLAYING state." says the documentation
 1812     if ((THIS->state == GST_STATE_PLAYING) && !THIS->eos)
 1813     {
 1814         try = 0;
 1815         gst_element_send_event(ELEMENT, gst_event_new_eos());
 1816         while (!THIS->eos)
 1817         {
 1818             try++;
 1819             if (try > 25)
 1820             {
 1821                 fprintf(stderr, "gb.media: warning: could not catch end of stream\n");
 1822                 break;
 1823             }
 1824             cb_message(THIS_PIPELINE);
 1825             usleep(10000);
 1826         }
 1827     }
 1828
 1829     MEDIA_set_state(THIS, GST_STATE_READY, TRUE);
 1830     cb_message(THIS_PIPELINE);
 1831 }

21
Programmazione / Re:GSTREAMER errore troppi file aperti
« il: 13 Settembre 2019, 13:55:51 »
invidio il marsala di qualita'  :D

22
Programmazione / Re:GSTREAMER errore troppi file aperti
« il: 13 Settembre 2019, 13:19:52 »
si pl e' una variabile globale ....

nella procedura (che si ripete ogni ora ma che nella prima invocazione NON trovera' nessuna vecchia pipeline) l'idea e' di "distruggere" la vecchia PL e ricrearne un'altra (che viene riferita in piu' parti del codice).

Tu dici che la "new" nella procedura istanzia un oggetto che e' distaccato dal resto a causa dello scope locale? Non penso, di solito in tutti gli esempi con GStreamer si fa cosi'.

Comunque la dichiarazione in testa al codice e' questa:
Codice: [Seleziona]
' Gambas class file
Public pl As MediaPipeline
Public Recorder_Client As MediaControl
Public audio_converter As MediaControl
Public audioformat As MediaControl
Public encoder As MediaControl
Public que1 As MediaControl
Public que2 As MediaControl
Public que3 As MediaControl
Public muxer As MediaControl
Public lev As MediaControl
Public sink As MediaControl

Public ClientName As String
Public RecordingRoot As String
Public Spezzetta As Boolean

'per gestire la riconnessione delle sorgenti dall'interno dell'applicazione.
Public StereoSource As Boolean
Public FirstJackSource As String
Public AutoReconnectSource As Boolean

Public Giorni As Integer

Public RealName As String 

Public encType As String = "vorbis"

.... etc etc ..

23
Programmazione / Re:Message.Warning con suono
« il: 13 Settembre 2019, 12:12:09 »
occhio che alle volte, l'installazione standard di gambas NON installa tutti i componenti.

Se non trovate l'oggetto da "spuntare" nella lista dei componenti (come suggerito), provate a cercarlo nei vostri repository.
Potrebbe mancare dalla lista perche' non installato :D

24
Programmazione / Re:Message prepotente!
« il: 13 Settembre 2019, 12:10:08 »
si, anche io metterei il numero civico in un altro "field".
In questo modo puoi evitare di fare il parse dell'intero indirizzo, che potrebbe avere anche "falsi positivi" tipo VIA 20 SETTEMBRE 32.

in ogni caso, come dici tu, se metti la generazione di una "azione" all'interno di un ciclo, ci puo' stare che venga ripetuta :D

25
Programmazione / GSTREAMER errore troppi file aperti
« il: 13 Settembre 2019, 12:01:20 »
Salve a tutti, ho fatto un programma che registra in continuazione da una sorgente audio, comprime l'audio e ne fa pezzetti da un'ora per 90 giorni (poi cancello i file piu' vecchi).
Normalmente funziona per diverse settimane con un errore di "troppi file aperti".

Cercando su internet con gstreamer AND "too many files open" e' venuto fuori questo thread:
http://gstreamer-devel.966125.n4.nabble.com/Too-many-files-open-issue-td4687242.html

che mi sembra attinente.

Sembrerebbe che la semplice interruzione della pipeline, la sua distruzione e la sua riapertura NON siano sufficienti a FERMARE la registrazione.

Si deve inviare un EOS alla pipeline ed il codice C proposto e' questo:
Codice: [Seleziona]
void worker(GstElement *pipeline) {
    gst_element_send_event(pipeline, gst_event_new_eos());
}

void stopListening() {
    boost::thread *th = new boost::thread(worker,pipeline);
}

nel mio programma, che trovate qui':
https://sourceforge.net/projects/prsose/files/tools/PRS_recorder-0.0.10.tar.gz/

il codice che si occupa di chiudere la pipeline e generare un nuovo file e' questo:
Codice: [Seleziona]
Public Sub PipeLine(command As String)
Dim Destinazione As New String[]
Dim Risultato As String
Dim clienti As String[]
Dim I As Integer
 
  Select Case command
    Case "start"
      InitCaptureSystem
     
      InitSink
     
      muxer.LinkTo(sink)
     
      Try pl.Play
      If Error Then
        Message.Warning("Error starting gstreamer graph. Is Jack Audio server runnig?", "ok")
        ToggleButton_RecStop.Value = False
      Endif
     
      'riconnette al volo le sorgenti (se la cosa va gestita dall'applicazione e non dal sistema
      If AutoReconnectSource = True Then
        'non so perche' ma i client mi cambiano nome in modo progressivo .. quindi devo trovare quelli al momento validi per il mio programma
        'quindi scansiono i clienti di jack attivi (ho dato il play alla pipeline quindi c'e' anche il recorder) e mi trovo quelli con il nome
        'simile a quello che ho settato io in init_capture_system .... ovver "client_name" qualcosa
        Shell "jack_lsp" To Risultato
        clienti = Split(Risultato, gb.CrLf)
        For i = 0 To clienti.Count - 1
          If clienti[i] Like ("*" & clientname & "*") Then
            Destinazione.Add(clienti[i], Destinazione.Count)
          Endif
        Next
       
        'a questo punto dovrei avere uno o piu' sink del mio programma che ricevono l'audio dalla sorgente che ho indicato
        Shell "jack_connect " & Replace(FirstJackSource, " ", "\\ ") & " " & Destinazione[0]
        If StereoSource = True Then
          Shell "jack_connect " & GetNextOf(FirstJackSource) & " " & Destinazione[1]
        Endif
       
      Endif
     
      Timer_RecordClock.Start
    Case "stop"
      Try pl.stop
     
      Try Copy User.home & "/" & ClientName & ".ogg" To RealName
     
      Try pl.Close
     
      CheckForFilesToDelete
     
      Timer_RecordClock.Stop 
  End Select
 
End

mentre l'inizializzazione della pipeline si fa cosi' (nel mio programma):
Codice: [Seleziona]
Public Sub InitCaptureSystem()

  Try pl.Stop
  Try pl.close

  Try Recorder_Client.close
  Try audioformat.close
  Try audio_converter.close
  Try lev.close
  Try muxer.close
  Try que1.close
  Try que2.close
  Try que3.close
 
'in teoria dovrebbe funzionare:
'gst-launch-1.0 jackaudiosrc connect=0 client-name="test" ! audioconvert ! avenc_aac ! mp4mux ! filesink location=aac_audio.mp4

  pl = New MediaPipeline As "PipeLine"

  'dico a gstreamer che la sorgente audio e' una sorgente di jack-server
  Recorder_Client = New MediaControl(pl, "jackaudiosrc")
  Recorder_Client["client-name"] = ClientName

  Recorder_Client["connect"] = 0

  audioformat = New MediaFilter(pl, "audio/x-raw,channels=2")
  audio_converter = New MediaControl(pl, "audioconvert")
 
  'qui decidiamo il tipo di encoder
  Select Case encType
    Case "vorbis"
      encoder = New MediaControl(pl, "vorbisenc")
      encoder["name"] = "enc"
      encoder["quality"] = -0.1
    Case "opus"
      encoder = New MediaControl(pl, "opusenc") 'opusenc name=enc bitrate=24000 bitrate-type="vbr"
      encoder["name"] = "enc"
      encoder["bitrate"] = 24000
      encoder["bitrate-type"] = 2 '0=cbr 1=vbr  2=CONSTRAINED_VBR .. che penso sia vbr entro un certo bitrate
    Case "mp3"
      encoder = New MediaControl(pl, "lamemp3enc") 'opusenc name=enc bitrate=24000 bitrate-type="vbr"
      encoder["name"] = "enc"
      encoder["bitrate"] = 32
      encoder["cbr"] = False 'esempi lamemp3enc target=bitrate cbr=true bitrate=192 | lamemp3enc target=quality quality=0
  End Select
 
  lev = New MediaControl(pl, "level")
  lev["message"] = True

  muxer = New MediaControl(pl, "oggmux")
  que1 = New MediaControl(pl, "queue")
  que2 = New MediaControl(pl, "queue")
  que3 = New MediaControl(pl, "queue")

' Parte audio SENZA LIVELLI AUDIO:
  Recorder_Client.LinkTo(audioformat)
  audioformat.LinkTo(audio_converter)
  'audio_converter.LinkTo(encoder)
    'per cercare di estrarre i livelli dell'audio in ingresso invece:
    audio_converter.LinkTo(lev)
    lev.LinkTo(encoder)
  '
   encoder.LinkTo(muxer)
 
End


Public Sub InitSink()
'Dim sink As MediaControl

  Try sink.close

  'se si vuole registrare su file;
  sink = New MediaControl(pl, "filesink")
  'sarebbe da rendere parametrica la path
  sink["location"] = User.Home & "/" & ClientName & ".ogg"
  RealName = RecordingRoot & "/" & ClientName & "_" & Format(Now, "yyyy-mm-dd_hh-nn-ss") & ".ogg"
End

Da super scarsone di C, come faccio a mandare questo fatidico messaggio di EOS alla pipeline?

PS: in allegato l'ultima versione con qualche piccola modifica.

26
A patto di trovare come fare le chiamate... :-\

Le chiamate delle funzioni di quella libreria esterna ?
...ovviamente con Extern, ma non basta: è necessario avere una conoscenza almeno sufficiente del linguaggio C per interpretare e tradurre l'esempio da C in Gambas.

come al solito VUOT :D

.... in ogni caso, ti sei inbarcato in una impresa non banale.

https://golem.linux.it/wiki/Carta_Nazionale_dei_Servizi_e_Firma_Digitale#Debian.2FUbuntu.2FMint

penso che ti tocchera' studiare le librerie linux per la gestione delle smart card e, VOLENDO, scrivere un oggetto gambas, per interfacciarvisi :D

27
Programmazione / Re:Access DB e ODBC
« il: 30 Agosto 2019, 12:15:12 »
Ti ringrazio per i link. A questo punto, sono quindi ad un bivio SQLite  o PostgreSQL ?
Entrambi permettono l'uso in rete?.
Riuscirò a trasferire i dati da un database *.mdb al nuovo database?

POSTGRES? SQLite?

sarebbe il caso di analizzare l'archiettura del tuo sistema per fare una scelta.

evitare come la morte MariaDB in primis, ma tieni a mente che un database sqlite (lite e' un indizio) e' un file a cui si accede con dei metodi "tipo" sql.
E' veloce per pochi dati e non e' molto gestibile la politaica degli accessi (utenti).
un database tipo mysql o postgres invece sono pensati per accesso distribuito attraverso la rete. sono piu' lenti ma scalano meglio con la crescita dei dati.
E' migliore la gestione delle politiche di accesso (utenti e permessi).

PS: in realta', da motore a motore e da implementazione ad implementazione, le affermazioni suddette, non sono sempre vere. Al momento esistono DB sql-less, pensati per applicazioni distribuite (cloud) che sono piu' veloci ed efficienti dei classici mysql :-/

28
Programmazione / Re:avvio programma al boot
« il: 30 Agosto 2019, 12:01:46 »
ora ti porto un po' in giro, non t'offendere, ma mi sembra la tipica richiesta dei miei colleghi:
"non si puo' fare una applicazione che se io voglio cha faccia la cosa A premo il pulsante rosso e se invece volgio fare B esegua B alla pressione del pulsante rosso?"

Gli amici del forum ti hanno dato indicazioni su:
1) come fare in modo che il sistema operativo, dopo il login (eventualmente automatico) dell'utente, faccia partire un programma
2) come far eseguire al programma delle istruzioni a piacimento.
3) come far chiudere l'applicazione per via programmatica (da codice).

A questo punto, devi essere tu a decidere cosa vuoi far fare al programma e come scrivere il codice.

PS: non ti abbattere, ma la presentazione delle SPECIFICHE di un progetto, e' la parte piu' ostica di OGNI problema di ingegneria :D

COMUNQUE, come suggerito da VUOT, se interpreto bene la richiesta nel tuo primo post, tu vuoi che all'avvio della macchina ti si presenti una schermata con le applicazioni da far partire.
Non e' chiaro se vuoi che queste partano (in sequenza o tutte insieme) AL PROSSIMO AVVIO DELLA MACCHINA, oppure, APPENA PREMI "OK".
Se vuoi che la tua scelta (le tue spunte) sopravvivano al riavvio, devi usare l'oggetto gb.settings, e salvare lo "stato" delle tue spunte, prima di chiudere l'applicazione.
Ovviamente dovrai leggere lo stato precedente dai "settings" (od un default se e' la prima esecuzione), appena lanciato il famoso "Form" di selezione/spunta.

29
OpenBar / Un saluto!
« il: 30 Agosto 2019, 11:54:05 »
ciao ragazzi, un saluto post estate :D

mi dispiace di essere sparito, ma sono stato impegnato in altri progetti ed il lato programmazione l'ho lasciato un po' da parte :p

giuro che presto mi rimettero' al lavoro.

un abbraccio

Federico

30
Programmazione / Re:analisi immagine statica
« il: 11 Giugno 2019, 16:57:06 »
ed abbandonare voi?

gia' per lavoro ho dovuto imparare Java ..... :-(

ora mi propongono lavori in c# (non sia mai!).

Se devo proprio mi butto sul c++ ... ma devo dire che i puntatori mi stanno sulle balle :D

Pagine: 1 [2] 3 4 ... 50