Hakusessa olisi ohjelma mikä toistaisi valitun äänitiedoston kun valitun näppäimen päästää ylös.
Esimerkiksi: A-näppäin pohjassa = Ei ääntä A-näppäin ylös = toistaa: /äänet/tuut.wav
Ja ei kiitos mitään aivan kamalaa hepreaa. :D Kaikenlaiset scriptien, cfg:den sun muiden muokkaukset onnistuu mutta ei koodin kirjoitus tai ymmärtäminen.
VB, QB...?
VB 6.0....
Const SND_SYNC = &H0 Const SND_ASYNC = &H1 Const SND_NODEFAULT = &H2 Const SND_MEMORY = &H4 Const SND_LOOP = &H8 Const SND_NOSTOP = &H10 Const SND_PURGE = &H40 Const SND_NOWAIT = &H2000 Private Declare Function PlaySound Lib "winmm.dll" Alias "PlaySoundA" (ByVal lpszName As String, ByVal hModule As Long, ByVal dwFlags As Long) As Long Const SND_ALIAS = &H10000 Const SND_FILENAME = &H20000 Const SND_RESOURCE = &H40004 Private Declare Function waveOutGetNumDevs Lib "winmm.dll" () As Long If waveOutGetNumDevs() <> 0 Then PlaySound sound, 0, SND_ASYNC Private Declare Function GetAsyncKeyState Lib "user32" (ByVal vKey As Long) As Integer If waveOutGetNumDevs() <> 0 And GetAsyncKeyState(38) Then PlaySound sound, 0, SND_ASYNC
Joku laittoi tämän tapaista koodia vinkiksi eräällä toisella foorumilla. Itse en osaa katsoa onko tuossa järkeä, teiltä varmaan saa ihan suomeksi selvennystä. :P
(Mod. Edit. Kooditagit.)
'API-määrittelyt
Private Declare Function PlaySound Lib "winmm.dll" Alias "PlaySoundA" (ByVal lpszName As String, ByVal hModule As Long, ByVal dwFlags As Long) As Long
'PlaySoundia käytetään wav-tiedoston soittamiseen
Private Declare Function GetAsyncKeyState Lib "user32" (ByVal vKey As Long) As Integer
'GetASynckeyStatea käytetään näppäinpainallusten havaitsemiseen
Private Sub Form_Load()
Timer1.Interval = 1 'Vaihdetaan Timer1.Interval 1 millisekkaan
End Sub
Private Sub Timer1_Timer()
If GetAsyncKeyState(65) = False Then 'A-näppäimen näppäinkoodi on 65, eli jos A-näppäintä ei paineta, niin:
PlaySound "C:\tuut.wav", 0, 0 'soitetaan tuut.wav
End SubEli tää ohjelma soittaa jatkuvasti C:\tuut.wav-tiedostoo, ellei A-näppäin ole pohjassa. Formi tarvii siis Timer1-nimisen timerin.
Mutta tarviiko tuota Timeria jos se halutaan vain kerran soittaa sen jälkeen kun näppäimestä on päästetty? Käykö siihen joku Loop = false tai joku jos haluaa sen loppuvan yhden soittokerran jälkeen? Siis että ohjelma ei sulkeutuisi, vaan että ääni loppuisi kunnes äänen pituus loppuu kesken tai painetaan uudestaan sitä näppäintä? Entä mistä mä löydän sen että millä numerolla mikäkin näppäin toimii? Laskemalla vasemmasta yläkulmasta eteenpäin vai? =D
Sori näistä "nuubimaisista" kysymyksistä, muttakun ensimmäistä kertaa yritän saada jotain aikaiseksi jollain ihan oikealla ohjelmointihässäkällä. :)
Edit: Siis että jos Timer menee millisekunneissa, niin se ei vaikuta siihen soiko ääni kuinka monta kertaa? Vai meinaatko Timerilla että se soittaisi vain kerran, ja siihen tarttis sitä?
Edit2: Tuohon näppäimen koodiin se valittaa että: Invalid outside procedure
Kaiketi puuttuu pätkä jotain kriittistä koodia? =P
Näppäinkoodit löytyy täältä
Joku muu varmaan jaksaa vastailla..Nukkumaan ->
EDIT: Jep...tota vikaa End Subia ennen pitäis tulla End If
Tuolta ei löydy näppäinkoodia ylöspäin nuolelle, mikä on kuitenkin yksi kriittisistä osista tätä koko juttua :F
Juu :DD
On se siellä, 38.
Aaa hitto niin onkin. Mutta mitä tuo Invalid outside procedure meinaa ;o
Se tarkoittaa, että joku "proseduuri"/koodi/w.e ei oo subin/funktion sisällä. Tosta koodipätkästä puuttu siis End If, eli sen pitäis näyttää tältä
'API-määrittelyt
Private Declare Function PlaySound Lib "winmm.dll" Alias "PlaySoundA" (ByVal lpszName As String, ByVal hModule As Long, ByVal dwFlags As Long) As Long
'PlaySoundia käytetään wav-tiedoston soittamiseen
Private Declare Function GetAsyncKeyState Lib "user32" (ByVal vKey As Long) As Integer
'GetASynckeyStatea käytetään näppäinpainallusten havaitsemiseen
Private Sub Form_Load()
Timer1.Interval = 1 'Vaihdetaan Timer1.Interval 1 millisekkaan
End Sub
Private Sub Timer1_Timer()
If GetAsyncKeyState(65) = False Then 'A-näppäimen näppäinkoodi on 65, eli jos A-näppäintä ei paineta, niin:
PlaySound "C:\tuut.wav", 0, 0 'soitetaan tuut.wav
End If
End SubTollasena se toimi mulla.
Pitää kokeilla...
Nonii =D Nyt kuullostaa hyvältä. Miten tuon looppauksen saa menemään vain kerran?
Joku End Loop If juttu? :o
Taisikin löytyä tuo satunnaisjuttu jo...
Hmm... Eli jos otan Timerin pois ton looppauksenkin pitäisi jäädä pois? Ellen kasvata Intervalia vaikka miljoonaan millisekuntiin? :p
Edit: Äääh, nyt kun sitä kasvattaa menee vain pidempään ennenkuin ääni toistuu kun päästää näpykästä irti.
Teidän on varmaan hauska lukea näitä muiden ongelmia :D
Miten ton Looppauksen saa jäämään pois mutta että tuo äänitiedosto kuitenkin toistuisi uusiksi sen jälkeen kun sitä valittua nappulaa on taas painettu ja nostettu ylös ja että äänen toisto loppuisi kun painaa sitä nappulaa taas :f
Sori kun pyytelen täällä valmista koodia.. Muttakun mä en itse osaa tätä melkein ollenkaan. Mutta olisi kiva kun joku tekisi tuon koodin valmiiksi ja minä muokkaisin sen lopulliseen oikeaan muotoon (tiedostojen dir:t ja nimet)
Oli miten oli, kiitos kuitenkin :D
No täs olis yks tapa, mut nyt ei oo GetAsyncKeyState käytössä vaan KeyPress-aliohjelma. Eli tää tarvii ohjelman fokuksen.
Private Declare Function PlaySound Lib "winmm.dll" Alias "PlaySoundA" (ByVal lpszName As String, ByVal hModule As Long, ByVal dwFlags As Long) As Long
Private Sub Form_KeyPress(nappi As Integer)
If nappi = 97 Then 'jos formissa painetaan A-näppäintä, niin...
If Timer1.Enabled = True Then 'ja jos Timer1 on käytössä, ni...
Timer1.Enabled = False 'poistetaan se käytöstä
Else
Timer1.Enabled = True 'tai jos se on jo pois käytöstä, ni laitetaa se päälle
End If
End If
End Sub
Private Sub Form_Load()
Timer1.Interval = 1
End Sub
Private Sub Timer1_Timer()
PlaySound "C:\tuut.wav", 0, 0 'soitetaa "C:\tuut.wav"
End SubToi koodi siis ottaa timer1:n aina käyttöön (tai ottaa pois käytöstä), ku A-näppäintä painetaa formilla.
KeyPressillä ei vaan taida nuolinäppäinten lukeminen onnistua (?), ja nää vois helpottaa oppimista vähä.
Ei toimi halutulla tavalla tuo.. =/ Toi olisi muuten tosi hyvä, muttakun tuo on on/off tyyppinen. Kun sen pitäisi kutakuinkin mennä näin:
Ylöspäin nuolinäppäin pohjassa = Ei kuulu mitään.
Ylöspäin nuolinäppäin ylhäällä = Toistaa *.wav tiedoston kerran.
Ja se on varmaan hankalaa saada toimimaan samaan aikaan kun jokin peli on päällä...
"Iiiisiii, miksei susta tullu Pill Keitsiä" : D
Ja mulla on tuo VB-Käsikirja, ihan kirjana kirjana. Ja olen yrittänyt katsoa Koodivinkeistä noista *.wav tiedostojen toistosta mallia. Ja kyllä varmaan ymmärrätte että kun ei sinänsä ohjelmointihommat kiinnosta, niin sitä on vaikea lähteä harjoittelemaan... Ainoa syy minkä takia tämänkin "yritän" "opetella", on että koitan vain saada eräästä pelistä sellaisen kuin haluan sen olevan. Samasta syystä olen olen noiden scriptejen sun muiden muokkausta "harjoitellut".
No olipahan avautuminen :D
Toi aikaisempi olisi paljon parempi, jos sen vain saisi lopettamaan sen äänen looppaamisen sen yhden kerran jälkeen.
pohjassa: ratatatatatatataatatatata ylös: tuut
taas pohjaan: ratatatatatatatatata ylös: tuut
:D
Kuulepa, omaakin ajattelua suositellaan. Haluat, että ääni soi, kun nappi nostetaan ylös. VB:ssä on KeyUp-tapahtuma, eikö olekin? Olisiko se siis ehkä loogisempi paikka äänen soittamiselle?
Tänään aamulla vasta pari tuntia harjoittelin tuota, so there`s more to learn. Pitää katsoa jos tuosta käsikirjasta löytyisi juttua siitä KeyUp:sta :P
En saa KeyUp:ia toimimaan...
Private Declare Function PlaySound Lib "winmm.dll" Alias "PlaySoundA" (ByVal lpszName As String, ByVal hModule As Long, ByVal dwFlags As Long) As Long
Private Sub Form_KeyUp()
End Sub
If Form_KeyUp(38) Then
PlaySound "\scaniaturbosurge.wav", 0, 0
End If
End SubKokeilepa tätä koodia:
Private Declare Function PlaySound Lib "winmm.dll" Alias "PlaySoundA" (ByVal lpszName As String, ByVal hModule As Long, ByVal dwFlags As Long) As Long
Private Sub Form_KeyUp(KeyCode As Integer, Shift As Integer)
If KeyCode = vbKeyUp Then
PlaySound "c:\oma\testi.wav", 0, 0
End If
End Sub
Private Sub Form_Load()
KeyPreview = True
End SubVakio vbKeyUp tarkoittaa samaa kuin luku 38, tuosta vain näkee selvemmin, mitä näppäintä tutkitaan.
Toistaa kuten pitääkin! Muttamutta, mä en haluaisi masentaa ketään, mutta nyt tuo ei sitten taas sitten toimi jos on joku toinen ikkuna auki sen päällä, eli tuota ei saa alapalkkiin piiloon ja peliä auki siihen päälle niin, että se toistaisi tuon äänen vaikka on se peli auki. =/
Tähän mennessä parhain idea on ollut tuo Time1.Interval muttakun se looppaa sitä äänitiedostoa kokoajan jos ei paina ylöspäin nuolta pohjassa.
Hankala juttu.
Entä osaako joku tehdä tuollaisen koodin jollain muulla kielellä? Ei sen pakko ole VB olla, tuo vaan nyt on koneella.
Tämän pitäisi soittaa ääni, kun lopettaa näppäimen painamisen:
Private Declare Function PlaySound Lib "winmm.dll" Alias "PlaySoundA" (ByVal lpszName As String, ByVal hModule As Long, ByVal dwFlags As Long) As Long
Private Declare Function GetAsyncKeyState Lib "user32" (ByVal vKey As Long) As Integer
Private Sub Form_Load()
Timer1.Interval = 50
GetAsyncKeyState vbKeyUp
End Sub
Private Sub Timer1_Timer()
Static muutos As Boolean
If GetAsyncKeyState(vbKeyUp) And 1 Then
muutos = True
End If
If GetAsyncKeyState(vbKeyUp) = 0 And muutos Then
PlaySound "c:\oma\testi.wav", 0, 0
muutos = False
End If
End SubJee!! Kiitos =DD Toimii aivan kuten pitääkin =D
Erittäin suuret kiitokset tästä.
Aihe on jo aika vanha, joten et voi enää vastata siihen.