Added files.
This commit is contained in:
@@ -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;
|
||||
};
|
||||
|
||||
@@ -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;
|
||||
};
|
||||
}
|
||||
@@ -53,7 +53,7 @@ struct ThreadSlot
|
||||
#endif
|
||||
|
||||
#undef CHECKPOINT_COUNT
|
||||
#define CHECKPOINT_COUNT 2
|
||||
#define CHECKPOINT_COUNT 5
|
||||
struct ThreadCheckpoint
|
||||
{
|
||||
const char *File, *Message;
|
||||
|
||||
@@ -20,68 +20,43 @@
|
||||
#include <sys/types.h>
|
||||
|
||||
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<soundInfoHdl> 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; i<size; ++i) {
|
||||
soundInfoHdl sHdl = sounds[i];
|
||||
HLock(Handle(sHdl));
|
||||
OSStatus err = MemError();
|
||||
TEST_ERR(err, HLock);
|
||||
soundInfoPtr s = *sHdl;
|
||||
if (s->snd != 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<soundInfoHdl> snds = sounds;
|
||||
OSErr err;
|
||||
|
||||
for (unsigned i=0; i<size; ++i) {
|
||||
soundInfoHdl sHdl = snds[i];
|
||||
HLock(Handle(sHdl));
|
||||
err = MemError();
|
||||
TEST_ERR(err, HLock);
|
||||
soundInfoPtr s = *sHdl;
|
||||
if ((s->movie[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; i<size; ++i) {
|
||||
soundInfoHdl sHdl = sounds[i];
|
||||
HLock(Handle(sHdl));
|
||||
OSStatus err = MemError();
|
||||
TEST_ERR(err, HLock);
|
||||
soundInfoPtr s = *sHdl;
|
||||
if (s->snd != 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<soundInfoHdl> playingSounds;
|
||||
static queue<soundInfoHdl> freeSounds;
|
||||
|
||||
RageSound_QT::RageSound_QT()
|
||||
{
|
||||
#if 1
|
||||
RageException::ThrowNonfatal("Class not finished!");
|
||||
#endif
|
||||
|
||||
playingSounds.reserve(initialSounds);
|
||||
for (unsigned i=0; i<initialSounds; ++i)
|
||||
{
|
||||
soundInfoHdl sHdl = soundInfo::MakeSoundInfoHdl();
|
||||
freeSounds.push(sHdl);
|
||||
}
|
||||
}
|
||||
|
||||
RageSound_QT::~RageSound_QT()
|
||||
{
|
||||
LockMutex L(SOUNDMAN->lock);
|
||||
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<soundInfoHdl>::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<soundInfoHdl> snds = playingSounds;
|
||||
for (vector<soundInfoHdl>::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<soundInfoHdl>::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");
|
||||
}
|
||||
|
||||
@@ -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 <QuickTime/QuickTime.h>
|
||||
}*/
|
||||
#include "RageSoundDriver.h"
|
||||
|
||||
class RageSound_QT: public RageSoundDriver {
|
||||
|
||||
Reference in New Issue
Block a user