小编Mil*_*anV的帖子

Go,OpenAL,DirectSound和Heisenbug

我已经杀了一个星期试图在我的一个项目中解决一个神秘的问题,我没有想法.

我写了一个Go包,打算播放包含OpenAL的声音......非常基本的东西.我让它在我的Xubuntu 14.04(32位)上工作,所以我启动到Windows(7,也是32位)以便移植它......这就是问题开始的地方.

每当我尝试使用我的音频包时,该程序就会崩溃,并使用c0000005.我试图通过gdb运行它,并惊讶地发现它没有问题,它甚至播放我的测试声音.

时间过去了,不知道该怎么做,我下载了OpenAL Soft源代码并开始添加printfs - 并发现它崩溃的确切行:

http://repo.or.cz/w/openal-soft.git/blob/HEAD:/Alc/backends/dsound.c#l361

对于那些懒得点击链接(或链接停止工作),这是对DirectSoundCreate的调用.再次运行调试器,我在调用之前和之后看到了我的打印,并且在它们之间创建了4个新线程.

这些是Go文件中的相关内容:

package audio

/*
#cgo CFLAGS: -I"../libraries/include"

#cgo windows,386 LDFLAGS: ../libraries/lib/windows/x86/OpenAL32.dll
#cgo windows,amd64 LDFLAGS: ../libraries/lib/windows/x64/OpenAL32.dll
#cgo linux LDFLAGS: -lopenal

#include "audio.h"
*/
import "C"
import (
    "errors"
)

var context *C.ALCcontext

func Init() error {
    context = C.initAudio() // it crashes on this line
    if context == nil {
        return errors.New("could not initialize audio")
    }

    SetActiveListener(NewListener())

    return nil
}
Run Code Online (Sandbox Code Playgroud)

这是实际进行OpenAL调用的C文件:

#include "audio.h"

#include <string.h>
#include <stdio.h>

ALCcontext* initAudio() {
    ALCdevice* …
Run Code Online (Sandbox Code Playgroud)

openal directsound go

9
推荐指数
1
解决办法
937
查看次数

标签 统计

directsound ×1

go ×1

openal ×1