diff --git a/stepmania/PBProject/stepmania.pbproj/project.pbxproj b/stepmania/PBProject/stepmania.pbproj/project.pbxproj index a9d726307e..9fcda7c687 100755 --- a/stepmania/PBProject/stepmania.pbproj/project.pbxproj +++ b/stepmania/PBProject/stepmania.pbproj/project.pbxproj @@ -208,15 +208,17 @@ AAF4310104DCC5F800D02EE9, ); buildSettings = { + DEBUGGING_SYMBOLS = NO; FRAMEWORK_SEARCH_PATHS = "\"$(HOME)/Library/Frameworks\""; HEADER_SEARCH_PATHS = "\"$(SYSTEM_LIBRARY_DIR)/Frameworks/CoreServices.framework/Versions/A/Frameworks/CarbonCore.framework/Versions/A/Headers\" ../src \"$(SYSTEM_LIBRARY_DIR)/Frameworks/SDL_image.framework/Versions/A/Headers\" \"$(SYSTEM_LIBRARY_DIR)/SDL.framework/Headers\""; INSTALL_PATH = "$(HOME)/Applications"; LIBRARY_SEARCH_PATHS = ""; MACOSX_DEPLOYMENT_TARGET = 10.2; - OTHER_CFLAGS = "-I../src -I/usr/local/include/SDL -DPBBUILD -DDEBUG -Wno-switch -Wno-missing-braces"; + OTHER_CFLAGS = "-I../src -I/usr/local/include/SDL -DDEBUG -DPBBUILD -Wno-switch -Wno-missing-braces -fcoalesce-templates -fno-rtti -Wnewline-eof -Os"; OTHER_LDFLAGS = "-lSDLmain -lpng ../src/SDL_sound-1.0.0/SDL_sound.o ../src/SDL_sound-1.0.0/ogg.o ../src/SDL_sound-1.0.0/wav.o ../src/SDL_sound-1.0.0/audio_convert.o ../src/SDL_sound-1.0.0/madlib.o -lmad -logg -lvorbisfile -lvorbis"; PRODUCT_NAME = StepMania; SECTORDER_FLAGS = ""; + USE_GCC3_PFE_SUPPORT = NO; WARNING_CFLAGS = "-Wmost -Wno-four-char-constants -Wno-unknown-pragmas"; WRAPPER_EXTENSION = app; }; @@ -522,6 +524,7 @@ AADB4F5B04D9220700D02EE9, AA0E393604DA8EE700D02EE9, AAF4310004DC98BC00D02EE9, + AA4F38C304E2D0B700D02EE9, ); isa = PBXHeadersBuildPhase; runOnlyForDeploymentPostprocessing = 0; @@ -775,6 +778,7 @@ AA0E393504DA8EE700D02EE9, AA52E9BE04DBBCF400D02EE9, AAF430FF04DC98BC00D02EE9, + AA4F38C204E2D0B700D02EE9, ); isa = PBXSourcesBuildPhase; runOnlyForDeploymentPostprocessing = 0; @@ -1207,6 +1211,32 @@ settings = { }; }; + AA4F38C004E2D0B700D02EE9 = { + fileEncoding = 30; + isa = PBXFileReference; + name = NoteDataUtil.cpp; + path = /Users/steve/stepmania/src/NoteDataUtil.cpp; + refType = 0; + }; + AA4F38C104E2D0B700D02EE9 = { + fileEncoding = 30; + isa = PBXFileReference; + name = NoteDataUtil.h; + path = /Users/steve/stepmania/src/NoteDataUtil.h; + refType = 0; + }; + AA4F38C204E2D0B700D02EE9 = { + fileRef = AA4F38C004E2D0B700D02EE9; + isa = PBXBuildFile; + settings = { + }; + }; + AA4F38C304E2D0B700D02EE9 = { + fileRef = AA4F38C104E2D0B700D02EE9; + isa = PBXBuildFile; + settings = { + }; + }; AA52E9BD04DBBCF400D02EE9 = { fileEncoding = 30; isa = PBXFileReference; @@ -3827,9 +3857,9 @@ AA6E012D04771299005F316C, AA6E01410477136A005F316C, AABE36F80497CE16005F316C, + AA98E298049ACE39005F316C, AABE36F60497CE16005F316C, AABE36F70497CE16005F316C, - AA98E298049ACE39005F316C, ); isa = PBXGroup; path = arch; @@ -4712,10 +4742,9 @@ AA6EFD7B04770A7C005F316C, AA6EFD7C04770A7C005F316C, AA6EFD7D04770A7C005F316C, - AADB4E7B04D4FE5D00D02EE9, - AADB4E7C04D4FE5D00D02EE9, AA6EFD7E04770A7C005F316C, AA6EFD7F04770A7C005F316C, + AA6EFD8604770A7C005F316C, AADB4E7A04D4FE5D00D02EE9, AA6EFD8004770A7C005F316C, AA6EFD8104770A7C005F316C, @@ -4723,9 +4752,10 @@ AA6EFD8304770A7C005F316C, AA6EFD8404770A7C005F316C, AA6EFD8504770A7C005F316C, - AA6EFD8604770A7C005F316C, AA6EFD8704770A7C005F316C, AA6EFD8804770A7C005F316C, + AADB4E7B04D4FE5D00D02EE9, + AADB4E7C04D4FE5D00D02EE9, AA6EFD8904770A7C005F316C, AA6EFD8A04770A7C005F316C, AA6EFD8B04770A7C005F316C, @@ -4737,6 +4767,8 @@ AA6EFD9104770A7C005F316C, AA6EFD9204770A7C005F316C, AA6EFD9304770A7C005F316C, + AAC23F7E0485E68D005F316C, + AAC23F7F0485E68D005F316C, AAF580A704B3E2DC00D02EE9, AAF580A804B3E2DC00D02EE9, AA6EFDBC04770AEA005F316C, @@ -4745,8 +4777,6 @@ AA6EFDBF04770AEA005F316C, AA6EFDC004770AEA005F316C, AA6EFDC104770AEA005F316C, - AAC23F7E0485E68D005F316C, - AAC23F7F0485E68D005F316C, AA1DCB6104A4872700D02EE9, ); isa = PBXGroup; @@ -4878,10 +4908,14 @@ AA6EFDE404770C79005F316C, AA6EFDE504770C79005F316C, AA6EFDE604770C79005F316C, + AA4F38C004E2D0B700D02EE9, + AA4F38C104E2D0B700D02EE9, AA6EFDE704770C79005F316C, AA6EFDE804770C79005F316C, AA6EFDE904770C79005F316C, AA6EFDEA04770C79005F316C, + AA6EFDFB04770C79005F316C, + AA6EFDFC04770C79005F316C, AA6EFDED04770C79005F316C, AA6EFDEE04770C79005F316C, AA6EFDEF04770C79005F316C, @@ -4896,8 +4930,6 @@ AA6EFDF804770C79005F316C, AA6EFDF904770C79005F316C, AA6EFDFA04770C79005F316C, - AA6EFDFB04770C79005F316C, - AA6EFDFC04770C79005F316C, AA6EFDFD04770C79005F316C, AA6EFDFE04770C79005F316C, AA6EFDFF04770C79005F316C, @@ -4909,20 +4941,20 @@ AA6E01E6047720A3005F316C, AA6E01E7047720A3005F316C, AA6E01E20477205A005F316C, - AA6E01E30477205A005F316C, AA6E01DE04772005005F316C, AA6E01DF04772005005F316C, AA6EFE0704770C79005F316C, AA6EFE0804770C79005F316C, - AAF430FD04DC98BC00D02EE9, - AAF430FE04DC98BC00D02EE9, AA6EFE0904770C79005F316C, AA6EFE0A04770C79005F316C, + AAF430FD04DC98BC00D02EE9, + AAF430FE04DC98BC00D02EE9, AA6EFE0B04770C79005F316C, AA6EFE0C04770C79005F316C, AA6EFE0D04770C79005F316C, AA6EFE0E04770C79005F316C, AA6EFE0F04770C79005F316C, + AA6E01E30477205A005F316C, ); isa = PBXGroup; name = DataStructures; @@ -6160,12 +6192,12 @@ AA6EFE6A04770D01005F316C = { children = ( AA1DCB6004A4872700D02EE9, - AA6EFE6004770CF7005F316C, + AA272BFB04CB779F00D02EE9, AA6EFE6104770CF7005F316C, AA6EFE6204770CF7005F316C, AA6EFE6304770CF7005F316C, AA6EFE6404770CF7005F316C, - AA272BFB04CB779F00D02EE9, + AA6EFE6004770CF7005F316C, ); isa = PBXGroup; name = StepMania; @@ -6174,10 +6206,10 @@ }; AA6EFE6D04770D3E005F316C = { children = ( - AA6EFE6E04770D61005F316C, - AA6EFE6F04770D61005F316C, AA6EFE7604770E7C005F316C, AA6EFE7704770E7C005F316C, + AA6EFE6E04770D61005F316C, + AA6EFE6F04770D61005F316C, AA6EFE7804770E7C005F316C, AA6EFE7904770E7C005F316C, AA6EFE7A04770E7C005F316C, @@ -7240,12 +7272,12 @@ AA6EFEFC04770F63005F316C, AA6EFEFD04770F63005F316C, AA6EFEFE04770F63005F316C, - AA6EFEFF04770F63005F316C, - AA6EFF0004770F63005F316C, AA6EFF0104770F63005F316C, AA6EFF0204770F63005F316C, AA6EFF0304770F63005F316C, AA6EFF0404770F63005F316C, + AA6EFEFF04770F63005F316C, + AA6EFF0004770F63005F316C, AAE443E904B0F9F600D02EE9, AAE443EA04B0F9F600D02EE9, AAE443EB04B0F9F600D02EE9, @@ -7294,10 +7326,10 @@ AA6EFF2D04770F63005F316C, AA6EFF2E04770F63005F316C, AA6EFF3004770F63005F316C, - AAE443F304B0FEB700D02EE9, - AAE443F404B0FEB700D02EE9, AA6EFF3104770F63005F316C, AA6EFF3204770F63005F316C, + AAE443F304B0FEB700D02EE9, + AAE443F404B0FEB700D02EE9, AA6EFF3304770F63005F316C, AA6EFF3404770F63005F316C, ); @@ -8204,10 +8236,10 @@ }; AA6EFF6F04770F6A005F316C = { children = ( - AA6EFF7004770F86005F316C, - AA6EFF7104770F86005F316C, AABE35EF04967E6F005F316C, AABE35F004967E6F005F316C, + AA6EFF7004770F86005F316C, + AA6EFF7104770F86005F316C, ); isa = PBXGroup; name = Transitions; @@ -9012,7 +9044,7 @@ AADB4E9204D5288400D02EE9, ); isa = PBXGroup; - name = arch; + name = ArchHooks; path = ../src/arch; refType = 2; }; diff --git a/stepmania/PBProject/stepmania.pbproj/steve.pbxuser b/stepmania/PBProject/stepmania.pbproj/steve.pbxuser new file mode 100644 index 0000000000..871f08809b --- /dev/null +++ b/stepmania/PBProject/stepmania.pbproj/steve.pbxuser @@ -0,0 +1,483 @@ +// !$*UTF8*$! +{ + 29B97313FDCFA39411CA2CEA = { + activeBuildStyle = 4A9504CCFFE6A4B311CA0CBA; + activeExecutable = AA6EE27D04770547005F316C; + activeTarget = 29B97326FDCFA39411CA2CEA; + addToTargets = ( + 29B97326FDCFA39411CA2CEA, + ); + breakpoints = ( + AAE4445004B236F300D02EE9, + AADB4F0D04D5E0D800D02EE9, + AA76D15E04DA813600D02EE9, + AAF4380904DD45A100D02EE9, + AAF4380B04DD46BF00D02EE9, + ); + executables = ( + AA6EE27D04770547005F316C, + ); + perUserDictionary = { + PBXPerProjectTemplateStateSaveDate = 82026103; + PBXWorkspaceContents = ( + { + LeftSlideOut = { + Split0 = { + Split0 = { + NavContent0 = { + bookmark = AA4F38D704E358CA00D02EE9; + history = ( + AA4F38C604E358CA00D02EE9, + AA4F38C704E358CA00D02EE9, + AA4F38C804E358CA00D02EE9, + AA4F38C904E358CA00D02EE9, + AA4F38CA04E358CA00D02EE9, + AA4F38CB04E358CA00D02EE9, + AA4F38CC04E358CA00D02EE9, + ); + prevStack = ( + AA4F38CD04E358CA00D02EE9, + AA4F38CE04E358CA00D02EE9, + AA4F38CF04E358CA00D02EE9, + AA4F38D004E358CA00D02EE9, + AA4F38D104E358CA00D02EE9, + AA4F38D204E358CA00D02EE9, + AA4F38D304E358CA00D02EE9, + AA4F38D404E358CA00D02EE9, + AA4F38D504E358CA00D02EE9, + AA4F38D604E358CA00D02EE9, + ); + }; + NavCount = 1; + NavGeometry0 = { + Frame = "{{0, 0}, {702, 489}}"; + NavBarVisible = YES; + }; + NavSplitVertical = NO; + }; + SplitCount = 1; + Tab1 = { + Debugger = { + Split0 = { + SplitCount = 2; + }; + SplitCount = 1; + TabCount = 2; + }; + LauncherConfigVersion = 7; + }; + Tab2 = { + LauncherConfigVersion = 3; + Runner = { + }; + }; + TabCount = 5; + }; + SplitCount = 1; + Tab1 = { + OptionsSetName = "Hierarchy, all classes"; + }; + TabCount = 5; + }; + }, + ); + PBXWorkspaceGeometries = ( + { + ContentSize = "{1019, 799}"; + LeftSlideOut = { + ActiveTab = 0; + ActiveTabName = PBXGroupTreeModule; + Collapsed = NO; + Frame = "{{0, 23}, {1019, 776}}"; + Split0 = { + ActiveTab = 2; + ActiveTabName = PBXBuildResultsModule; + Collapsed = NO; + Frame = "{{317, 0}, {702, 776}}"; + Split0 = { + Frame = "{{0, 287}, {702, 489}}"; + }; + SplitCount = 1; + Tab0 = { + Frame = "{{0, 0}, {702, 241}}"; + }; + Tab1 = { + Debugger = { + ActiveTab = 0; + ActiveTabName = PBXDebugCLIModule; + Collapsed = NO; + Frame = "{{0, 0}, {643, 285}}"; + Split0 = { + Frame = "{{0, 138}, {643, 147}}"; + Split0 = { + Frame = "{{0, 0}, {306, 147}}"; + }; + Split1 = { + DebugVariablesTableConfiguration = ( + Name, + 181, + Value, + 76, + Summary, + 62.123, + ); + Frame = "{{315, 0}, {328, 147}}"; + }; + SplitCount = 2; + }; + SplitCount = 1; + Tab0 = { + Frame = "{{0, 0}, {100, 50}}"; + }; + Tab1 = { + Frame = "{{0, 0}, {643, 114}}"; + }; + TabCount = 2; + TabsVisible = YES; + }; + Frame = "{{0, 0}, {643, 285}}"; + LauncherConfigVersion = 7; + }; + Tab2 = { + Frame = "{{0, 0}, {643, 126}}"; + LauncherConfigVersion = 3; + Runner = { + Frame = "{{0, 0}, {643, 126}}"; + }; + }; + Tab3 = { + BuildMessageFrame = "{{0, 0}, {704, 153}}"; + BuildTranscriptFrame = "{{0, 162}, {704, 79}}"; + BuildTranscriptFrameExpanded = YES; + Frame = "{{0, 0}, {702, 263}}"; + }; + Tab4 = { + Frame = "{{0, 0}, {702, 295}}"; + }; + TabCount = 5; + TabsVisible = YES; + }; + SplitCount = 1; + Tab0 = { + Frame = "{{0, 0}, {293, 776}}"; + GroupTreeTableConfiguration = ( + SCMStatusColumn, + 22, + TargetStatusColumn, + 18, + MainColumn, + 238, + ); + }; + Tab1 = { + ClassesFrame = "{{0, 0}, {247, 513}}"; + ClassesTreeTableConfiguration = ( + PBXBookColumnIdentifier, + 20, + PBXClassColumnIdentifier, + 204, + ); + Frame = "{{0, 0}, {245, 849}}"; + MembersFrame = "{{0, 522}, {247, 327}}"; + MembersTreeTableConfiguration = ( + PBXBookColumnIdentifier, + 20, + PBXMethodColumnIdentifier, + 203, + ); + }; + Tab2 = { + Frame = "{{0, 0}, {226, 549}}"; + }; + Tab3 = { + Frame = "{{0, 0}, {191, 776}}"; + TargetTableConfiguration = ( + ActiveObject, + 16, + ObjectNames, + 202.296, + ); + }; + Tab4 = { + BreakpointsTreeTableConfiguration = ( + breakpointColumn, + 138, + enabledColumn, + 31, + ); + Frame = "{{0, 0}, {191, 791}}"; + }; + TabCount = 5; + TabsVisible = YES; + }; + NavBarShownByDefault = YES; + StatusViewVisible = YES; + Template = F5F68CF101725D4C0D7A8F4C; + ToolbarVisible = YES; + WindowLocation = "{257, 77}"; + }, + ); + PBXWorkspaceStateSaveDate = 82026103; + }; + perUserProjectItems = { + AA4F38C604E358CA00D02EE9 = AA4F38C604E358CA00D02EE9; + AA4F38C704E358CA00D02EE9 = AA4F38C704E358CA00D02EE9; + AA4F38C804E358CA00D02EE9 = AA4F38C804E358CA00D02EE9; + AA4F38C904E358CA00D02EE9 = AA4F38C904E358CA00D02EE9; + AA4F38CA04E358CA00D02EE9 = AA4F38CA04E358CA00D02EE9; + AA4F38CB04E358CA00D02EE9 = AA4F38CB04E358CA00D02EE9; + AA4F38CC04E358CA00D02EE9 = AA4F38CC04E358CA00D02EE9; + AA4F38CD04E358CA00D02EE9 = AA4F38CD04E358CA00D02EE9; + AA4F38CE04E358CA00D02EE9 = AA4F38CE04E358CA00D02EE9; + AA4F38CF04E358CA00D02EE9 = AA4F38CF04E358CA00D02EE9; + AA4F38D004E358CA00D02EE9 = AA4F38D004E358CA00D02EE9; + AA4F38D104E358CA00D02EE9 = AA4F38D104E358CA00D02EE9; + AA4F38D204E358CA00D02EE9 = AA4F38D204E358CA00D02EE9; + AA4F38D304E358CA00D02EE9 = AA4F38D304E358CA00D02EE9; + AA4F38D404E358CA00D02EE9 = AA4F38D404E358CA00D02EE9; + AA4F38D504E358CA00D02EE9 = AA4F38D504E358CA00D02EE9; + AA4F38D604E358CA00D02EE9 = AA4F38D604E358CA00D02EE9; + AA4F38D704E358CA00D02EE9 = AA4F38D704E358CA00D02EE9; + }; + projectwideBuildSettings = { + }; + wantsIndex = 1; + wantsSCM = 1; + }; + 29B97326FDCFA39411CA2CEA = { + activeExec = 0; + executables = ( + AA6EE27D04770547005F316C, + ); + }; + AA4F38C604E358CA00D02EE9 = { + fRef = AA76D15504D9D2D200D02EE9; + isa = PBXTextBookmark; + name = "CrashHandlerChild.cpp: 404"; + rLen = 0; + rLoc = 10893; + rType = 0; + vrLen = 664; + vrLoc = 0; + }; + AA4F38C704E358CA00D02EE9 = { + fRef = AA6EFE6004770CF7005F316C; + isa = PBXTextBookmark; + name = "global.h: 1"; + rLen = 0; + rLoc = 0; + rType = 0; + vrLen = 767; + vrLoc = 0; + }; + AA4F38C804E358CA00D02EE9 = { + fRef = AA76D15404D9D2D200D02EE9; + isa = PBXTextBookmark; + name = "CrashHandler.cpp: 137"; + rLen = 4; + rLoc = 3728; + rType = 0; + vrLen = 1026; + vrLoc = 2922; + }; + AA4F38C904E358CA00D02EE9 = { + fRef = AA6EFD8F04770A7C005F316C; + isa = PBXTextBookmark; + name = "RageTimer.cpp: MAC_OS_X_VERSION_MIN_REQUIRED"; + rLen = 0; + rLoc = 0; + rType = 0; + vrLen = 580; + vrLoc = 0; + }; + AA4F38CA04E358CA00D02EE9 = { + fRef = AA6EFD8E04770A7C005F316C; + isa = PBXTextBookmark; + name = "RageThreads.h: CHECKPOINT_M"; + rLen = 12; + rLoc = 759; + rType = 0; + vrLen = 1068; + vrLoc = 214; + }; + AA4F38CB04E358CA00D02EE9 = { + fRef = AA6EFD8D04770A7C005F316C; + isa = PBXTextBookmark; + name = "RageThreads.cpp: 299"; + rLen = 16; + rLoc = 6400; + rType = 0; + vrLen = 777; + vrLoc = 6079; + }; + AA4F38CC04E358CA00D02EE9 = { + fRef = AA8F275F04A1127900D02EE9; + isa = PBXTextBookmark; + name = "RageSoundDriver_QT.cpp: vector"; + rLen = 0; + rLoc = 9224; + rType = 0; + vrLen = 865; + vrLoc = 8568; + }; + AA4F38CD04E358CA00D02EE9 = { + fRef = AA76D15404D9D2D200D02EE9; + isa = PBXTextBookmark; + name = "CrashHandler.cpp: 87"; + rLen = 0; + rLoc = 2024; + rType = 0; + vrLen = 601; + vrLoc = 1892; + }; + AA4F38CE04E358CA00D02EE9 = { + fRef = AA76D15504D9D2D200D02EE9; + isa = PBXTextBookmark; + name = "CrashHandlerChild.cpp: 404"; + rLen = 0; + rLoc = 10893; + rType = 0; + vrLen = 664; + vrLoc = 0; + }; + AA4F38CF04E358CA00D02EE9 = { + fRef = AA76D15404D9D2D200D02EE9; + isa = PBXTextBookmark; + name = "CrashHandler.cpp: MAC_OS_X_VERSION_MIN_REQUIRED"; + rLen = 8; + rLoc = 10; + rType = 0; + vrLen = 605; + vrLoc = 0; + }; + AA4F38D004E358CA00D02EE9 = { + fRef = AA6EFE6004770CF7005F316C; + isa = PBXTextBookmark; + name = "global.h: 1"; + rLen = 0; + rLoc = 0; + rType = 0; + vrLen = 767; + vrLoc = 0; + }; + AA4F38D104E358CA00D02EE9 = { + fRef = AA76D15404D9D2D200D02EE9; + isa = PBXTextBookmark; + name = "CrashHandler.cpp: 137"; + rLen = 4; + rLoc = 3728; + rType = 0; + vrLen = 1063; + vrLoc = 2922; + }; + AA4F38D204E358CA00D02EE9 = { + fRef = AA8F275F04A1127900D02EE9; + isa = PBXTextBookmark; + name = "RageSoundDriver_QT.cpp: vector"; + rLen = 0; + rLoc = 9224; + rType = 0; + vrLen = 865; + vrLoc = 8568; + }; + AA4F38D304E358CA00D02EE9 = { + fRef = AA76D15404D9D2D200D02EE9; + isa = PBXTextBookmark; + name = "CrashHandler.cpp: 137"; + rLen = 4; + rLoc = 3728; + rType = 0; + vrLen = 1026; + vrLoc = 2922; + }; + AA4F38D404E358CA00D02EE9 = { + fRef = AA6EFD8E04770A7C005F316C; + isa = PBXTextBookmark; + name = "RageThreads.h: 1"; + rLen = 0; + rLoc = 0; + rType = 0; + vrLen = 751; + vrLoc = 0; + }; + AA4F38D504E358CA00D02EE9 = { + fRef = AA6EFD8F04770A7C005F316C; + isa = PBXTextBookmark; + name = "RageTimer.cpp: MAC_OS_X_VERSION_MIN_REQUIRED"; + rLen = 0; + rLoc = 0; + rType = 0; + vrLen = 580; + vrLoc = 0; + }; + AA4F38D604E358CA00D02EE9 = { + fRef = AA6EFD8D04770A7C005F316C; + isa = PBXTextBookmark; + name = "RageThreads.cpp: 299"; + rLen = 16; + rLoc = 6400; + rType = 0; + vrLen = 777; + vrLoc = 6079; + }; + AA4F38D704E358CA00D02EE9 = { + fRef = AA8F275F04A1127900D02EE9; + isa = PBXTextBookmark; + name = "RageSoundDriver_QT.cpp: samples"; + rLen = 0; + rLoc = 539; + rType = 0; + vrLen = 875; + vrLoc = 30; + }; + AA6EE27D04770547005F316C = { + activeArgIndex = 2147483647; + activeArgIndices = ( + ); + argumentStrings = ( + ); + configStateDict = { + }; + debuggerPlugin = GDBDebugging; + dylibVariantSuffix = ""; + enableDebugStr = 1; + environmentEntries = ( + ); + isa = PBXExecutable; + name = stepmania; + shlibInfoDictList = ( + ); + sourceDirectories = ( + ); + }; + AA76D15E04DA813600D02EE9 = { + fileReference = AA6E0029047711F3005F316C; + isa = PBXFileBreakpoint; + lineNumber = 1136; + state = 1; + }; + AADB4F0D04D5E0D800D02EE9 = { + fileReference = AA6EFE0904770C79005F316C; + isa = PBXFileBreakpoint; + lineNumber = 59; + state = 2; + }; + AAE4445004B236F300D02EE9 = { + fileReference = AA6EFE6304770CF7005F316C; + isa = PBXFileBreakpoint; + lineNumber = 96; + state = 1; + }; + AAF4380904DD45A100D02EE9 = { + fileReference = AA6EFE6304770CF7005F316C; + isa = PBXFileBreakpoint; + lineNumber = 555; + state = 1; + }; + AAF4380B04DD46BF00D02EE9 = { + fileReference = AA6EFE6304770CF7005F316C; + isa = PBXFileBreakpoint; + lineNumber = 583; + state = 1; + }; +} diff --git a/stepmania/src/RageThreads.cpp b/stepmania/src/RageThreads.cpp index c2865fba10..62e148e477 100644 --- a/stepmania/src/RageThreads.cpp +++ b/stepmania/src/RageThreads.cpp @@ -53,7 +53,7 @@ struct ThreadSlot #endif #undef CHECKPOINT_COUNT - #define CHECKPOINT_COUNT 2 + #define CHECKPOINT_COUNT 5 struct ThreadCheckpoint { const char *File, *Message; diff --git a/stepmania/src/arch/Sound/RageSoundDriver_QT.cpp b/stepmania/src/arch/Sound/RageSoundDriver_QT.cpp index adb6f5a0ef..33409daced 100644 --- a/stepmania/src/arch/Sound/RageSoundDriver_QT.cpp +++ b/stepmania/src/arch/Sound/RageSoundDriver_QT.cpp @@ -20,68 +20,43 @@ #include const unsigned numchannels = 2; -const unsigned samplesize = 16 * numchannels; +const unsigned samplesize = 2 * numchannels; const unsigned samples = 40960; +const long halfsamples = long(samples / 2); +const long twicesamples = long(samples * 2); const unsigned freq = 44100; -const unsigned buffersize = samples * samplesize / 8; +const unsigned buffersize = samples * samplesize; +const unsigned initialSounds = 10; #if defined(DEBUG) #define TEST_ERR(err, func) \ +CHECKPOINT; \ if (__builtin_expect(err, noErr)) \ RageException::Throw(#func " failed with error: %d", err) #else -#define TEST_ERR(err, func) +#define TEST_ERR(err, func) CHECKPOINT #endif -typedef struct soundInfo{ +typedef struct soundInfo +{ RageSound *snd; - Movie movie[2]; - long fillme; + Movie movie; + Track track; long stopPos; long lastPos; - long finishedBuffers; + unsigned totalMediaSamples; + unsigned firstLiveMediaSample; + SoundDescriptionHandle sndDescHdl; + + static soundInfo **MakeSoundInfoHdl(); + static void DisposeSoundInfoHdl(soundInfo **sHdl); + void Reset(); + void DisposeSampleReferences(Media media, unsigned endIndex = 0xFFFFFFFF); + void GetData(); } *soundInfoPtr, **soundInfoHdl; -static void CallBack(QTCallBack cb, long refCon); -static inline void GetData(soundInfoPtr s); - -static vector sounds; - -RageSound_QT::RageSound_QT() { -#if 1 - RageException::ThrowNonfatal("Class not finished!"); -#endif -} - -RageSound_QT::~RageSound_QT() { - LockMutex L(SOUNDMAN->lock); - while (!sounds.empty()) { - soundInfoHdl sHdl = sounds.back(); - HLock(Handle(sHdl)); - OSStatus err = MemError(); - TEST_ERR(err, HLock); - soundInfoPtr s = *sHdl; - if (s->movie[0]) { - StopMovie(s->movie[0]); - DisposeMovie(s->movie[0]); - } - if (s->movie[1]) { - StopMovie(s->movie[1]); - DisposeMovie(s->movie[1]); - } - HUnlock(Handle(sHdl)); - err = MemError(); - TEST_ERR(err, HUnlock); - DisposeHandle(Handle(sHdl)); - err = MemError(); - TEST_ERR(err, DisposeHandle); - sounds.pop_back(); - } -} - -void RageSound_QT::StartMixing(RageSound *snd) { - LockMutex L(SOUNDMAN->lock); - LOG->Trace("StartMixing()"); +soundInfoHdl soundInfo::MakeSoundInfoHdl() +{ soundInfoHdl sHdl = (soundInfoHdl)NewHandle(sizeof(soundInfo)); OSStatus err = MemError(); TEST_ERR(err, NewHandle); @@ -90,209 +65,296 @@ void RageSound_QT::StartMixing(RageSound *snd) { TEST_ERR(err, HLock); soundInfoPtr s = *sHdl; - s->fillme = 0; - s->movie[0] = NULL; - s->movie[1] = NULL; - s->stopPos = 0; - s->lastPos = 0; - s->snd = snd; - s->finishedBuffers = -1; - HUnlock(Handle(sHdl)); - err = MemError(); - TEST_ERR(err, HUnlock); - sounds.push_back(sHdl); - CallBack(NULL, long(sHdl)); -} - -void RageSound_QT::StopMixing(RageSound *snd) { - LockMutex L(SOUNDMAN->lock); - LOG->Trace("StopMixing"); - unsigned size = sounds.size(); - - for (unsigned i=0; isnd != snd) { - HUnlock(Handle(sHdl)); - err = MemError(); - TEST_ERR(err, HUnlock); - continue; - } - if (s->movie[0]) { - StopMovie(s->movie[0]); - DisposeMovie(s->movie[0]); - } - if (s->movie[1]) { - StopMovie(s->movie[1]); - DisposeMovie(s->movie[1]); - } - sounds.erase(sounds.begin()+i); - HUnlock(Handle(sHdl)); - err = MemError(); - TEST_ERR(err, HUnlock); - DisposeHandle(Handle(sHdl)); - err = MemError(); - TEST_ERR(err, DisposeHandle); - break; - } -} - -void RageSound_QT::Update(float delta) { -#pragma unused (delta) - LockMutex L(SOUNDMAN->lock); - unsigned size = sounds.size(); - vector snds = sounds; - OSErr err; - - for (unsigned i=0; imovie[0] && !IsMovieDone(s->movie[0])) || - (s->movie[1] && !IsMovieDone(s->movie[1]))) { - HUnlock(Handle(sHdl)); - continue; - } - /* StopPlaying() will call StopMixing which will unlock and dispose of the handle */ - s->snd->StopPlaying(); - } -} - -int RageSound_QT::GetPosition(const RageSound *snd) const { - LockMutex L(SOUNDMAN->lock); - unsigned size = sounds.size(); - /* Find the info */ - for (unsigned i=0; isnd != snd) { - HUnlock(Handle(sHdl)); - continue; - } - if (s->finishedBuffers == -1) { - HUnlock(Handle(sHdl)); - return 0; /* It hasn't started yet. */ - } - int ret = s->finishedBuffers * samples + GetMovieTime(s->movie[s->fillme], NULL); - HUnlock(Handle(sHdl)); - return ret; - } - RageException::Throw("Can't get the position of a sound that isn't playing"); -} - - -void CallBack(QTCallBack cb, long refCon) { - LockMutex L(SOUNDMAN->lock); - LOG->Trace("CallBack"); - soundInfoHdl sHdl = soundInfoHdl(refCon); - HLock(Handle(sHdl)); - OSStatus err = MemError(); - TEST_ERR(err, HLock); - soundInfoPtr s = *sHdl; - - s->finishedBuffers++; - if (!cb) - GetData(s); - else - DisposeCallBack(cb); - long playme = !s->fillme; - ASSERT(s->movie[playme]); - GoToBeginningOfMovie(s->movie[playme]); - StartMovie(s->movie[playme]); - err = GetMoviesError(); - TEST_ERR(err, StartMovie); - if (s->stopPos == 0) { - /* Not stopping */ - GetData(s); - QTCallBack callBack = NewCallBack(GetMovieTimeBase(s->movie[playme]), callBackAtExtremes); - CallMeWhen(callBack, CallBack, long(sHdl), triggerAtStop, triggerAtStop, triggerAtStop); - } - HUnlock(Handle(sHdl)); - err = MemError(); - TEST_ERR(err, HUnlock); - -} - -inline void GetData(soundInfoPtr s) { - LOG->Trace("GetData"); - char buffer[buffersize]; - unsigned got = s->snd->GetPCM(buffer, buffersize, s->lastPos); - - if (got < buffersize) { - s->stopPos = got / samplesize + s->lastPos; - if (got == 0) - return; - } - s->lastPos += samples; - - OSErr err = noErr; - if (s->movie[s->fillme]) - DisposeMovie(s->movie[s->fillme]); - - s->movie[s->fillme] = NewMovie(newMovieActive); + s->movie = NewMovie(newMovieActive); err = GetMoviesError(); TEST_ERR(err, NewMovie); - SetMovieTimeScale(s->movie[s->fillme], freq); + SetMovieTimeScale(s->movie, freq); err = GetMoviesError(); TEST_ERR(err, SetMovieTimeScale); - /* Put the sound data into a handle */ - Handle sndHdl; - - err = PtrToHand(buffer, &sndHdl, got); - TEST_ERR(err, PtrToHand); - - - /* Create the SoundDescription */ - SoundDescriptionHandle sndDescHdl = (SoundDescriptionHandle)NewHandleClear(sizeof(SoundDescription)); - - err = MemError(); - TEST_ERR(err, NewHandle); - { - SoundDescriptionPtr sndDescPtr = *sndDescHdl; - sndDescPtr->descSize = sizeof(SoundDescription); - sndDescPtr->dataFormat = k16BitBigEndianFormat; - sndDescPtr->numChannels = numchannels; - sndDescPtr->sampleSize = samplesize / numchannels; - sndDescPtr->sampleRate = freq << 16; - } - - /* Add data to media and then add media to track */ - Handle dataRef; - - PtrToHand(&sndHdl, &dataRef, sizeof(Handle)); - LOG->Trace("Create new Track"); - Track track = NewMovieTrack(s->movie[s->fillme], 0, 0, kFullVolume); + s->track = NewMovieTrack(s->movie, 0, 0, kFullVolume); err = GetMoviesError(); TEST_ERR(err, NewMovieTrack); - ASSERT(track); - LOG->Trace("Create new Media"); - Media media = NewTrackMedia(track, SoundMediaType, freq, dataRef, HandleDataHandlerSubType); - err = GetMoviesError(); - TEST_ERR(err, NewTrackMedia); - ASSERT(media); + s->sndDescHdl = (SoundDescriptionHandle)NewHandleClear(sizeof(SoundDescription)); + err = MemError(); + TEST_ERR(err, NewHandleClear); + HLock(Handle(s->sndDescHdl)); + err = MemError(); + TEST_ERR(err, HLock); + SoundDescriptionPtr sndDescPtr = *s->sndDescHdl; + sndDescPtr->descSize = sizeof(SoundDescription); + sndDescPtr->dataFormat = k16BitBigEndianFormat; + sndDescPtr->numChannels = numchannels; + sndDescPtr->sampleSize = samplesize * 8 / numchannels; + sndDescPtr->sampleRate = freq << 16; + HUnlock(Handle(s->sndDescHdl)); + err = MemError(); + TEST_ERR(err, HUnlock); - LOG->Trace("BeginMediaEdits"); - err = BeginMediaEdits(media); - TEST_ERR(err, BeginMediaEdits); - err = AddMediaSample(media, sndHdl, 0, got, 1, (SampleDescriptionHandle)sndDescHdl, - samples, 0, NULL); - TEST_ERR(err, AddMediaSample); - err = EndMediaEdits(media); - TEST_ERR(err, EndMediaEdits); - err = InsertMediaIntoTrack(track, 0, 0, GetMediaDuration(media), 0x00010000); - TEST_ERR(err, InsertMediaIntoTrack); - if (sndDescHdl) - DisposeHandle(Handle(sndDescHdl)); - s->fillme = !s->fillme; + s->totalMediaSamples = 0; + s->firstLiveMediaSample = 0; + s->Reset(); + HUnlock(Handle(sHdl)); + err = MemError(); + TEST_ERR(err, HUnlock); + return sHdl; } +void soundInfo::DisposeSoundInfoHdl(soundInfoHdl sHdl) +{ + HLock(Handle(sHdl)); + soundInfoPtr s = soundInfoPtr(*sHdl); + + s->Reset(); + DisposeHandle(Handle(s->sndDescHdl)); + DisposeMovieTrack(s->track); + DisposeMovie(s->movie); + HUnlock(Handle(sHdl)); + DisposeHandle(Handle(sHdl)); +} + +/* Make sure that the Handle to this data is locked before calling this method. */ +void soundInfo::Reset() +{ + Media media = GetTrackMedia(track); + + if (media) + { + this->DisposeSampleReferences(media); // All of them + DisposeTrackMedia(media); + } + totalMediaSamples = 0; + firstLiveMediaSample = 0; + stopPos = 0; + lastPos = 0; + snd = NULL; + GoToBeginningOfMovie(movie); +} + +void soundInfo::DisposeSampleReferences(Media media, unsigned endIndex) +{ + LockMutex L(SOUNDMAN->lock); + if (!firstLiveMediaSample) + return; + if (endIndex < firstLiveMediaSample) + { + LOG->Warn("Couldn't dispose of data to %d because it has already been " + "disposed.", endIndex); + return; + } + ASSERT(totalMediaSamples); + endIndex = min(endIndex, totalMediaSamples); + + for (; firstLiveMediaSample <= endIndex; ++firstLiveMediaSample) + { + Handle dataRef; + OSType dataRefType; + long dataRefAttributes; + OSErr err = GetMediaDataRef(media, firstLiveMediaSample, &dataRef, + &dataRefType, &dataRefAttributes); + TEST_ERR(err, GetMediaDataRef); + ASSERT(dataRefType == HandleDataHandlerSubType); + ASSERT(!(dataRefAttributes & dataRefWasNotResolved)); + HLock(dataRef); + Handle sndHdl; + memcpy(&sndHdl, *dataRef, sizeof(Handle)); + DisposeHandle(sndHdl); + HUnlock(dataRef); + DisposeHandle(dataRef); + } +} + +/* Make sure that the Handle to this data is locked before calling this method. */ +inline void soundInfo::GetData() +{ + CHECKPOINT; + char buffer[buffersize]; + unsigned got = snd->GetPCM(buffer, buffersize, lastPos); + + if (got < buffersize) + { + stopPos = got / samplesize + lastPos; + if (got == 0) + return; + } + lastPos += samples; + + Handle sndHdl; + PtrToHand(buffer, &sndHdl, got); + Handle dataRef; + PtrToHand(&sndHdl, &dataRef, sizeof(Handle)); + Media media = GetTrackMedia(track); + OSErr err; + + if (media) + { + short index; + err = AddMediaDataRef(media, &index, dataRef, HandleDataHandlerSubType); + TEST_ERR(err, AddMediaDataRef); + totalMediaSamples++; + ASSERT(totalMediaSamples == unsigned(index)); + } + else + { + media = NewTrackMedia(track, SoundMediaType, freq, dataRef, HandleDataHandlerSubType); + err = GetMoviesError(); + TEST_ERR(err, NewTrackMedia); + firstLiveMediaSample = 1; + totalMediaSamples = 1; + } + CHECKPOINT; + BeginMediaEdits(media); + AddMediaSample(media, sndHdl, 0, got, 1, SampleDescriptionHandle(sndDescHdl), samples, 0, NULL); + EndMediaEdits(media); + CHECKPOINT; + InsertMediaIntoTrack(track, -1, lastPos - samples, samples, 0x00010000); + CHECKPOINT; + + if (totalMediaSamples > 3) + { + SetMovieActiveSegment(movie, (totalMediaSamples - 2) * samples, twicesamples); + DisposeSampleReferences(media, totalMediaSamples - 3); //Remove one sample + } + CHECKPOINT; +} + + +static void CallBack(QTCallBack cb, long refCon) { + LockMutex L(SOUNDMAN->lock); + CHECKPOINT; + soundInfoHdl sHdl = soundInfoHdl(refCon); + HLock(Handle(sHdl)); + soundInfoPtr s = *sHdl; + long timeToCall; + + s->GetData(); + if (!cb) + { + StartMovie(s->movie); + cb = NewCallBack(GetMovieTimeBase(s->movie), callBackAtTime); + timeToCall = halfsamples; + } + else + timeToCall = s->lastPos - halfsamples; + if (!s->stopPos) + CallMeWhen(cb, CallBack, long(sHdl), triggerTimeFwd, timeToCall, freq); + + HUnlock(Handle(sHdl)); +} + +static vector playingSounds; +static queue freeSounds; + +RageSound_QT::RageSound_QT() +{ +#if 1 + RageException::ThrowNonfatal("Class not finished!"); +#endif + + playingSounds.reserve(initialSounds); + for (unsigned i=0; ilock); + while (!playingSounds.empty()) + { + soundInfoHdl &sHdl = playingSounds.back(); + soundInfo::DisposeSoundInfoHdl(sHdl); + playingSounds.pop_back(); + } + while (!freeSounds.empty()) + { + soundInfoHdl &sHdl = freeSounds.front(); + soundInfo::DisposeSoundInfoHdl(sHdl); + freeSounds.pop(); + } +} + +void RageSound_QT::StartMixing(RageSound *snd) +{ + LockMutex L(SOUNDMAN->lock); + CHECKPOINT; + LOG->Trace("StartMixing()"); + soundInfoHdl sHdl; + if (freeSounds.empty()) + sHdl = soundInfo::MakeSoundInfoHdl(); + else + { + sHdl = freeSounds.front(); + freeSounds.pop(); + } + (*sHdl)->snd = snd; + playingSounds.push_back(sHdl); + CallBack(NULL, long(sHdl)); +} + +void RageSound_QT::StopMixing(RageSound *snd) +{ + LockMutex L(SOUNDMAN->lock); + CHECKPOINT; + LOG->Trace("StopMixing"); + + for (vector::iterator iter=playingSounds.begin(); iter<=playingSounds.end(); ++iter) + { + soundInfoHdl sHdl = *iter; + + if ((*sHdl)->snd != snd) + continue; + HLock(Handle(sHdl)); + + soundInfoPtr s = *sHdl; + + StopMovie(s->movie); + s->Reset(); + playingSounds.erase(iter); + freeSounds.push(sHdl); + HUnlock(Handle(sHdl)); + return; + } + + LOG->Warn("A sound could not be stopped because it was not being played."); +} + +void RageSound_QT::Update(float delta) +{ +#pragma unused (delta) + LockMutex L(SOUNDMAN->lock); + + vector snds = playingSounds; + for (vector::iterator iter=snds.begin(); iter<=snds.end(); ++iter) + { + soundInfoHdl sHdl = *iter; + + OSErr err = GetMoviesError(); + TEST_ERR(err, GetMoviesError); + HLock(Handle(sHdl)); + err = MemError(); + TEST_ERR(err, MemError); + if (IsMovieDone((*sHdl)->movie)) + (*sHdl)->snd->StopPlaying(); + else + HUnlock(Handle(sHdl)); + CHECKPOINT; + } +} + +int RageSound_QT::GetPosition(const RageSound *snd) const +{ + LockMutex L(SOUNDMAN->lock); + + for (vector::iterator iter=playingSounds.begin(); iter<=playingSounds.end(); ++iter) + { + soundInfoHdl sHdl = *iter; + + if ((*sHdl)->snd == snd) + return GetMovieTime((*sHdl)->movie, NULL); + } + RageException::Throw("Can't get the position of a sound that isn't playing"); +} diff --git a/stepmania/src/arch/Sound/RageSoundDriver_QT.h b/stepmania/src/arch/Sound/RageSoundDriver_QT.h index 9f7079bda7..da502e473d 100644 --- a/stepmania/src/arch/Sound/RageSoundDriver_QT.h +++ b/stepmania/src/arch/Sound/RageSoundDriver_QT.h @@ -11,15 +11,6 @@ * */ -/* ugh, what a hack! QT includes Carbon/Carbon.h which -* has defs for a few things defined in RageUtil.h which -* is included in arch.cpp along w/ (eventually) this. -* How do I do this without using phony namespaces? -* --Steve -* -namespace QT { -#include -}*/ #include "RageSoundDriver.h" class RageSound_QT: public RageSoundDriver {