当前位置:网站首页>Golang calls sdl2, plays PCM audio, and reports an error signal arrived during external code execution.
Golang calls sdl2, plays PCM audio, and reports an error signal arrived during external code execution.
2022-06-22 06:52:00 【Fuda scaffold constructor's daily question】
golang call sdl2, Play pcm Audio , Report errors signal arrived during external code execution.
win10 x64 The next test was successful , Success is not guaranteed under other operating systems .
It's using syscall The way , No cgo The way .
See address
stay go1.16.15 Compile and execute , The following error will be reported . Switch to go1.18 I won't make a mistake .
Exception 0xc0000005 0x0 0xc000442000 0x7ff96da8db50
PC=0x7ff96da8db50
signal arrived during external code execution
syscall.Syscall6(0x7ff96daa7440, 0x4, 0x20d6354a0a0, 0xc000442000, 0x1000, 0x10, 0x0, 0x0, 0x0, 0x0, …)
D:/Program Files/Go/go1.16.15/src/runtime/syscall_windows.go:347 +0xf2
syscall.(*Proc).Call(0xc000599b40, 0xc0001207c0, 0x4, 0x4, 0x20, 0xa6ffa0, 0x20d6354a001, 0xc0001207c0)
D:/Program Files/Go/go1.16.15/src/syscall/dll_windows.go:188 +0x385
syscall.(*LazyProc).Call(0xc00007fc50, 0xc0001207c0, 0x4, 0x4, 0x3, 0x3, 0x20d6354a0a0, 0x0)
D:/Program Files/Go/go1.16.15/src/syscall/dll_windows.go:339 +0x78
github.com/moonfdd/sdl2-go/sdl.SDL_MixAudio(0x20d6354a0a0, 0xc000442000, 0x1000001000)
D:/mysetup/gopath/src/sdl2-go/sdl/SDL_audio.go:1185 +0xf1
main.fill_audio_pcm(0xc00010ff48, 0x20d6354a0a0, 0x1000, 0x0)
D:/mysetup/gopath/src/sdl2-go/examples/a06-sdl-pcm/main1.go:33 +0x125
goroutine 1 [chan receive]:
main.main()
D:/mysetup/gopath/src/sdl2-go/examples/a06-sdl-pcm/main1.go:66 +0x288
rax 0x20d6354a0a0
rbx 0xc0000086e0
rcx 0x20d6354a0a0
rdi 0xecaa4c3000
rsi 0xc0000439c0
rbp 0xc000043960
rsp 0xecabbffb50
r8 0x8010
r9 0x20d6354b0a0
r10 0x10
r11 0x4
r12 0xa7b800
r13 0x0
r14 0x0
r15 0x2030001
rip 0x7ff96da8db50
rflags 0x10206
cs 0x33
fs 0x53
gs 0x2b
golang The code is as follows :
package main
import (
"fmt"
"github.com/moonfdd/sdl2-go/sdl"
"github.com/moonfdd/sdl2-go/sdlcommon"
"io/ioutil"
"sync"
"syscall"
"unsafe"
)
var o sync.Once
// Audio device callback function
func fill_audio_pcm(udata sdlcommon.FVoidP, stream *sdlcommon.FUint8T, len1 sdlcommon.FInt) uintptr {
info := (*Info)(unsafe.Pointer(udata))
if info.isStop {
return 0
}
if info.Start >= info.Len {
info.isStop = true
o.Do(func() {
ch <- struct{
}{
}
})
return 0
}
sdl.SDL_memset(uintptr(unsafe.Pointer(stream)), 0, uint64(len1))
if len1 > int32(info.Len-info.Start) {
fmt.Println(" Insufficient len", len1, info.Len-info.Start)
len1 = int32(info.Len - info.Start)
}
sdl.SDL_MixAudio(stream, &info.Data[info.Start], uint32(len1), sdl.SDL_MIX_MAXVOLUME/8)
info.Start += int(len1)
return 0
}
var ch = make(chan struct{
}, 1)
func main() {
sdlcommon.SetSDL2Path("SDL2.dll")
var spec sdl.SDL_AudioSpec
sdl.SDL_Init(sdl.SDL_INIT_AUDIO)
spec.Freq = 44100
spec.Format = sdl.AUDIO_S16SYS // Sample point format
spec.Channels = 2 // 2 passageway
spec.Silence = 0
spec.Userdata = uintptr(0)
spec.Samples = 1024 // 23.2ms -> 46.4ms Number of samples per read , How often a callback and samples
spec.Callback = syscall.NewCallback(fill_audio_pcm) // Callback function
fileData, err := ioutil.ReadFile("44100_16bit_2ch.pcm")
if err != nil {
fmt.Println(" Failed to read file ", err)
return
}
info := new(Info)
info.Data = fileData
info.Len = len(fileData)
spec.Userdata = uintptr(unsafe.Pointer(info))
if sdl.SDL_OpenAudio(&spec, nil) != 0 {
fmt.Println(" Failed to open audio device ")
return
}
sdl.SDL_PauseAudio(0)
<-ch
fmt.Println(" close ")
sdl.SDL_CloseAudio()
sdl.SDL_Quit()
}
type Info struct {
Data []byte
Len int
Start int
isStop bool
}
The results are as follows :
边栏推荐
- Introduction to 51 Single Chip Microcomputer -- minimum system of single chip microcomputer
- [5g NR] ng interface
- On the pit of delegatecall of solidity
- [M32] SCM xxx Simple interpretation of map file
- Blog add mailbox private message shortcut
- Xh_CMS渗透测试文档
- [5g NR] ng setup of ngap protocol
- Py之Optbinning:Optbinning的简介、安装、使用方法之详细攻略
- 【5G NR】手机身份证号IMEI与IMEISV
- Five common SQL interview questions
猜你喜欢

JDBC查询结果集,结果集转化成表

Cesium加载3D Tiles模型

自然语言处理理论和应用

Event preview edgex developer summit @ Nanjing station is coming!
![[5g NR] NAS connection management - cm status](/img/a3/c23958ff593f77cdc459bebc3f87d2.png)
[5g NR] NAS connection management - cm status

golang調用sdl2,播放pcm音頻,報錯signal arrived during external code execution。

Introduction to 51 Single Chip Microcomputer -- digital tube

golang调用sdl2,播放pcm音频,报错signal arrived during external code execution。

Five common SQL interview questions

SQL injection vulnerability (XII) cookie injection
随机推荐
IO intensive and CPU intensive
[5g NR] ng setup of ngap protocol
Introduction to 51 single chip microcomputer - matrix key
Stream stream calculation
Literature record (part106) -- graph auto-encoder via neighborhood Wasserstein reconstruction
[M32] single chip microcomputer SVN setting ignore file
C skill tree evaluation - customer first, making excellent products
Cesium loading 3D tiles model
生成字符串方式
Tp6 links to sqlserver, PHP links to sqlserver, and Linux offline installation and deployment
关于solidity的delegatecall的坑
Single cell literature learning (Part3) -- dstg: deconvoluting spatial transcription data through graph based AI
ERROR: cannot verify nih. At's certificate, issued by "/c=us/o=let's encrypt/cn=r3", WGet reports an error
Introduction to PMOD interface of kv260
6. 安装ssh连接工具(用于我们连接实验室的服务器)
Py之Optbinning:Optbinning的简介、安装、使用方法之详细攻略
golang调用sdl2,播放pcm音频,报错signal arrived during external code execution。
The song of cactus - marching into to C live broadcast (2)
C技能树评测——用户至上做精品
Leetcode: interview question 08.12 Eight queens [DFS + backtrack]