Merge lp:~michael-sheldon/jokosher/windows_port into lp:jokosher
- windows_port
- Merge into main
Proposed by
Michael Sheldon
Status: | Merged | ||||
---|---|---|---|---|---|
Merged at revision: | not available | ||||
Proposed branch: | lp:~michael-sheldon/jokosher/windows_port | ||||
Merge into: | lp:jokosher | ||||
Diff against target: | None lines | ||||
To merge this branch: | bzr merge lp:~michael-sheldon/jokosher/windows_port | ||||
Related bugs: |
|
Reviewer | Review Type | Date Requested | Status |
---|---|---|---|
Jokosher Code | Pending | ||
Review via email: mp+4935@code.launchpad.net |
Commit message
Description of the change
To post a comment you must log in.
Preview Diff
[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1 | === modified file 'Jokosher/ControlsBox.py' |
2 | --- Jokosher/ControlsBox.py 2007-07-10 22:25:55 +0000 |
3 | +++ Jokosher/ControlsBox.py 2009-02-25 12:39:22 +0000 |
4 | @@ -54,16 +54,16 @@ |
5 | self.muteImgEnabled = Utils.GetIconThatMayBeMissing("stock_volume-mute", gtk.ICON_SIZE_BUTTON, False) |
6 | |
7 | self.recTip = gtk.Tooltips() |
8 | - self.recButton = gtk.ToggleButton("") |
9 | + self.recButton = gtk.ToggleButton() |
10 | self.recTip.set_tip(self.recButton, self.recTipEnabled, None) |
11 | self.recButton.connect("toggled", self.OnArm) |
12 | |
13 | - self.muteButton = gtk.ToggleButton("") |
14 | + self.muteButton = gtk.ToggleButton() |
15 | self.muteButton.connect("toggled", self.OnMute) |
16 | self.muteTip = gtk.Tooltips() |
17 | self.muteTip.set_tip(self.muteButton, self.muteTipDisabled, None) |
18 | |
19 | - self.soloButton = gtk.ToggleButton("") |
20 | + self.soloButton = gtk.ToggleButton() |
21 | self.soloTip = gtk.Tooltips() |
22 | self.soloTip.set_tip(self.soloButton, self.soloTipDisabled, None) |
23 | self.soloButton.connect("toggled", self.OnSolo) |
24 | |
25 | === modified file 'Jokosher/Event.py' |
26 | --- Jokosher/Event.py 2009-02-18 03:05:16 +0000 |
27 | +++ Jokosher/Event.py 2009-03-19 23:28:10 +0000 |
28 | @@ -22,6 +22,7 @@ |
29 | import Globals |
30 | import gettext |
31 | import urllib |
32 | +import PlatformUtils |
33 | |
34 | from elements.singledecodebin import SingleDecodeBin |
35 | _ = gettext.gettext |
36 | @@ -51,7 +52,7 @@ |
37 | } |
38 | |
39 | """ The level sample interval in seconds """ |
40 | - LEVEL_INTERVAL = 0.01 |
41 | + LEVEL_INTERVAL = 0.1 |
42 | LEVELS_FILE_EXTENSION = ".leveldata" |
43 | NANO_TO_MILLI_DIVISOR = gst.SECOND / 1000 |
44 | |
45 | @@ -161,9 +162,9 @@ |
46 | |
47 | Globals.debug("creating SingleDecodeBin") |
48 | caps = gst.caps_from_string("audio/x-raw-int;audio/x-raw-float") |
49 | - f = "file://" + self.file |
50 | + f = PlatformUtils.pathname2url(self.file) |
51 | + Globals.debug("file uri is:", f) |
52 | self.single_decode_bin = SingleDecodeBin(caps=caps, uri=f) |
53 | - Globals.debug("file uri is:", f) |
54 | self.gnlsrc.add(self.single_decode_bin) |
55 | Globals.debug("setting event properties:") |
56 | propsDict = { |
57 | @@ -212,7 +213,7 @@ |
58 | self.instrument.project.deleteOnCloseAudioFiles.remove(self.file) |
59 | |
60 | self.temp = self.file |
61 | - if os.path.samefile(self.instrument.project.audio_path, os.path.dirname(self.file)): |
62 | + if PlatformUtils.samefile(self.instrument.project.audio_path, os.path.dirname(self.file)): |
63 | # If the file is in the audio dir, just include the filename, not the absolute path |
64 | self.file = os.path.basename(self.file) |
65 | |
66 | @@ -772,10 +773,14 @@ |
67 | """ |
68 | Renders the level information for the GUI. |
69 | """ |
70 | - pipe = """filesrc name=src location=%s ! decodebin ! audioconvert ! level interval=%d message=true ! fakesink""" |
71 | - |
72 | - pipe = pipe % (self.file.replace(" ", "\ "), self.LEVEL_INTERVAL * gst.SECOND) |
73 | + pipe = """filesrc name=src ! decodebin ! audioconvert ! level message=true name=level_element ! fakesink""" |
74 | self.loadingPipeline = gst.parse_launch(pipe) |
75 | + |
76 | + filesrc = self.loadingPipeline.get_by_name("src") |
77 | + level = self.loadingPipeline.get_by_name("level_element") |
78 | + |
79 | + filesrc.set_property("location", self.file) |
80 | + level.set_property("interval", int(self.LEVEL_INTERVAL * gst.SECOND)) |
81 | |
82 | self.bus = self.loadingPipeline.get_bus() |
83 | self.bus.add_signal_watch() |
84 | @@ -798,14 +803,25 @@ |
85 | Copies the audio file to the new file location and reads the levels |
86 | at the same time. |
87 | """ |
88 | - if not gst.element_make_from_uri(gst.URI_SRC, uri): |
89 | + |
90 | + urisrc = gst.element_make_from_uri(gst.URI_SRC, uri) |
91 | + if not urisrc: |
92 | #This means that here is no gstreamer src element on the system that can handle this URI type. |
93 | return False |
94 | |
95 | - pipe = """%s ! tee name=mytee mytee. ! queue ! filesink location=%s """ +\ |
96 | - """mytee. ! queue ! decodebin ! audioconvert ! level interval=%d message=true ! fakesink""" |
97 | - pipe = pipe % (urllib.quote(uri,":/"), self.file.replace(" ", "\ "), self.LEVEL_INTERVAL * gst.SECOND) |
98 | + pipe = """tee name=mytee mytee. ! queue ! filesink name=sink """ +\ |
99 | + """mytee. ! queue ! decodebin ! audioconvert ! level name=level_element message=true ! fakesink""" |
100 | self.loadingPipeline = gst.parse_launch(pipe) |
101 | + |
102 | + tee = self.loadingPipeline.get_by_name("mytee") |
103 | + filesink = self.loadingPipeline.get_by_name("sink") |
104 | + level = self.loadingPipeline.get_by_name("level_element") |
105 | + |
106 | + self.loadingPipeline.add(urisrc) |
107 | + urisrc.link(tee) |
108 | + |
109 | + filesink.set_property("location", self.file) |
110 | + level.set_property("interval", int(self.LEVEL_INTERVAL * gst.SECOND)) |
111 | |
112 | self.bus = self.loadingPipeline.get_bus() |
113 | self.bus.add_signal_watch() |
114 | |
115 | === modified file 'Jokosher/EventLaneViewer.py' |
116 | --- Jokosher/EventLaneViewer.py 2009-02-15 23:11:00 +0000 |
117 | +++ Jokosher/EventLaneViewer.py 2009-03-19 23:28:10 +0000 |
118 | @@ -15,6 +15,7 @@ |
119 | from EventViewer import * |
120 | import os.path |
121 | import gettext |
122 | +import PlatformUtils |
123 | import urllib # To decode URI's |
124 | import Globals # To get projectfolder |
125 | import ui.EventLaneHSeparator as EventLaneHSeparator |
126 | @@ -300,8 +301,9 @@ |
127 | if event: |
128 | #if we we're called from a mouse click, use the mouse position as the start |
129 | start = (self.mouseDownPos[0]/self.project.viewScale) + self.project.viewStart |
130 | - |
131 | - self.instrument.AddEventsFromList(start, filenames) |
132 | + |
133 | + uris = [PlatformUtils.pathname2url(filename) for filename in filenames] |
134 | + self.instrument.AddEventsFromList(start, uris) |
135 | |
136 | #_____________________________________________________________________ |
137 | |
138 | |
139 | === modified file 'Jokosher/Globals.py' |
140 | --- Jokosher/Globals.py 2009-02-23 00:47:21 +0000 |
141 | +++ Jokosher/Globals.py 2009-03-19 23:39:14 +0000 |
142 | @@ -18,6 +18,7 @@ |
143 | import gobject, gtk |
144 | import xdg.BaseDirectory |
145 | import shutil |
146 | +import PlatformUtils |
147 | |
148 | import gettext |
149 | _ = gettext.gettext |
150 | @@ -37,7 +38,7 @@ |
151 | "windowheight" : 550, |
152 | "windowwidth" : 900, |
153 | } |
154 | - |
155 | + |
156 | recording = { |
157 | "fileformat": "flacenc", |
158 | "file_extension": "flac", |
159 | @@ -45,13 +46,17 @@ |
160 | "audiosrc" : "gconfaudiosrc", |
161 | "device" : "default" |
162 | } |
163 | + # Overwrite with platform specific settings |
164 | + recording.update( PlatformUtils.GetRecordingDefaults() ) |
165 | |
166 | playback = { |
167 | "devicename": "default", |
168 | "device": "default", |
169 | "audiosink":"autoaudiosink" |
170 | } |
171 | - |
172 | + # Overwrite with platform specific settings |
173 | + playback.update( PlatformUtils.GetPlaybackDefaults() ) |
174 | + |
175 | extensions = { |
176 | "extensions_blacklist": "" |
177 | } |
178 | @@ -699,6 +704,7 @@ |
179 | |
180 | SAMPLE_RATES = [8000, 11025, 22050, 32000, 44100, 48000, 96000, 192000] |
181 | |
182 | + |
183 | PLAYBACK_BACKENDS = [ |
184 | (_("Autodetect"), "autoaudiosink"), |
185 | (_("Use GNOME Settings"), "gconfaudiosink"), |
186 | @@ -706,6 +712,8 @@ |
187 | ("OSS", "osssink"), |
188 | ("JACK", "jackaudiosink"), |
189 | ("PulseAudio", "pulsesink"), |
190 | + ("Direct Sound", "directsoundsink"), |
191 | + ("Core Audio", "osxaudiosink") |
192 | ] |
193 | |
194 | CAPTURE_BACKENDS = [ |
195 | @@ -714,6 +722,8 @@ |
196 | ("OSS", "osssrc"), |
197 | ("JACK", "jackaudiosrc"), |
198 | ("PulseAudio", "pulsesrc"), |
199 | + ("Direct Sound", "dshowaudiosrc"), |
200 | + ("Core Audio", "osxaudiosrc") |
201 | ] |
202 | |
203 | """ Default Instruments """ |
204 | |
205 | === modified file 'Jokosher/Instrument.py' |
206 | --- Jokosher/Instrument.py 2009-02-18 03:05:16 +0000 |
207 | +++ Jokosher/Instrument.py 2009-03-19 23:28:10 +0000 |
208 | @@ -15,6 +15,7 @@ |
209 | import pygst |
210 | pygst.require("0.10") |
211 | import gst |
212 | +import PlatformUtils |
213 | import os, time, shutil |
214 | import urlparse # To split up URI's |
215 | import gobject |
216 | @@ -199,7 +200,7 @@ |
217 | self.volumeElement.link(self.levelElement) |
218 | self.levelElement.link(self.panElement) |
219 | self.panElement.link(self.resample) |
220 | - |
221 | + |
222 | self.playghostpad = gst.GhostPad("src", self.resample.get_pad("src")) |
223 | self.playbackbin.add_pad(self.playghostpad) |
224 | |
225 | @@ -541,7 +542,7 @@ |
226 | |
227 | Parameters: |
228 | start -- the offset time in seconds for the first event. |
229 | - fileList -- paths or URIs to the Event files. |
230 | + fileList -- URIs to the Event files. |
231 | copyfile -- True = copy the files to Project's audio directory. |
232 | False = don't copy the files to the Project's audio directory. |
233 | """ |
234 | @@ -555,6 +556,7 @@ |
235 | # Parse the uri, and continue only if it is pointing to a local file |
236 | (scheme, domain, file, params, query, fragment) = urlparse.urlparse(uri, "file", False) |
237 | if scheme == "file": |
238 | + file = PlatformUtils.url2pathname(file) |
239 | event = self.addEventFromFile(start, file, copyFile, _undoAction_=undoAction) |
240 | else: |
241 | event = self.addEventFromURL(start, uri, _undoAction_=undoAction) |
242 | |
243 | === modified file 'Jokosher/JokosherApp.py' |
244 | --- Jokosher/JokosherApp.py 2009-02-19 01:48:34 +0000 |
245 | +++ Jokosher/JokosherApp.py 2009-03-19 23:28:10 +0000 |
246 | @@ -27,6 +27,7 @@ |
247 | import InstrumentConnectionsDialog, StatusBar |
248 | import EffectPresets, Extension, ExtensionManager |
249 | import Utils, AudioPreview, MixdownProfileDialog, MixdownActions |
250 | +import PlatformUtils |
251 | |
252 | #========================================================================= |
253 | |
254 | @@ -1462,7 +1463,8 @@ |
255 | displayed to user detailing the error. |
256 | """ |
257 | try: |
258 | - self.SetProject(ProjectManager.LoadProjectFile(path)) |
259 | + uri = PlatformUtils.pathname2url(path) |
260 | + self.SetProject(ProjectManager.LoadProjectFile(uri)) |
261 | return True |
262 | except ProjectManager.OpenProjectError, e: |
263 | self.ShowOpenProjectErrorDialog(e,parent) |
264 | |
265 | === modified file 'Jokosher/NewProjectDialog.py' |
266 | --- Jokosher/NewProjectDialog.py 2008-12-18 19:07:15 +0000 |
267 | +++ Jokosher/NewProjectDialog.py 2009-03-19 23:28:10 +0000 |
268 | @@ -12,7 +12,7 @@ |
269 | import gtk.glade |
270 | import os |
271 | import ProjectManager |
272 | -import pwd |
273 | +import PlatformUtils |
274 | import Globals |
275 | import gettext |
276 | _ = gettext.gettext |
277 | @@ -75,17 +75,9 @@ |
278 | self.templatecombo.add_attribute(text, "text", 0) |
279 | |
280 | self.templatecombo.set_active(0) |
281 | - |
282 | + |
283 | # Default author to name of currently logged in user |
284 | - try: |
285 | - # Try to get the full name if it exists |
286 | - fullname = pwd.getpwuid(os.getuid())[4].split(",")[0] |
287 | - if fullname == "": |
288 | - fullname = pwd.getpwuid(os.getuid())[0] |
289 | - self.author.set_text(fullname) |
290 | - except: |
291 | - # If we can't get the fullname, then just use the login |
292 | - self.author.set_text(pwd.getpwuid(os.getuid())[0]) |
293 | + self.author.set_text(PlatformUtils.getFullName()) |
294 | |
295 | self.okbutton = self.res.get_widget("okButton") |
296 | self.okbutton.set_flags(gtk.CAN_DEFAULT) |
297 | @@ -132,13 +124,15 @@ |
298 | if not author: |
299 | author = _("Unknown Author") |
300 | |
301 | - folder = self.folder.get_current_folder() |
302 | + # CreateNewProject expects a URI |
303 | + folder = PlatformUtils.pathname2url(self.folder.get_current_folder()) |
304 | + |
305 | # Save the selected folder as the default folder |
306 | Globals.settings.general["projectfolder"] = folder |
307 | Globals.settings.write() |
308 | if not folder: |
309 | folder = "~" |
310 | - |
311 | + |
312 | try: |
313 | project = ProjectManager.CreateNewProject(folder, name, author) |
314 | except ProjectManager.CreateProjectError, e: |
315 | |
316 | === added directory 'Jokosher/PlatformUtils' |
317 | === added file 'Jokosher/PlatformUtils/Unix.py' |
318 | --- Jokosher/PlatformUtils/Unix.py 1970-01-01 00:00:00 +0000 |
319 | +++ Jokosher/PlatformUtils/Unix.py 2009-03-19 23:39:14 +0000 |
320 | @@ -0,0 +1,33 @@ |
321 | + |
322 | + |
323 | +import os, os.path, urllib |
324 | +import pwd |
325 | + |
326 | + |
327 | +def getFullName(): |
328 | + try: |
329 | + # Try to get the full name if it exists |
330 | + fullname = pwd.getpwuid(os.getuid())[4].split(",")[0] |
331 | + if fullname == "": |
332 | + fullname = pwd.getpwuid(os.getuid())[0] |
333 | + return fullname |
334 | + except: |
335 | + # If we can't get the fullname, then just use the login |
336 | + return pwd.getpwuid(os.getuid())[0] |
337 | + |
338 | +def samefile(path1, path2): |
339 | + return os.path.samefile(path1, path2) |
340 | + |
341 | + |
342 | +def url2pathname(url): |
343 | + return urllib.url2pathname(url) |
344 | + |
345 | +def pathname2url(path): |
346 | + return "file://%s" % urllib.pathname2url(path) |
347 | + |
348 | +def GetRecordingDefaults(): |
349 | + return dict() |
350 | + |
351 | +def GetPlaybackDefaults(): |
352 | + return dict() |
353 | + |
354 | |
355 | === added file 'Jokosher/PlatformUtils/Windows.py' |
356 | --- Jokosher/PlatformUtils/Windows.py 1970-01-01 00:00:00 +0000 |
357 | +++ Jokosher/PlatformUtils/Windows.py 2009-03-19 23:39:14 +0000 |
358 | @@ -0,0 +1,33 @@ |
359 | + |
360 | + |
361 | +import urllib |
362 | + |
363 | + |
364 | +def getFullName(): |
365 | + #TODO: Work out how to get the fullname in windows |
366 | + return "" |
367 | + |
368 | +def samefile(path1, path2): |
369 | + return path1 == path2 |
370 | + |
371 | +def url2pathname(url): |
372 | + return urllib.url2pathname(url) |
373 | + |
374 | +def pathname2url(path): |
375 | + #Windows pathname2url appends // to the front of the path |
376 | + return "file:%s" % urllib.pathname2url(path) |
377 | + |
378 | +def GetRecordingDefaults(): |
379 | + defaults = { |
380 | + "fileformat": "vorbisenc ! oggmux", |
381 | + "file_extension": "ogg", |
382 | + "audiosrc" : "dshowaudiosrc" |
383 | + } |
384 | + return defaults |
385 | + |
386 | + |
387 | +def GetPlaybackDefaults(): |
388 | + defaults = { |
389 | + "audiosink": "directsoundsink" |
390 | + } |
391 | + return defaults |
392 | |
393 | === added file 'Jokosher/PlatformUtils/__init__.py' |
394 | --- Jokosher/PlatformUtils/__init__.py 1970-01-01 00:00:00 +0000 |
395 | +++ Jokosher/PlatformUtils/__init__.py 2009-03-19 23:44:15 +0000 |
396 | @@ -0,0 +1,10 @@ |
397 | + |
398 | +import platform |
399 | + |
400 | +system = platform.system() |
401 | + |
402 | +if system == "Windows": |
403 | + from Windows import * |
404 | +else: |
405 | + from Unix import * |
406 | + |
407 | |
408 | === modified file 'Jokosher/Project.py' |
409 | --- Jokosher/Project.py 2009-03-17 02:09:31 +0000 |
410 | +++ Jokosher/Project.py 2009-03-26 15:07:44 +0000 |
411 | @@ -15,7 +15,7 @@ |
412 | pygst.require("0.10") |
413 | import gst |
414 | import gobject |
415 | -import os |
416 | +import os, os.path |
417 | import gzip |
418 | import re |
419 | |
420 | @@ -27,6 +27,7 @@ |
421 | import Utils |
422 | import AudioBackend |
423 | import ProjectManager |
424 | +import PlatformUtils |
425 | |
426 | #========================================================================= |
427 | |
428 | @@ -392,13 +393,20 @@ |
429 | else: |
430 | capsString = "audioconvert" |
431 | |
432 | - pipe = "%s ! %s ! level name=recordlevel interval=%d" +\ |
433 | - " ! audioconvert ! %s ! filesink location=%s" |
434 | - pipe %= (recordString, capsString, event.LEVEL_INTERVAL * gst.SECOND, encodeString, event.file.replace(" ", "\ ")) |
435 | + # TODO: get rid of this entire string; do it manually |
436 | + pipe = "%s ! %s ! level name=recordlevel ! audioconvert ! %s ! filesink name=sink" |
437 | + pipe %= (recordString, capsString, encodeString) |
438 | |
439 | Globals.debug("Using pipeline: %s" % pipe) |
440 | |
441 | recordingbin = gst.parse_bin_from_description(pipe, False) |
442 | + |
443 | + filesink = recordingbin.get_by_name("sink") |
444 | + level = recordingbin.get_by_name("recordlevel") |
445 | + |
446 | + filesink.set_property("location", event.file) |
447 | + level.set_property("interval", int(event.LEVEL_INTERVAL * gst.SECOND)) |
448 | + |
449 | #update the levels in real time |
450 | handle = self.bus.connect("message::element", event.recording_bus_level) |
451 | |
452 | @@ -605,15 +613,21 @@ |
453 | if instr.inTrack == index: |
454 | event = instr.GetRecordingEvent() |
455 | |
456 | + # TODO: get rid of string concatentation |
457 | encodeString = Globals.settings.recording["fileformat"] |
458 | - pipe = "queue ! audioconvert ! level name=recordlevel interval=%d !" +\ |
459 | - "audioconvert ! %s ! filesink location=%s" |
460 | - pipe %= (event.LEVEL_INTERVAL * gst.SECOND, encodeString, event.file.replace(" ", "\ ")) |
461 | + pipe = "queue ! audioconvert ! level name=recordlevel ! audioconvert ! %s ! filesink name=sink" |
462 | + pipe %= encodeString |
463 | |
464 | encodeBin = gst.parse_bin_from_description(pipe, True) |
465 | bin.add(encodeBin) |
466 | pad.link(encodeBin.get_pad("sink")) |
467 | |
468 | + filesink = bin.get_by_name("sink") |
469 | + level = bin.get_by_name("recordlevel") |
470 | + |
471 | + filesink.set_property("location", event.file) |
472 | + level.set_property("interval", int(event.LEVEL_INTERVAL * gst.SECOND)) |
473 | + |
474 | handle = self.bus.connect("message::element", event.recording_bus_level) |
475 | |
476 | # since we are adding the encodebin to an already playing pipeline, sync up there states |
477 | @@ -812,6 +826,8 @@ |
478 | os.remove(path + "~") |
479 | else: |
480 | #if the saving doesn't fail, move it to the proper location |
481 | + if os.path.exists(path): |
482 | + os.remove(path) |
483 | os.rename(path + "~", path) |
484 | |
485 | self.emit("undo") |
486 | @@ -1306,10 +1322,12 @@ |
487 | """ |
488 | if not undoAction: |
489 | undoAction = self.NewAtomicUndoAction() |
490 | - |
491 | + |
492 | + uris = [PlatformUtils.pathname2url(filename) for filename in fileList] |
493 | + |
494 | name, type, pixbuf, path = [x for x in Globals.getCachedInstruments() if x[1] == "audiofile"][0] |
495 | instr = self.AddInstrument(name, type, _undoAction_=undoAction) |
496 | - instr.AddEventsFromList(0, fileList, copyFile, undoAction) |
497 | + instr.AddEventsFromList(0, uris, copyFile, undoAction) |
498 | |
499 | #_____________________________________________________________________ |
500 | |
501 | |
502 | === modified file 'Jokosher/ProjectManager.py' |
503 | --- Jokosher/ProjectManager.py 2009-03-17 02:09:31 +0000 |
504 | +++ Jokosher/ProjectManager.py 2009-03-26 15:07:44 +0000 |
505 | @@ -14,6 +14,7 @@ |
506 | import Project, Instrument, Event |
507 | import xml.dom.minidom as xml |
508 | import traceback |
509 | +import PlatformUtils |
510 | |
511 | def CreateNewProject(projecturi, name, author): |
512 | """ |
513 | @@ -33,6 +34,8 @@ |
514 | |
515 | (scheme, domain,folder, params, query, fragment) = urlparse.urlparse(projecturi, "file", False) |
516 | |
517 | + folder = PlatformUtils.url2pathname(folder) |
518 | + |
519 | if scheme != "file": |
520 | # raise "The URI scheme used is invalid." message |
521 | raise CreateProjectError(5) |
522 | @@ -114,6 +117,8 @@ |
523 | # raise "The URI scheme used is invalid." message |
524 | raise OpenProjectError(1, scheme) |
525 | |
526 | + projectfile = PlatformUtils.url2pathname(projectfile) |
527 | + |
528 | Globals.debug("Attempting to open:", projectfile) |
529 | |
530 | if not os.path.exists(projectfile): |
531 | |
532 | === modified file 'Jokosher/Utils.py' |
533 | --- Jokosher/Utils.py 2009-03-12 15:26:43 +0000 |
534 | +++ Jokosher/Utils.py 2009-03-16 10:02:30 +0000 |
535 | @@ -16,8 +16,11 @@ |
536 | import Globals |
537 | |
538 | import gst |
539 | -if gst.pygst_version >= (0, 10, 10): |
540 | +try: |
541 | import gst.pbutils |
542 | + have_pbutils = True |
543 | +except: |
544 | + have_pbutils = False |
545 | |
546 | # the highest range in decibels there can be between any two levels |
547 | DECIBEL_RANGE = 80 |
548 | @@ -125,7 +128,7 @@ |
549 | if not channelLevels: |
550 | return 0 |
551 | |
552 | - negInf = float("-inf") |
553 | + negInf = -1E+5000 |
554 | peaktotal = 0 |
555 | for peak in channelLevels: |
556 | #if peak > 0.001: |
557 | @@ -380,8 +383,8 @@ |
558 | #_____________________________________________________________________ |
559 | |
560 | def HandleGstPbutilsMissingMessage(message, callback, x_window_id=0): |
561 | - # pbutils was wrapped in 0.10.10 |
562 | - if gst.pygst_version < (0, 10, 10): |
563 | + # Not all platforms have pbutils |
564 | + if not have_pbutils: |
565 | return False |
566 | |
567 | #self._installing_plugins = True |
568 | |
569 | === modified file 'bin/jokosher' |
570 | --- bin/jokosher 2009-03-17 02:09:31 +0000 |
571 | +++ bin/jokosher 2009-03-26 14:19:15 +0000 |
572 | @@ -11,9 +11,17 @@ |
573 | # This script is also responsible for parsing comment line arguments. |
574 | # |
575 | #------------------------------------------------------------------------------- |
576 | -import os, sys |
577 | +import os, sys, platform |
578 | |
579 | -ENV_PATHS = {"JOKOSHER_DATA_PATH" : "/usr/share/jokosher/", |
580 | +if platform.system() == "Windows": |
581 | + ENV_PATHS = {"JOKOSHER_DATA_PATH" : ".\\", |
582 | + "JOKOSHER_IMAGE_PATH" : ".\\pixmaps\\", |
583 | + "JOKOSHER_LOCALE_PATH" : ".\\locale\\", |
584 | + "JOKOSHER_HELP_PATH" : ".\\help\\", |
585 | + "GST_PLUGIN_PATH" : ".\\" |
586 | + } |
587 | +else: |
588 | + ENV_PATHS = {"JOKOSHER_DATA_PATH" : "/usr/share/jokosher/", |
589 | "JOKOSHER_IMAGE_PATH" : "/usr/share/jokosher/pixmaps/", |
590 | "JOKOSHER_LOCALE_PATH" : "/usr/share/locale/", |
591 | "JOKOSHER_HELP_PATH" : "/usr/share/gnome/jokosher/" |
592 | |
593 | === removed file 'dist/jokosher-0.9.tar.gz' |
594 | Binary files dist/jokosher-0.9.tar.gz 2007-04-25 03:17:21 +0000 and dist/jokosher-0.9.tar.gz 1970-01-01 00:00:00 +0000 differ |
595 | === added file 'images/jokosher.ico' |
596 | Binary files images/jokosher.ico 1970-01-01 00:00:00 +0000 and images/jokosher.ico 2008-12-18 13:48:58 +0000 differ |
597 | === modified file 'setup.py' |
598 | --- setup.py 2009-03-17 02:09:31 +0000 |
599 | +++ setup.py 2009-03-26 15:07:44 +0000 |
600 | @@ -50,7 +50,7 @@ |
601 | license='GNU GPL', |
602 | platforms='linux', |
603 | scripts=['bin/jokosher'], |
604 | - packages=['Jokosher', 'Jokosher/elements', 'Jokosher/ui'], |
605 | + packages=['Jokosher', 'Jokosher/elements', 'Jokosher/ui', 'Jokosher/PlatformUtils'], |
606 | data_files=[ |
607 | ('share/jokosher/', glob.glob("Jokosher/*.glade")), |
608 | ('share/jokosher/', ["Jokosher/jokosher-logo.png"]), |
609 | |
610 | === added file 'setup_win32.py' |
611 | --- setup_win32.py 1970-01-01 00:00:00 +0000 |
612 | +++ setup_win32.py 2009-03-26 15:07:44 +0000 |
613 | @@ -0,0 +1,41 @@ |
614 | +#!/usr/bin/env python |
615 | + |
616 | +from distutils.core import setup |
617 | +from subprocess import * |
618 | +import os |
619 | +import glob |
620 | +import py2exe |
621 | + |
622 | +dist = setup(name='jokosher', |
623 | + version='0.11.1', |
624 | + author='Jokosher Project', |
625 | + author_email='jokosher-devel@gnome.org', |
626 | + maintainer='Michael Sheldon', |
627 | + maintainer_email='mike@mikeasoft.com', |
628 | + description='Multi-track non-linear audio editing.', |
629 | + long_description='Jokosher is a simple yet powerful multi-track studio. With it you can create and record music, podcasts and more, all from an integrated simple environment.', |
630 | + url='http://www.jokosher.org/', |
631 | + download_url='http://www.jokosher.org/download', |
632 | + license='GNU GPL', |
633 | + packages=['Jokosher', 'Jokosher/elements', 'Jokosher/ui', 'Jokosher/PlatformUtils'], |
634 | + windows = [ |
635 | + { |
636 | + 'script' : 'bin/jokosher', |
637 | + 'icon_resources' : [(1, 'images/jokosher.ico')] |
638 | + } |
639 | + ], |
640 | + options = { |
641 | + 'py2exe': { |
642 | + 'packages' : 'encodings, Jokosher, Jokosher.elements, Jokosher.ui', |
643 | + 'includes' : 'cairo, gtk, gtk.glade, gobject, pango, pangocairo, atk, gst, pygst, xdg, Queue, xml.etree.ElementTree, gtk.keysyms, code, keyword, re' |
644 | + } |
645 | + }, |
646 | + data_files=[ |
647 | + "Jokosher\Jokosher.glade", |
648 | + "Jokosher\jokosher-logo.png", |
649 | + #glob.glob("Instruments\*.instr"), |
650 | + #glob.glob('Instruments\images\*.png'), |
651 | + #glob.glob("extensions\*.py") + glob.glob("extensions\*.egg"), |
652 | + ] |
653 | +) |
654 | + |
655 | |
656 | === added file 'windows_installer.iss' |
657 | --- windows_installer.iss 1970-01-01 00:00:00 +0000 |
658 | +++ windows_installer.iss 2009-03-26 14:19:15 +0000 |
659 | @@ -0,0 +1,13 @@ |
660 | +[Setup] |
661 | +AppName =Jokosher |
662 | +AppVerName=Jokosher version 0.11.1 |
663 | +DefaultDirName={pf}\Jokosher |
664 | +DefaultGroupName=Jokosher |
665 | +Compression=bzip/9 |
666 | + |
667 | +[Files] |
668 | +Source: dist/*; DestDir: {app}; Flags: recursesubdirs createallsubdirs |
669 | + |
670 | +[Icons] |
671 | +Name: {group}\Jokosher; Filename: {app}\jokosher.exe; WorkingDir: {app} |
672 | +Name: {group}\Uninstall Jokosher; Filename: {uninstallexe} |