Newsgroup: it.comp.appl.access
Titolo: segnale esterno

Access 97: in una applicazione a un certo punto faccio fare un BEEP al 
verificarsi di una certa situazione.
 
Il beep non basta (ambiente industriale) e mi serve una segnalazione 
esterna, o con un altoparlante o con una luce esterna.
 
Che strumenti mi offre Access? Posso comandare una scheda audio oppure 
una scheda con su un rele'?
 
grazie
 
 
 


ACcess di suo non fa nulla, come qualsiasi altra applicazione.
Per pilotare periferiche hai pochi mezzi, la seriale oppure un driver
della scheda, se espone com interface o le sue api.
 
@Alex

 della scheda, se espone com interface o le sue api.
 
mm, lo temevo. Grazie anyway!
 

 
"lucio munazio planco" <planco@XIII_Legio.it> ha scritto nel messaggio 
news:klbre0$13m$1...@speranza.aioe.org...

Ciao.
 
Ma, per "segnalazione esterna con altoparlante" e "comandare una scheda 
audio" intendi far eseguire un file audio?
Questo si pu� fare con delle API: ti copio-incollo una funzione (non � 
farina del mio sacco). Vedi sotto.
Colleghi alla scheda audio delle casse da autoscontri e spari al volume che 
ti pare.
 
Fammi sapere se ho capito la tua necessit�.
 
Grazie.
 
Ciao
 
Silvio
 
 
'******* inizio codice *******
Option Compare Database
Option Explicit
 
'This code was originally written by Dev Ashish.
'It is not to be altered or distributed,
'except as part of an application.
'You are free to use it in any application,
'provided the copyright notice is left unchanged.
 
'Code courtesy of
'Dev Ashish
 
Public Const pcsSYNC = 0      ' wait until sound is finished playing
Public Const pcsASYNC = 1     ' don't wait for finish
Public Const pcsNODEFAULT = 2 ' play no default sound if sound doesn't exist
Public Const pcsLOOP = 8      ' play sound in an infinite loop (until next 
apiPlaySound)
Public Const pcsNOSTOP = 16   ' don't interrupt a playing sound
 
'Sound APIs
Private Declare Function apiPlaySound Lib "Winmm.dll" Alias "sndPlaySoundA" 
_
    (ByVal lpszSoundName As String, ByVal uFlags As Long) As Long
 
'AVI APIs
Private Declare Function apimciSendString Lib "Winmm.dll" Alias 
"mciSendStringA" _
    (ByVal lpstrCommand As String, ByVal lpstrReturnString As String, _
    ByVal uReturnLength As Long, ByVal hwndCallback As Long) As Long
 
Private Declare Function apimciGetErrorString Lib "Winmm.dll" _
    Alias "mciGetErrorStringA" (ByVal dwError As Long, _
    ByVal lpstrBuffer As String, ByVal uLength As Long) As Long
 
 
Function fPlayStuff(ByVal strFileName As String, _
            Optional intPlayMode As Integer) As Long
'MUST pass a filename _with_ extension
'Supports Wav, AVI, MID type files
Dim lngret As Long
Dim strTemp As String
 
    Select Case LCase(fGetFileExt(strFileName))
        Case "wav":
            If Not IsMissing(intPlayMode) Then
                lngret = apiPlaySound(strFileName, intPlayMode)
            Else
                MsgBox "Must specify play mode."
                Exit Function
            End If
        Case "avi", "mid":
            strTemp = String$(256, 0)
            lngret = apimciSendString("play " & strFileName, strTemp, 255, 
0)
    End Select
    fPlayStuff = lngret
End Function
 
Function fStopStuff(ByVal strFileName As String)
'Stops a multimedia playback
Dim lngret As Long
Dim strTemp As String
    Select Case LCase(fGetFileExt(strFileName))
        Case "Wav":
            lngret = apiPlaySound(0, pcsASYNC)
        Case "avi", "mid":
            strTemp = String$(256, 0)
            lngret = apimciSendString("stop " & strFileName, strTemp, 255, 
0)
    End Select
    fStopStuff = lngret
End Function
 
Private Function fGetFileExt(ByVal strFullPath As String) As String
Dim intPos As Integer, intLen As Integer
    intLen = Len(strFullPath)
    If intLen Then
        For intPos = intLen To 1 Step -1
            'Find the last \
            If Mid$(strFullPath, intPos, 1) = "." Then
                fGetFileExt = Mid$(strFullPath, intPos + 1)
                Exit Function
            End If
        Next intPos
    End If
End Function
 
Function fGetError(ByVal lngErrNum As Long) As String
    ' Translate the error code to a string
    Dim lngX As Long
    Dim strErr As String
 
    strErr = String$(256, 0)
    lngX = apimciGetErrorString(lngErrNum, strErr, 255)
    strErr = left$(strErr, Len(strErr) - 1)
    fGetError = strErr
End Function
 
Function fatest()
Dim a As Long
    a = fStopStuff("C:\winnt\clock.avi")
End Function
 
Function WavPlay()
Dim a As Long
    a = fPlayStuff("C:\TuoFile.wav")
End Function
 
Function WavDone()
Dim a As Long
    a = fPlayStuff("C:\Done.wav")
End Function
 
'******* fine codice ******* 
 
 

 End Function
 
Il tuo codice ha funzionato perfettamente! grazie mille.
 
AH, gia' che ci sono: prima del tuo codice mettevo il normale "Beep". Ho 
letto l'help, che riporta un esempio in cui fa tre beep con un ciclo for 
.. next. Tutto banale tranne che, nonostante il ciclo e l'help, si sente 
un beep solo. Come mai?
 
 
 
 
 

 della scheda, se espone com interface o le sue api.
 
E se invece delle API usiamo delle vespe?
 
Call Shell("C:\VideoLAN\VLC\vlc.exe C:\Fernando.wav")
 
Bruno
 
 


Ma in quel modo serve un'altoparlantone gigante....!!!
 
Scherzi a parte, se il suo intento è di far sentire la segnalazione in
ambiente industriale(premessa del 3D) questa soluzione è come quella
di silvio, assolutamente inutile.
 
Il PC dal quale si opera non è nemmeno detto sia in zona di
segnalazione, anzi di solito è proprio il contrario...!
 
Io lavoro in ambiente industriale, e i segnali li attiviamo con dei
Remote(I/O) disolcati nei posti opportuni, che attivano lampeggiatori
e/o segnalazioni acustiche per le quali servono TROMBE con oltre 120Db
di emissione sonora... altrimenti non si sente nulla.
 
Gli impianti più efficaci sono i FITRE, che fungono sia da interfoni,
che da allarme acustico,... ma mi dilungo troppo e sono certo che solo
chi è del settore può capire le vere problematiche di cui parlo...!
 
Per il resto, le vespe sono ottime la 50 special poi ha fatto la
storia.
 
@Alex

 chi ï¿œ del settore puï¿œ capire le vere problematiche di cui parlo...!
 
Capisco...
 
Quel che volevo dire ï¿œ che mi pare molto facile portar fuori da un 
computer un segnale audio, che poi per certi usi dovrï¿œ essere 
opportunamente amplificato, etc.
 
Piï¿œ complicato invece portar fuori una tensione continua in modalitï¿œ 
ON-OFF in grado di azionare un micro relï¿œ che a sua volta consenta di 
eccitare un altro relï¿œ, etc.
 
Anche perchï¿œ ormai di porte seriali-parallele, nei PC convenzionali, ne 
son rimaste poche.
Chissï¿œ se ï¿œ possibile via software interrompere in modalitï¿œ ON-OFF i 
5VDC a una porta USB...
 
Bruno
 
 

 Bruno
 
@Alex

 Questa non ï¿œ scienzzzzaaa come dice Zikikkiiiiki
Continua a stupirmi il fatto che via software (ï¿œ il sistema operativo 
che le controlla) le singole porte USB possano essere considerate 
SEMPRE o NON SEMPRE alimentate e che tale alternativa non sia possibile 
selezionare con VBA o altro linguaggio.
 
Bruno
 
 

 un beep solo. Come mai?
 
...mah, credo che il sistema lanci i tre beep in maniera talmente 
ravvicinata che se ne percepisce uno solo.
 
Grazie.
 
Ciao