cs_darunia
Messages postés354Date d'inscriptionmercredi 18 décembre 2002StatutMembreDernière intervention24 mars 2011
-
23 août 2006 à 20:12
cs_darunia
Messages postés354Date d'inscriptionmercredi 18 décembre 2002StatutMembreDernière intervention24 mars 2011
-
24 août 2006 à 09:52
Salut,
Je cherche un equivalent de la fonction Beep, sauf que le son doit sortir sur les hauts parleurs (pas systeme).
J'aimerais eviter le DirectX.
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201579 23 août 2006 à 20:28
Salut
Cherche PlaySound parmi les codes du site. C'est une API hyper simple à utiliser.
Tu n'auras plus qu'à lui fournir un fichier WAV de ton choix qui fera Beep, Blurp, Smack ou Zuiiiip, comme tu veux !
Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés
Champion du monde de boule de cristal - 2005 Le savoir est la seule matière qui s'accro
cs_darunia
Messages postés354Date d'inscriptionmercredi 18 décembre 2002StatutMembreDernière intervention24 mars 20112 23 août 2006 à 20:31
Le truc, c'est que je ne veux pas lire un fichier wav !!!
Je veux avoir le meme fonctionnement qu'avec la fonction beep.
Enfin avec DarkSidious, Jack et EB, il devrait avoir moyen de trouver !
PCPT
Messages postés13272Date d'inscriptionlundi 13 décembre 2004StatutMembreDernière intervention 3 février 201847 23 août 2006 à 22:29
salut,
essaye quelquechose dans ce goût là peut-être....
(dans un module, puis faire Call Beeep)
Option Explicit
'
'-> ferme le port midi
Private Declare Function midiOutClose Lib "winmm.dll" (ByVal hMidiOut As Long) As Long
'
'-> ouvre un port midi
Private Declare Function midiOutOpen Lib "winmm.dll" _
(lphMidiOut As Long, ByVal uDeviceID As Long, ByVal dwCallback As Long, _
ByVal dwInstance As Long, ByVal dwFlags As Long) As Long
'
'-> envoie un message à un port midi ouvert
Private Declare Function midiOutShortMsg Lib "winmm.dll" _
(ByVal hMidiOut As Long, ByVal dwMsg As Long) As Long
'
'-> fait une pause pour un temps donné
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
'
'
Public Sub Beeep()
Dim lMidiOut As Long
' ferme le port pour arrêter l'ancienne note
Call midiOutClose(lMidiOut)
' ouvre une nouvelle entrée
Call midiOutOpen(lMidiOut, 0&, 0&, 0&, 0&)
PCPT
Messages postés13272Date d'inscriptionlundi 13 décembre 2004StatutMembreDernière intervention 3 février 201847 23 août 2006 à 22:51
salut,
oui, voir les commentaires...
il suffit de changer la valeur (long) de dwMsg (API midiOutShortMsg) pour l'instrument, la note, et dwMilliseconds pour la durée (API Sleep)
++
<hr size="2" width="100%" />Prenez un instant pour répondre à ce sondage svp
PCPT
Messages postés13272Date d'inscriptionlundi 13 décembre 2004StatutMembreDernière intervention 3 février 201847 23 août 2006 à 23:27
on s'éloigne pas mal de ta demande de départ non?.....
regarde dans les sources genre "piano" etc....
je n'ai pas trop l'oreille musicale ni même de diapason.
fait des essais ou regarde sur le net s'il existe des tables de conversion long >> solfège....
<hr size="2" width="100%" />Prenez un instant pour répondre à ce sondage svp
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201579 23 août 2006 à 23:39
Re
Ce que tu n'as pas dit mais que ma boule magique a su détecter, c'est que tu ne voulais pas de fichier annexe pour ce son.
Pour cela, il te suffit de placer le fichier WAV (son contenu) dans un fichier de ressources qui sera incorporé à ton EXE, puis d'appeler ce son directement en mémoire :
Dans un module, place ceci :
' No Device carte Son (pour savoir si elle existe)
Private Declare Function waveOutGetNumDevs Lib "winmm.dll" () As Long
' Version mémoire
Private Declare Function sndPlaySoundmem Lib "winmm.dll" Alias "PlaySoundA" ( _
ByVal lpszName As Long, _
ByVal hModule As Long, _
ByVal dwFlags As Long) As Long
Private Const SND_SYNC As Long = &H0 ' Attend que le son soit joué pour revenir
Private Const SND_ASYNC As Long = &H1 ' Démarre le son et reviens
Private Const SND_NODEFAULT As Long = &H2 ' Si problème, n'émettra pas de bip
Private Const SND_MEMORY As Long = &H4 ' Le son est en mémoirePrivate Const SND_LOOP As Long &H8 ' Joue en boucle (arrêt sndPlaySound(Null, SND_SYNC)
Private Const SND_NOSTOP As Long = &H10 ' N'interrompt pas le son en cours
Private Const SND_NOWAIT As Long = &H2000 ' N'attend pas après le driver si occupé
Public Sub JoueSonMémoire()
' Joue un son pour attirer l'attention (depuis ressource)
Dim bCarteSon As Boolean
Dim sSonMessage() As Byte
Dim Ret As Boolean
On Error Resume Next
' Test s'il existe une carte son
bCarteSon = False
If waveOutGetNumDevs <> 0 Then bCarteSon = True
' Définit le fichier son
sSonMessage = LoadResData(4013, "SON.MESSAGE")
' Joue le son
If bCarteSon Then Ret = sndPlaySoundmem(VarPtr(sSonMessage(0)), _
0, _
SND_NOWAIT Or SND_NODEFAULT Or SND_MEMORY Or SND_ASYNC)
End Sub
Bien sûr, il faudra que tu adaptes le 4013 et "SON.MESSAGE" aux données que tu saisiras quand tu ajouteras un fichier WAV dans les ressources 'personnalisées'.
Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés
Champion du monde de boule de cristal - 2005 Le savoir est la seule matière qui s'accro
chaibat05
Messages postés1883Date d'inscriptionsamedi 1 avril 2006StatutMembreDernière intervention20 novembre 20072 24 août 2006 à 00:15
je ne veux pas lire un fichier
J'aurais juste a creér le fichier selon la frequence voulue par l'utilisateur et le lire !
http://www.cppfrance.com/auteur/GABUZOMEUH/143528.aspx ?????????????????????????????????????????????????????????????????????????????????????????
cs_darunia
Messages postés354Date d'inscriptionmercredi 18 décembre 2002StatutMembreDernière intervention24 mars 20112 24 août 2006 à 09:52
Oui. Je vais utiliser cette methode, car je ne n'en ai pas trouvé d'autres et je pense que c'est la seule solution.
Apres, il est peut etre possible de construire le wav en mémoire et de le lire, sans forcement ecrire sur le disque.