00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025 #include "LampBasic.h"
00026 #include "Sound/System/SoundCapacity.h"
00027 #include "Sound/System/SoundDefinition.h"
00028
00029 namespace Lamp{
00030
00031
00032
00033 SoundCapacity::SoundCapacity() : directSound_(NULL){
00034 }
00035
00036
00037 SoundCapacity::~SoundCapacity(){
00038 }
00039
00040
00041 bool SoundCapacity::initialize(DirectSound* directSound){
00042 directSound_ = directSound;
00043 if(!refresh()){ return false; }
00044
00045
00046 return true;
00047 }
00048
00049
00050 bool SoundCapacity::refresh(){
00051 capacity_.dwSize = sizeof(DSCAPS);
00052 if(DirectXFailed(directSound_->GetCaps(&capacity_))){
00053 ErrorOut("SoundCapacity::refresh() サウンド能力の取得に失敗しました");
00054 return false;
00055 }
00056 return true;
00057 }
00058
00059
00060 bool SoundCapacity::checkCapacity(){
00061
00062 if((SoundDefinition::primaryBufferBit == 8) &&
00063 (!isSupported8bitPrimaryBuffer())){
00064 ErrorOut("SoundCapacity::checkCapacity() "
00065 "8bitプライマリバッファがサポートされていません");
00066 return false;
00067 }
00068 if((SoundDefinition::primaryBufferBit == 16) &&
00069 (!isSupported16bitPrimaryBuffer())){
00070 ErrorOut("SoundCapacity::checkCapacity() "
00071 "16bitプライマリバッファがサポートされていません");
00072 return false;
00073 }
00074 if(SoundDefinition::primaryBufferStereo){
00075 if(!isSupportedStereoPrimaryBuffer()){
00076 ErrorOut("SoundCapacity::checkCapacity() "
00077 "ステレオプライマリバッファがサポートされていません");
00078 return false;
00079 }
00080 }else{
00081 if(!isSupportedMonauralPrimaryBuffer()){
00082 ErrorOut("SoundCapacity::checkCapacity() "
00083 "モノラルプライマリバッファがサポートされていません");
00084 return false;
00085 }
00086 }
00087
00088 if((SoundDefinition::secondaryBufferBit == 8) &&
00089 (!isSupported8bitSecondaryBuffer())){
00090 ErrorOut("SoundCapacity::checkCapacity() "
00091 "8bitセカンダリバッファがサポートされていません");
00092 return false;
00093 }
00094 if((SoundDefinition::secondaryBufferBit == 16) &&
00095 (!isSupported16bitSecondaryBuffer())){
00096 ErrorOut("SoundCapacity::checkCapacity() "
00097 "16bitセカンダリバッファがサポートされていません");
00098 return false;
00099 }
00100 if(!isSupportedStereoSecondaryBuffer()){
00101 ErrorOut("SoundCapacity::checkCapacity() "
00102 "ステレオセカンダリバッファがサポートされていません");
00103 return false;
00104 }
00105 if(!isSupportedMonauralSecondaryBuffer()){
00106 ErrorOut("SoundCapacity::checkCapacity() "
00107 "モノラルセカンダリバッファがサポートされていません");
00108 return false;
00109 }
00110 if(SoundDefinition::secondaryBufferRate > getMaxSecondarySampleRate()){
00111 ErrorOut("SoundCapacity::checkCapacity() "
00112 "セカンダリバッファのサンプリングレートが大きすぎます");
00113 return false;
00114 }
00115 if(SoundDefinition::secondaryBufferRate < getMinSecondarySampleRate()){
00116 ErrorOut("SoundCapacity::checkCapacity() "
00117 "セカンダリバッファのサンプリングレートが小さすぎます");
00118 return false;
00119 }
00120 return true;
00121 }
00122
00123
00124 String SoundCapacity::toString() const{
00125 String result, temp;
00126 result += "Microsoft認定ドライバ " +
00127 getBoolString(isCertifiedDriver()) + "\n";
00128 result += "連続的な周波数設定 " +
00129 getBoolString(isSupportedContinuousRate()) + "\n";
00130 result += "エミュレートドライバ " +
00131 getBoolString(isEmulatedDriver()) + "\n";
00132 result += "16bitプライマリバッファ " +
00133 getBoolString(isSupported16bitPrimaryBuffer()) + "\n";
00134 result += "8bitプライマリバッファ " +
00135 getBoolString(isSupported8bitPrimaryBuffer()) + "\n";
00136 result += "モノラルプライマリバッファ " +
00137 getBoolString(isSupportedMonauralPrimaryBuffer()) + "\n";
00138 result += "ステレオプライマリバッファ " +
00139 getBoolString(isSupportedStereoPrimaryBuffer()) + "\n";
00140 result += "16bitセカンダリバッファ " +
00141 getBoolString(isSupported16bitSecondaryBuffer()) + "\n";
00142 result += "8bitセカンダリバッファ " +
00143 getBoolString(isSupported8bitSecondaryBuffer()) + "\n";
00144 result += "モノラルセカンダリバッファ " +
00145 getBoolString(isSupportedMonauralSecondaryBuffer()) + "\n";
00146 result += "ステレオセカンダリバッファ " +
00147 getBoolString(isSupportedStereoSecondaryBuffer()) + "\n";
00148
00149 temp.format("セカンダリ最大サンプリングレート %5uHz\n",
00150 getMaxSecondarySampleRate());
00151 result += temp;
00152 temp.format("セカンダリ最小サンプリングレート %5uHz\n",
00153 getMinSecondarySampleRate());
00154 result += temp;
00155
00156 return result;
00157 }
00158
00159 }
00160