added wolf's code
[swamp-bikeopera:code.git] / src / swamp_playd
1 #!/usr/bin/lua
2
3 package.path = package.path..";/home/startx/projects/swamp-machine/trunk/src/?.lua;/home/startx/projects/swamp-machine/trunk/lib/?.lua"
4
5 package.cpath = package.cpath..";/home/startx/projects/swamp-machine/trunk/src/?.so;/home/startx/projects/swamp-machine/trunk/lib/?.so"
6
7
8 -- create an audio device using default parameters and exit in case of errors
9 require("proAudioRt")
10 require("posix")
11 require("socket")
12
13 print("starting player")
14 posix.mkfifo("/tmp/dodo")
15
16 dofile '/home/startx/projects/swamp-machine/trunk/config/swamp.conf'
17
18 if not proAudio.create( 8, 44000, 1024 ) then 
19    os.exit() 
20 end
21
22 --- initialize the sample and sound table
23     sample = {}
24     sound = {}
25
26 -- PITCHES
27
28 print("pre-loading")
29 start_load = os.time()
30 -- PRELOADING
31 sample[1] = proAudio.sampleFromFile(CONFIG.install_path.."audio/1.ogg")
32 print("1")
33 sample[2] = proAudio.sampleFromFile(CONFIG.install_path.."audio/2.ogg")
34 print("2")
35 sample[3] = proAudio.sampleFromFile(CONFIG.install_path.."audio/3.ogg")
36 print("3")
37 sample[4] = proAudio.sampleFromFile(CONFIG.install_path.."audio/4.ogg")
38 print("4")
39 sample[5] = proAudio.sampleFromFile(CONFIG.install_path.."audio/5.ogg")
40 print("5")
41 sample[6] = proAudio.sampleFromFile(CONFIG.install_path.."audio/6.ogg")
42 print("6")
43 sample[7] = proAudio.sampleFromFile(CONFIG.install_path.."audio/7.ogg")
44 print("7")
45 sample[8] = proAudio.sampleFromFile(CONFIG.install_path.."audio/8.ogg")
46 print("8")
47 sample[9] = proAudio.sampleFromFile(CONFIG.install_path.."audio/9.ogg")
48 print("9")
49 sample[10] = proAudio.sampleFromFile(CONFIG.install_path.."audio/10.ogg")
50 print("10")
51 sample[31] = proAudio.sampleFromFile(CONFIG.install_path.."audio/31.ogg")
52 sample[32] = proAudio.sampleFromFile(CONFIG.install_path.."audio/32.ogg")
53 sample[33] = proAudio.sampleFromFile(CONFIG.install_path.."audio/33.ogg")
54 sample[34] = proAudio.sampleFromFile(CONFIG.install_path.."audio/34.ogg")
55 sample[35] = proAudio.sampleFromFile(CONFIG.install_path.."audio/35.ogg")
56 sample[36] = proAudio.sampleFromFile(CONFIG.install_path.."audio/36.ogg")
57 sample[37] = proAudio.sampleFromFile(CONFIG.install_path.."audio/37.ogg")
58 sample[38] = proAudio.sampleFromFile(CONFIG.install_path.."audio/38.ogg")
59 sample[39] = proAudio.sampleFromFile(CONFIG.install_path.."audio/39.ogg")
60 print("pre-loading finished")
61 print("took "..os.time() - start_load.." seconds.")
62
63
64 PITCH = { slow = 0.5 ,
65
66 normal = 1.0 , 
67
68 fast = 2.0 ,
69
70 }
71
72 local file = io.open("/tmp/dodo","r")
73
74
75 while true do
76   socket.sleep(0.5)
77   local line = file:read()
78   if line then
79
80     local message , n = string.match(line, "^(.-)%s(.-)$")
81     print(message, n)
82     local n = tonumber(n)
83
84   if n and message then
85
86     if message == "play" then
87          if not sound[n] then
88             --sample[n] = proAudio.sampleFromFile(CONFIG.install_path.."audio/"..n..".ogg")
89             sound[n] = proAudio.soundPlay(sample[n])
90          else
91             print("sound "..n.." allready playing")
92          end
93
94     elseif message == "loop" then
95          if not sound[n] then
96             --sample[n] = proAudio.sampleFromFile(CONFIG.install_path.."audio/"..n..".ogg")
97             sound[n] = proAudio.soundLoop(sample[n])
98          else
99             print("sound "..n.." allready playing")
100          end
101
102    elseif message == "play_right" then
103          if not sound[n] then
104             --sample[n] = proAudio.sampleFromFile(CONFIG.install_path.."audio/"..n..".ogg")
105             sound[n] = proAudio.soundPlay(sample[n])
106             proAudio.soundUpdate( sound[n], 0.0, 2.0, 0.0, 1.0 )
107          else
108             print("sound "..n.." allready playing")
109          end
110
111    elseif message == "play_left" then
112          if not sound[n] then
113             --sample[n] = proAudio.sampleFromFile(CONFIG.install_path.."audio/"..n..".ogg")
114             sound[n] = proAudio.soundPlay(sample[n])
115             proAudio.soundUpdate( sound[n], 2.0, 0.0, 0.0, 1.0 )
116          else
117             print("sound "..n.." allready playing")
118          end
119
120
121     elseif message == "stop" then
122          if n == 100 then
123             for z = 1, 22 do
124                if sound[n] then
125                 proAudio.soundStop(sound[n])
126                 sound[n] = false
127                end
128             end
129          else
130
131          if sound[n] then
132              proAudio.soundStop(sound[n])
133              sound[n] = false
134          end
135
136          end
137
138     elseif message == "right" then
139           if sound[n] then
140              proAudio.soundUpdate( sound[n], 0.0, 2.0, 0.0, 1.0 )
141              --posix.sleep(1)
142           end
143
144     elseif message == "left" then
145          if sound[n] then
146              proAudio.soundUpdate( sound[n], 2.0, 0.0, 0.0, 1.0 )  
147              --posix.sleep(2)
148          end
149
150     elseif message == "slow" then
151          if sound[n] then
152              proAudio.soundUpdate( sound[n], 1.0, 1.0, 0.0, 0.5 )
153              --posix.sleep(1)
154          end
155
156     elseif message == "normal" then
157          if sound[n] then
158              proAudio.soundUpdate( sound[n], 1.0, 1.0, 0.0, 1.0 )
159              --posix.sleep(1)
160          end
161
162     elseif message == "fast" then
163          if sound[n] then
164              proAudio.soundUpdate( sound[n], 1.0, 1.0, 0.0, 2.0 )
165              --posix.sleep(1)
166          end
167
168
169     elseif message == "fadeout" then
170              for i= 1 , 0 , -0.1 do
171                  proAudio.soundUpdate( sound[n], i, i, 0.0, 1.0  )
172                  socket.sleep(0.5)
173              end
174           proAudio.soundStop(sound[n])
175           sound[n] = false
176     else
177          print("invalid message")
178     end    
179
180    else 
181     print("invalid or missing parameter")
182    end
183
184   end
185
186
187
188 end
189
190 os.remove("/tmp/dodo")
191 print("exit")