audio :: EXCEPTION_ACCESS_VIOLATION :: Solved

BlitzMax Forums/BlitzMax Beginners Area/audio :: EXCEPTION_ACCESS_VIOLATION :: Solved

MOBii(Posted 2014) [#1]
No problem in Debug MODE
But when I make a Release and try run the Application I get: "EXCEPTION_ACCESS_VIOLATION"
SuperStrict

Framework brl.System
Import maxgui.Drivers
Import brl.EventQueue
Import brl.audio

Local MyWindow:TGadget=CreateWindow("Sound", 40,40,400,400)

Global Snd:TSound = LoadSound("sound/Plopp.wav")
Global Ch:TChannel


Ch = CueSound(Snd)          ' This make the VIOLATION
Ch.SetVolume .25
Ch.SetPaused False



Repeat
	WaitEvent()
	Select EventID()
		Case EVENT_WINDOWCLOSE End
	End Select
Forever
What I do wrong?


Brucey(Posted 2014) [#2]
You can check if Snd is Null or not. If it's Null, CueSound() will probably break.

You may also wish to import BRL.WAVLoader.


MOBii(Posted 2014) [#3]
Import brl.WAVLoader FIX the EXCEPTION_ACCESS_VIOLATION
Snd is Not Null
(it's work fine in Debug MODE, but still quiet in the final Release .exe)
SuperStrict

Framework brl.System
Import maxgui.Drivers
Import brl.EventQueue
Import brl.audio
Import brl.WAVLoader

Local Wello:TGadget=CreateWindow("Sound", 400, 200, 400, 400)

Global Snd:TSound = LoadSound("LEVER2.wav")
Global Ch:TChannel

If Snd = Null Then
	SetStatusText Wello, "No Sound"
Else
	SetStatusText Wello, "OK Sound"		' Snd is not Null
End If

Ch = CueSound(Snd)
Ch.SetVolume .25
Ch.SetPaused False

Repeat
	WaitEvent()
	Select EventID()
		Case EVENT_WINDOWCLOSE End
	End Select
Forever
I try put sound in root directory and change to another sound still quiet


Brucey(Posted 2014) [#4]
Try importing BRL.FreeAudioAudio instead of BRL.Audio.


GfK(Posted 2014) [#5]
I had intermittent problems with audio - I think it was on Mac, but anyway. I found this to be the best way of playing sounds as it cured the problem I was having (sound not playing).
Global Ch:TChannel = AllocChannel()
Global Snd:TSound = LoadSound("LEVER2.wav")

CueSound(Snd, Ch)
Ch.SetVolume(0.25)
Ch.SetPaused(False)



MOBii(Posted 2014) [#6]
If I remove SuperStrict and only use:
Import maxgui.Drivers it was working but the .exe file become 5.5 times bigger
I import 1 at a time until I find the True Love..
Import brl.WAVLoader
Import brl.directsoundaudio

was the magical
SuperStrict

Framework brl.System
Import maxgui.Drivers
Import brl.EventQueue
Import brl.WAVLoader
Import brl.directsoundaudio

Local Wello:TGadget = CreateWindow("Sound Test", 400, 200, 400, 400)
Local MOBii:TGadget

Global Ch:TChannel
Global Snd:TSound = LoadSound("LEVER2.wav")

If Snd = Null Then
	SetStatusText Wello, "No Sound"
Else
	SetStatusText Wello, "Sound Loaded"		' Snd is not Null
End If

MOBii = CreateMenu("&MOBii", 0, WindowMenu(Wello))
CreateMenu "Sound &A",	1, MOBii, KEY_F5
CreateMenu "Sound &B",	2, MOBii, KEY_F6
CreateMenu "Sound &C",	3, MOBii, KEY_F7
CreateMenu "E&xit", 0, MOBii, KEY_ESCAPE 		' , MODIFIER_COMMAND
UpdateWindowMenu Wello


'PlaySound(Snd).SetVolume(.1)
 
Repeat
	WaitEvent()
	Select EventID()
		Case EVENT_WINDOWCLOSE End
			Case EVENT_MENUACTION
				Select EventData()
					Case 0	End
					Case 1
						Ch = CueSound(Snd)
						Ch.SetVolume .25
						Ch.SetPaused(False)
						SetStatusText Wello, "1 >>" + Ch.toString()
				Case 2
						Local C:TChannel = CueSound(Snd)
						C.SetVolume .25
						C.SetPaused(False)
						SetStatusText Wello, "2 >>" + C.toString()
				Case 3
						PlaySound(Snd).SetVolume(.1)
						SetStatusText Wello, "3 >>"
				End Select

	End Select

Forever
Ch = CueSound(Snd, Ch) Look like it play on one Channel only!
Ch = CueSound(Snd) automatically allocates Snd on a new channel.

I learned that PlaySound allocates a new channel when start playing + I can set the sound volume ^^
PlaySound(Snd).SetVolume(.1)


xlsior(Posted 2014) [#7]
Since importing all modules does make it work for you, it sounds like there still a missing import somewhere -- you may want to try Framework Assistant to help you determine which modules are necessary for your program.


MOBii(Posted 2014) [#8]
thanks