int sys_writeaudio(void) { int size; char *buf; //soundNode的数据大小 int bufsize = DMA_BUF_NUM*DMA_BUF_SIZE; //获取待播放的数据和数据大小 if (argint(1, &size) < 0 || argptr(0, &buf, size) < 0) return -1; if (datacount == 0) memset(&audiobuf[bufcount], 0, sizeof(struct soundNode)); //若soundNode的剩余大小大于数据大小,将数据写入soundNode中 if (bufsize - datacount > size) { memmove(&audiobuf[bufcount].data[datacount], buf, size); audiobuf[bufcount].flag = PCM_OUT | PROCESSED; datacount += size; } else { int temp = bufsize - datacount,i; //soundNode存满后调用audioplay进行播放 memmove(&audiobuf[bufcount].data[datacount], buf, temp); audiobuf[bufcount].flag = PCM_OUT; cprintf("sys_writeaudio\n"); addSound(&audiobuf[bufcount]); int flag = 1; //寻找一个已经被处理的soundNode,将剩余数据戏写入 while(flag == 1) { for (i = 0; i < 3; ++i) { if ((audiobuf[i].flag & PROCESSED) == PROCESSED) { memset(&audiobuf[i], 0, sizeof(struct soundNode)); if (bufsize > size - temp) { memmove(&audiobuf[i].data[0], (buf +temp), (size-temp)); audiobuf[i].flag = PCM_OUT | PROCESSED; datacount = size - temp; bufcount = i; flag = -1; break; } else { memmove(&audiobuf[i].data[0], (buf +temp), bufsize); temp = temp + bufsize; audiobuf[i].flag = PCM_OUT; cprintf("sys_writeaudio\n"); addSound(&audiobuf[i]); } } } } } return 0; }
void Audio3DTest::update(float elapsedTime) { float time = (float)elapsedTime / 1000.0f; _gamepad->update(elapsedTime); Vector2 move; if (_moveFlags != 0) { // Forward motion if (_moveFlags & MOVE_FORWARD) { move.y = 1; } else if (_moveFlags & MOVE_BACKWARD) { move.y = -1; } // Strafing if (_moveFlags & MOVE_LEFT) { move.x = 1; } else if (_moveFlags & MOVE_RIGHT) { move.x = -1; } move.normalize(); // Up and down if (_moveFlags & MOVE_UP) { _fpCamera.moveUp(time * UP_DOWN_SPEED); } else if (_moveFlags & MOVE_DOWN) { _fpCamera.moveDown(time * UP_DOWN_SPEED); } } else if (_gamepad->isJoystickActive(0)) { _gamepad->getJoystickAxisValues(0, &move); move.x = -move.x; } if (!move.isZero()) { move.scale(time * MOVE_SPEED); _fpCamera.moveForward(move.y); _fpCamera.moveLeft(move.x); } if (!_buttonPressed && _gamepad->getButtonState(BUTTON_A) == Gamepad::BUTTON_PRESSED) { addSound("footsteps.wav"); } _buttonPressed = _gamepad->getButtonState(BUTTON_A) == Gamepad::BUTTON_PRESSED; }
void ofxFlashLibrary :: addAsset( string assetID, string assetPath, int assetType ) { if( assetType == OFX_FLASH_LIBRARY_TYPE_IMAGE ) { addImage( assetPath, assetID ); } else if( assetType == OFX_FLASH_LIBRARY_TYPE_VIDEO ) { addVideo( assetPath, assetID ); } else if( assetType == OFX_FLASH_LIBRARY_TYPE_SOUND ) { addSound( assetPath, assetID ); } }
void AssetManager::setup(ofxXmlSettings& XML) { // load character-images: string tempFileName = XML.getValue("GAME:MAP:PLAYERS:PLAYER_1:SPRITESHEET", ""); if(addImage(tempFileName, tempFileName, CHARACTER)) cout << "Added " << tempFileName << " to character-images" << endl; tempFileName = XML.getValue("GAME:MAP:PLAYERS:PLAYER_2:SPRITESHEET", ""); if(addImage(tempFileName, tempFileName, CHARACTER)) cout << "Added " << tempFileName << " to character-images" << endl; tempFileName = XML.getValue("GAME:MAP:PLAYERS:ENEMY_1:SPRITESHEET", ""); if(addImage(tempFileName, tempFileName, CHARACTER)) cout << "Added " << tempFileName << " to character-images" << endl; // get grid-size of the map: int tileCountX = XML.getValue("GAME:MAP:GRID:X", 0); int tileCountY = XML.getValue("GAME:MAP:GRID:Y", 0); // load tile-images: XML.pushTag("GAME"); XML.pushTag("MAP"); XML.pushTag("TILES"); XML.pushTag("DATA"); for(int i = 0; i < tileCountX * tileCountY; i++) { string tempFileName = XML.getValue("TILE:PATH", "error.png", i); if(addImage(tempFileName, tempFileName, TILE)) cout << "Added " << tempFileName << " to tile-images" << endl; } XML.popTag(); // DATA XML.popTag(); // TILES XML.popTag(); // MAP XML.popTag(); // GAME // load background-music: string bgMusicPath = XML.getValue("GAME:SETTINGS:BACKGROUND_MUSIC", ""); if(addSound(bgMusicPath, bgMusicPath)) { cout << "Added " << bgMusicPath << " as background-music" << endl; } printf("AssetManager: Done with setup()\n"); }
void World::loadExternalSounds(Common::String fname) { Common::File in; in.open(fname); if (!in.isOpen()) { warning("Cannot load sound file <%s>", fname.c_str()); return; } in.close(); Common::MacResManager resMan; resMan.open(fname); Common::MacResIDArray resArray; Common::SeekableReadStream *res; Common::MacResIDArray::const_iterator iter; resArray = resMan.getResIDArray(MKTAG('A','S','N','D')); for (iter = resArray.begin(); iter != resArray.end(); ++iter) { res = resMan.getResource(MKTAG('A','S','N','D'), *iter); addSound(new Sound(resMan.getResName(MKTAG('A','S','N','D'), *iter), res)); } }
Fusion_Button::Fusion_Button(char *filename, QGraphicsItem *parent){ setPixmap(QPixmap(filename)); //constructor addSound("Combine", "resources/sounds/fusion.wav"); addSound("Fail", "resources/sounds/unablebutton.wav"); }
void GlkInterface::initialize() { uint width, height; /* * Init glk stuff */ // monor glk_stylehint_set(wintype_AllTypes, style_Preformatted, stylehint_Proportional, 0); glk_stylehint_set(wintype_AllTypes, style_Preformatted, stylehint_Weight, 0); glk_stylehint_set(wintype_AllTypes, style_Preformatted, stylehint_Oblique, 0); // monob glk_stylehint_set(wintype_AllTypes, style_Subheader, stylehint_Proportional, 0); glk_stylehint_set(wintype_AllTypes, style_Subheader, stylehint_Weight, 1); glk_stylehint_set(wintype_AllTypes, style_Subheader, stylehint_Oblique, 0); // monoi glk_stylehint_set(wintype_AllTypes, style_Alert, stylehint_Proportional, 0); glk_stylehint_set(wintype_AllTypes, style_Alert, stylehint_Weight, 0); glk_stylehint_set(wintype_AllTypes, style_Alert, stylehint_Oblique, 1); // monoz glk_stylehint_set(wintype_AllTypes, style_BlockQuote, stylehint_Proportional, 0); glk_stylehint_set(wintype_AllTypes, style_BlockQuote, stylehint_Weight, 1); glk_stylehint_set(wintype_AllTypes, style_BlockQuote, stylehint_Oblique, 1); // propr glk_stylehint_set(wintype_TextBuffer, style_Normal, stylehint_Proportional, 1); glk_stylehint_set(wintype_TextGrid, style_Normal, stylehint_Proportional, 0); glk_stylehint_set(wintype_AllTypes, style_Normal, stylehint_Weight, 0); glk_stylehint_set(wintype_AllTypes, style_Normal, stylehint_Oblique, 0); // propb glk_stylehint_set(wintype_TextBuffer, style_Header, stylehint_Proportional, 1); glk_stylehint_set(wintype_TextGrid, style_Header, stylehint_Proportional, 0); glk_stylehint_set(wintype_AllTypes, style_Header, stylehint_Weight, 1); glk_stylehint_set(wintype_AllTypes, style_Header, stylehint_Oblique, 0); // propi glk_stylehint_set(wintype_TextBuffer, style_Emphasized, stylehint_Proportional, 1); glk_stylehint_set(wintype_TextGrid, style_Emphasized, stylehint_Proportional, 0); glk_stylehint_set(wintype_AllTypes, style_Emphasized, stylehint_Weight, 0); glk_stylehint_set(wintype_AllTypes, style_Emphasized, stylehint_Oblique, 1); // propi glk_stylehint_set(wintype_TextBuffer, style_Note, stylehint_Proportional, 1); glk_stylehint_set(wintype_TextGrid, style_Note, stylehint_Proportional, 0); glk_stylehint_set(wintype_AllTypes, style_Note, stylehint_Weight, 1); glk_stylehint_set(wintype_AllTypes, style_Note, stylehint_Oblique, 1); /* * Get the screen size */ gos_lower = glk_window_open(0, 0, 0, wintype_TextGrid, 0); if (!gos_lower) gos_lower = glk_window_open(0, 0, 0, wintype_TextBuffer, 0); glk_window_get_size(gos_lower, &width, &height); glk_window_close(gos_lower, nullptr); gos_channel = nullptr; /* * Icky magic bit setting */ if (h_version == V3 && _tandyBit) h_config |= CONFIG_TANDY; if (h_version == V3 && gos_upper) h_config |= CONFIG_SPLITSCREEN; if (h_version == V3 && !gos_upper) h_config |= CONFIG_NOSTATUSLINE; if (h_version >= V4) h_config |= CONFIG_BOLDFACE | CONFIG_EMPHASIS | CONFIG_FIXED | CONFIG_TIMEDINPUT | CONFIG_COLOUR; if (h_version >= V5) h_flags &= ~(GRAPHICS_FLAG | MOUSE_FLAG | MENU_FLAG); if ((h_version >= 5) && (h_flags & SOUND_FLAG)) h_flags |= SOUND_FLAG; if ((h_version == 3) && (h_flags & OLD_SOUND_FLAG)) h_flags |= OLD_SOUND_FLAG; if ((h_version == 6) && (_sound != 0)) h_config |= CONFIG_SOUND; if (h_version >= V5 && (h_flags & UNDO_FLAG)) if (_undo_slots == 0) h_flags &= ~UNDO_FLAG; h_screen_cols = width; h_screen_rows = height; h_screen_height = h_screen_rows; h_screen_width = h_screen_cols; h_font_width = 1; h_font_height = 1; // Must be after screen dimensions are computed if (g_conf->_graphics) { if (_blorb) // Blorb file containers allow graphics h_flags |= GRAPHICS_FLAG; else if ((h_version == V6 || _storyId == BEYOND_ZORK) && initPictures()) // Earlier Infocom game with picture files h_flags |= GRAPHICS_FLAG; } // Use the ms-dos interpreter number for v6, because that's the // kind of graphics files we understand h_interpreter_number = h_version == 6 ? INTERP_MSDOS : INTERP_AMIGA; h_interpreter_version = 'F'; // Set these per spec 8.3.2. h_default_foreground = WHITE_COLOUR; h_default_background = BLACK_COLOUR; if (h_flags & COLOUR_FLAG) h_flags &= ~COLOUR_FLAG; /* * Open the windows */ if (_storyId == BEYOND_ZORK) showBeyondZorkTitle(); gos_lower = glk_window_open(0, 0, 0, wintype_TextBuffer, 0); gos_upper = glk_window_open(gos_lower, winmethod_Above | winmethod_Fixed, 0, wintype_TextGrid, 0); glk_set_window(gos_lower); gos_curwin = gos_lower; // Set the screen colors garglk_set_zcolors(_defaultForeground, _defaultBackground); // Add any sound folder or zip addSound(); }
void ResourceManager::loadFilesFromDirectory(std::string folder) { std::cout << "loading images" << std::endl; std::vector<std::string> names; std::string specPath = folder + "\\*.*"; folder += "\\"; WIN32_FIND_DATA fd; //declare variable to hold file data HANDLE hFind = FindFirstFile(specPath.c_str(), &fd); //find first file and store data if(hFind != INVALID_HANDLE_VALUE) { //if that data is not corrupt do { // read all (real) files in current folder // , delete '!' read other 2 default folder . and .. if(! (fd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) ) { names.push_back(fd.cFileName); } }while(FindNextFile(hFind, &fd)); //find the next file FindClose(hFind); } //at this point "names" vector has all file names in directory for(int indice = 0; indice < names.size(); indice++) { int dotLoc = names[indice].size(); //location of '.' in string std::string extension = ""; //parsed file extension std::string notExtension = ""; //just the name for(int ii = 0; ii<names[indice].size(); ii++) { if(names[indice][ii] == '.') //if the character is a period { dotLoc = ii; //store that indice } else if(ii > dotLoc) //if the indice is after the period { extension+= names[indice][ii]; //store the character } else if(ii < dotLoc) { notExtension+= names[indice][ii]; } } std::string fullPath = folder+names[indice]; if(extension == "jpg" || //Checking for all texture file extensions extension == "jpeg" || extension == "png" || extension == "bmp") { addTexture(fullPath, notExtension); //if so load texture from that path std::cout << notExtension << std::endl; } else if(extension == "ttf") { addFont(fullPath, notExtension, 32); } else if(extension == ".wav" || //checks for valid sound extensions extension == ".aif" || extension == ".mp3" || extension == ".mp2" || extension == ".ogg" || extension == ".raw") { addSound(fullPath, notExtension); } } }
bool World::loadWorld(Common::MacResManager *resMan) { Common::MacResIDArray resArray; Common::SeekableReadStream *res; Common::MacResIDArray::const_iterator iter; // Dumping interpreter code #if 1 res = resMan->getResource(MKTAG('C','O','D','E'), 1); warning("code size: %d", res->size()); byte *buf = (byte *)malloc(res->size()); res->read(buf, res->size()); Common::DumpFile out; out.open("code.bin"); out.write(buf, res->size()); out.close(); free(buf); delete res; #endif if ((resArray = resMan->getResIDArray(MKTAG('G','C','O','D'))).size() == 0) return false; // Load global script res = resMan->getResource(MKTAG('G','C','O','D'), resArray[0]); _globalScript = new Script(res); // TODO: read creator // Load main configuration if ((resArray = resMan->getResIDArray(MKTAG('V','E','R','S'))).size() == 0) return false; _name = resMan->getBaseFileName(); if (resArray.size() > 1) warning("Too many VERS resources"); if (!resArray.empty()) { debug(3, "Loading version info"); res = resMan->getResource(MKTAG('V','E','R','S'), resArray[0]); res->skip(10); byte b = res->readByte(); _weaponMenuDisabled = (b != 0); if (b != 0 && b != 1) error("Unexpected value for weapons menu"); res->skip(3); _aboutMessage = readPascalString(res); if (!scumm_stricmp(resMan->getBaseFileName().c_str(), "Scepters")) res->skip(1); // ???? _soundLibrary1 = readPascalString(res); _soundLibrary2 = readPascalString(res); delete res; } Common::String *message; if ((message = loadStringFromDITL(resMan, 2910, 1)) != NULL) { message->trim(); debug(2, "_gameOverMessage: %s", message->c_str()); _gameOverMessage = message; } if ((message = loadStringFromDITL(resMan, 2480, 3)) != NULL) { message->trim(); debug(2, "_saveBeforeQuitMessage: %s", message->c_str()); _saveBeforeQuitMessage = message; } if ((message = loadStringFromDITL(resMan, 2490, 3)) != NULL) { message->trim(); debug(2, "_saveBeforeCloseMessage: %s", message->c_str()); _saveBeforeCloseMessage = message; } if ((message = loadStringFromDITL(resMan, 2940, 2)) != NULL) { message->trim(); debug(2, "_revertMessage: %s", message->c_str()); _revertMessage = message; } // Load scenes resArray = resMan->getResIDArray(MKTAG('A','S','C','N')); debug(3, "Loading %d scenes", resArray.size()); for (iter = resArray.begin(); iter != resArray.end(); ++iter) { res = resMan->getResource(MKTAG('A','S','C','N'), *iter); Scene *scene = new Scene(resMan->getResName(MKTAG('A','S','C','N'), *iter), res); res = resMan->getResource(MKTAG('A','C','O','D'), *iter); if (res != NULL) scene->_script = new Script(res); res = resMan->getResource(MKTAG('A','T','X','T'), *iter); if (res != NULL) { scene->_textBounds = readRect(res); scene->_fontType = res->readUint16BE(); scene->_fontSize = res->readUint16BE(); Common::String text; while (res->pos() < res->size()) { char c = res->readByte(); if (c == 0x0d) c = '\n'; text += c; } scene->_text = text; delete res; } addScene(scene); } // Load Objects resArray = resMan->getResIDArray(MKTAG('A','O','B','J')); debug(3, "Loading %d objects", resArray.size()); for (iter = resArray.begin(); iter != resArray.end(); ++iter) { res = resMan->getResource(MKTAG('A','O','B','J'), *iter); addObj(new Obj(resMan->getResName(MKTAG('A','O','B','J'), *iter), res)); } // Load Characters resArray = resMan->getResIDArray(MKTAG('A','C','H','R')); debug(3, "Loading %d characters", resArray.size()); for (iter = resArray.begin(); iter != resArray.end(); ++iter) { res = resMan->getResource(MKTAG('A','C','H','R'), *iter); Chr *chr = new Chr(resMan->getResName(MKTAG('A','C','H','R'), *iter), res); addChr(chr); // TODO: What if there's more than one player character? if (chr->_playerCharacter) _player = chr; } // Load Sounds resArray = resMan->getResIDArray(MKTAG('A','S','N','D')); debug(3, "Loading %d sounds", resArray.size()); for (iter = resArray.begin(); iter != resArray.end(); ++iter) { res = resMan->getResource(MKTAG('A','S','N','D'), *iter); addSound(new Sound(resMan->getResName(MKTAG('A','S','N','D'), *iter), res)); } if (!_soundLibrary1.empty()) { loadExternalSounds(_soundLibrary1); } if (!_soundLibrary2.empty()) { loadExternalSounds(_soundLibrary2); } // Load Patterns res = resMan->getResource(MKTAG('P','A','T','#'), 900); if (res != NULL) { int count = res->readUint16BE(); debug(3, "Loading %d patterns", count); for (int i = 0; i < count; i++) { byte *pattern = (byte *)malloc(8); res->read(pattern, 8); _patterns->push_back(pattern); } delete res; } else { /* Enchanted Scepters did not use the PAT# resource for the textures. */ res = resMan->getResource(MKTAG('C','O','D','E'), 1); if (res != NULL) { res->skip(0x55ac); for (int i = 0; i < 29; i++) { byte *pattern = (byte *)malloc(8); res->read(pattern, 8); _patterns->push_back(pattern); } } delete res; } res = resMan->getResource(MKTAG('M','E','N','U'), 2001); if (res != NULL) { Common::StringArray *menu = readMenu(res); _aboutMenuItemName.clear(); Common::String string = menu->operator[](1); for (uint i = 0; i < string.size() && string[i] != ';'; i++) // Read token _aboutMenuItemName += string[i]; delete menu; delete res; } res = resMan->getResource(MKTAG('M','E','N','U'), 2004); if (res != NULL) { Common::StringArray *menu = readMenu(res); _commandsMenuName = menu->operator[](0); _commandsMenu = menu->operator[](1); delete menu; delete res; } res = resMan->getResource(MKTAG('M','E','N','U'), 2005); if (res != NULL) { Common::StringArray *menu = readMenu(res); _weaponsMenuName = menu->operator[](0); delete menu; delete res; } // TODO: Read Apple menu and get the name of that menu item.. // store global info in state object for use with save/load actions //world.setCurrentState(initialState); // pass off the state object to the world return true; }
void AudioEngine::play2DUniqueSound(char* source) { ISoundSource* i = addSound(source); engine->play2D(i); }
void AudioEngine::loadCommonSounds() { ISoundSource *jump = addSound("Audio/jump1.ogg"); }
void Audio3DTest::keyEvent(Keyboard::KeyEvent evt, int key) { if (evt == Keyboard::KEY_PRESS) { switch (key) { case Keyboard::KEY_W: _moveFlags |= MOVE_FORWARD; break; case Keyboard::KEY_S: _moveFlags |= MOVE_BACKWARD; break; case Keyboard::KEY_A: _moveFlags |= MOVE_LEFT; break; case Keyboard::KEY_D: _moveFlags |= MOVE_RIGHT; break; case Keyboard::KEY_Q: _moveFlags |= MOVE_DOWN; break; case Keyboard::KEY_E: _moveFlags |= MOVE_UP; break; case Keyboard::KEY_PG_UP: _fpCamera.rotate(0, MATH_PIOVER4); break; case Keyboard::KEY_PG_DOWN: _fpCamera.rotate(0, -MATH_PIOVER4); break; case Keyboard::KEY_ONE: case Keyboard::KEY_SPACE: addSound("footsteps.wav"); break; } } else if (evt == Keyboard::KEY_RELEASE) { switch (key) { case Keyboard::KEY_W: _moveFlags &= ~MOVE_FORWARD; break; case Keyboard::KEY_S: _moveFlags &= ~MOVE_BACKWARD; break; case Keyboard::KEY_A: _moveFlags &= ~MOVE_LEFT; break; case Keyboard::KEY_D: _moveFlags &= ~MOVE_RIGHT; break; case Keyboard::KEY_Q: _moveFlags &= ~MOVE_DOWN; break; case Keyboard::KEY_E: _moveFlags &= ~MOVE_UP; break; } } }
int main(int argc, char * argv[]) { // Lets find the bundle first // All this jazz simply deals with loading the bundle LOAD_API_BUNDLE; RETAIN_API_BUNDLE_VAR; initEnvFunc initEnv = set_initEnvFunc(API_BUNDLE_VAR); destroyEnvFunc destroyEnv = set_destroyEnvFunc(API_BUNDLE_VAR); startJuceFunc startJuce = set_startJuceFunc(API_BUNDLE_VAR); stopJuceFunc stopJuce = set_stopJuceFunc(API_BUNDLE_VAR); addSoundToRendererBankFunc addSound = set_addSoundToRendererBankFunc(API_BUNDLE_VAR); deactivateSoundInRendererBankFunc deactivateSoundInRendererBank = set_deactivateSoundInRendererBankFunc(API_BUNDLE_VAR); std::string asset_path(TEST_ASSET_PATH); std::string asset_one(asset_path + std::string("/ad-demo.wav")); std::string asset_two(asset_path + std::string("/cat.wav")); std::vector<char> asset_one_str(asset_one.begin(), asset_one.end()); asset_one_str.push_back('\0'); std::vector<char> asset_two_str(asset_two.begin(), asset_two.end()); asset_two_str.push_back('\0'); // ---------------------------------------------------------------------- // // ---------------------------------------------------------------------- // // ---------------------------------------------------------------------- // #define TESTING_JUCE_PLAYBACK #ifdef TESTING_JUCE_PLAYBACK initEnv(); addSound(&asset_one_str[0]); addSound(&asset_two_str[0]); startJuce(); sleep(6); // Go away cat! deactivateSoundInRendererBank(&asset_two_str[0]); sleep(6); addSound(&asset_two_str[0]); sleep(3); stopJuce(); deactivateSoundInRendererBank(&asset_one_str[0]); deactivateSoundInRendererBank(&asset_two_str[0]); destroyEnv(); #else initEnv(); addSound(&asset_one_str[0]); sleep(2); removeSoundFromRendererBank(&asset_one_str[0]); destroyEnv(); #endif // ---------------------------------------------------------------------- // // ---------------------------------------------------------------------- // // ---------------------------------------------------------------------- // printf("Releasing the bundle\n"); RELEASE_API_BUNDLE_VAR; printf("Calling it a day\n"); return 0; }