/
main.go
110 lines (91 loc) · 2.39 KB
/
main.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
package main
import (
"flag"
"log"
"runtime"
"github.com/krig/Go-SDL2/sdl"
"github.com/krig/Go-SDL2/ttf"
"github.com/krig/go-sox"
"github.com/mattn/go-gtk/gtk"
"github.com/mattn/go-gtk/glib"
)
func openFileDialog(callback func(filename string)) {
filechooserdialog := gtk.NewFileChooserDialog(
"Choose File",
nil,
gtk.FILE_CHOOSER_ACTION_OPEN,
gtk.STOCK_OK,
gtk.RESPONSE_ACCEPT)
filter := gtk.NewFileFilter()
filter.AddPattern("*.wav")
filter.AddPattern("*.mp3")
filechooserdialog.AddFilter(filter)
filechooserdialog.Response(func() {
callback(filechooserdialog.GetFilename())
filechooserdialog.Destroy()
})
filechooserdialog.Show()
}
func main() {
runtime.LockOSThread()
// Parse command line
flag.Parse()
tracks := []string{}
if flag.NArg() > 0 {
tracks = flag.Args()[0:]
}
log.Println("Tracks: ", tracks)
// Init libSoX and SDL
if !sox.Init() {
log.Fatal("Failed to init sox")
}
defer sox.Quit()
einfo := sox.GetEncodingsInfo()
log.Println("Supported encodings:")
for _, e := range einfo {
log.Printf("%s: %s (%x)\n", e.Name, e.Desc, e.Flags)
}
effects := sox.GetEffectHandlers()
log.Println("Supported effects:")
for _, e := range effects {
log.Printf("%s: %s (%x)\n", e.Name(), e.Usage(), e.Flags())
}
if sdl.Init(sdl.INIT_NOPARACHUTE|sdl.INIT_VIDEO|sdl.INIT_EVENTS) != 0 {
log.Fatal(sdl.GetError())
}
defer sdl.Quit()
gtk.Init(nil)
//sdl.GL_SetAttribute(sdl.GL_CONTEXT_MAJOR_VERSION, 2)
//sdl.GL_SetAttribute(sdl.GL_CONTEXT_MINOR_VERSION, 1)
//sdl.GL_SetAttribute(sdl.GL_DOUBLEBUFFER, 1)
//sdl.GL_SetAttribute(sdl.GL_DEPTH_SIZE, 24)
window, renderer := sdl.CreateWindowAndRenderer(640, 480,
sdl.WINDOW_SHOWN | sdl.WINDOW_OPENGL | sdl.RENDERER_ACCELERATED | sdl.RENDERER_PRESENTVSYNC)
if (window == nil) || (renderer == nil) {
log.Fatal(sdl.GetError())
}
//window.GL_CreateContext()
if ttf.Init() != 0 {
log.Fatal(sdl.GetError())
}
defer window.Destroy()
defer renderer.Destroy()
defer ttf.Quit()
window.SetTitle("Podcast Studio")
log.Println("Video Driver:", sdl.GetCurrentVideoDriver())
// Jump to studio.go
//run_studio(window, renderer, tracks)
screen := studioSetup(window, renderer, tracks)
defer screen.rsc.Free()
defer screen.Destroy()
loop := glib.NewMainLoop(nil, false)
glib.IdleAdd(func() bool {
ret := studioUpdate(window, renderer, screen)
if !ret {
loop.Quit()
return false
}
return true
})
loop.Run()
}