Ist gb stumm?

Spezielle Fragen zu 2D- und 3D-Grafik, Sound und Video
Antworten
basicwurm
Foriker
Beiträge: 39
Registriert: Di 8. Jan 2013, 16:59
Kontaktdaten:

Ist gb stumm?

Beitrag von basicwurm » So 10. Jul 2016, 17:53

Hallo Gambistas!
Das klassische Basic-"Beep" finde ich nicht in gb und auch print "\a" und print CHR$(7) funktioniert nicht. Auf Rosettacode listet man die Funktion in vielen Sprachen, nur nicht in gb.
Im Forum habe ich nur eine Frage von roemi gefunden (11.12.2005) mit offensichtlich unbefriedigendem Ergebnis.
Wie quietscht man einfach auf Gambasisch?

Benutzeravatar
gambi
Moderator
Beiträge: 318
Registriert: Mi 8. Mai 2013, 21:46
Kontaktdaten:

Re: Ist gb stumm?

Beitrag von gambi » So 10. Jul 2016, 18:58

Hallo basicwurm,
mit den Komponeneten gb.media und gb.sdl2.audio (beide aktivieren) kannst du eigene Sounds abspielen.
gambas code
Public Sub PlaySound()

       Music.Load("Pfad_zu_deiner_Sounddatei")
       Music.Play()

End
gg

basicwurm
Foriker
Beiträge: 39
Registriert: Di 8. Jan 2013, 16:59
Kontaktdaten:

Re: Ist gb stumm?

Beitrag von basicwurm » Di 12. Jul 2016, 11:59

Vielen Dank, gambi!
Funktioniert bestens, sogar mit "Alle meine Entchen..."

Benutzeravatar
gambi
Moderator
Beiträge: 318
Registriert: Mi 8. Mai 2013, 21:46
Kontaktdaten:

Re: Ist gb stumm?

Beitrag von gambi » Mi 13. Jul 2016, 19:59

Prima, das ist ja deutlich mehr als ein "Beep" :wink:
gg

vuott
Foriker
Beiträge: 82
Registriert: Fr 16. Jan 2015, 01:27
Kontaktdaten:

Re: Ist gb stumm?

Beitrag von vuott » Di 7. Aug 2018, 15:23

If you want not to use audio file, you can try this code by activating gb.openal Component:
gambas code
Private Const AMPIEZZA As Byte = 127
Private Const FREQUENZA As Short = 880
Private Const CAMPIONAMENTO As Integer = 44100
Private Const DURATA As Single = 0.15


Public Sub Main()
 
 Dim disp As AlcDevice
 Dim cont As AlcContext
 Dim src, buffer As Integer[]
 Dim err As Boolean
 Dim dati As New Byte[]
   
  disp = Alc.OpenDevice(Null)
  If IsNull(disp) Then Error.Raise("Error !")
  
  cont = Alc.CreateContext(disp)
  If IsNull(cont) Then Error.Raise("Error !")
  
  err = cont.MakeCurrent()
  If err = False Then Error.Raise("Error !")
  
  src = Al.GenSources(1)
  If IsNull(src) Then Error.Raise("Error !")
  
  buffer = Al.GenBuffers(1)
  If IsNull(buffer) Then Error.Raise("Error !")
  
  Onda(dati)
  
  Al.BufferData(buffer[0], al.FORMAT_MONO8, dati.Data, dati.Count, CAMPIONAMENTO)
 
  Al.Sourcei(src[0], Al.BUFFER, buffer[0])
  
  Al.SourcePlay(src[0])
  
  Sleep DURATA
  
  al.SourceStop(src[0])
  
  Al.DeleteBuffers(buffer)
  Al.DeleteSources(src)
  Alc.DestroyContext(cont)
  Alc.CloseDevice(disp)
  
End


Private Function Onda(bb As Byte[])
 
 Dim i As Integer
  
  For i = 0 To (DURATA * 2 * CAMPIONAMENTO) - 1
    bb.Push(CByte(128 + AMPIEZZA * Sin(CFloat(i / CAMPIONAMENTO * FREQUENZA * (2 * Pi)))))
  Next
  
End

Antworten

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 2 Gäste