bool KSoundManager::playSong(std::string name, float volume, float stereo, bool loop) { if(mSilent) return true; //printf("play %s, with looping = %i\n", name.c_str(), (int) loop); //stop any current song if(song) stopSong(); // don't even bother if no sound file specified if ("" == name || "data/music/ " == name) return false; result = mSystem->createSound(name.c_str(), FMOD_CREATESTREAM | FMOD_SOFTWARE | FMOD_2D, 0, &song); if (!song) { printf("FMOD Error loading %s!\n", name.c_str()); checkErrors(); return false; } //extract the important part out of the name int startPos = (int)name.find_last_of("/"); mCurrentSongName = name.substr(startPos + 1, name.size() - 4 - startPos - 1); mMusicVolume = volume; song->setMode(loop ? FMOD_LOOP_NORMAL : FMOD_LOOP_OFF); mSystem->playSound(FMOD_CHANNEL_FREE, song, false, &songChannel); songChannel->setPan(stereo); songChannel->setVolume(volume); songChannel->getFrequency(&songBaseFrequency); //get the base frequency for modulation later songChannel->setPriority(0); //the music is the top priority in SkyPaint // for now, just return true - of course this needs to be changed return true; }
void KSoundManager::update(float dt) { if(mSilent) return; mSystem->update(); if (fading) { musicFadeTimeCounter -= dt; if (musicFadeTimeCounter < 0) { printf("fade song to %s\n", nextSong.c_str()); stopSong(); if(nextSong != "") playSong(nextSong, mMusicVolume, 0); nextSong = ""; fading = false; musicFadeTimeCounter = 0.0; musicFadeTime = 0.0; } else { songChannel->setVolume(mMusicVolume * musicFadeTimeCounter/musicFadeTime); } } //if we have a play list...well, use it if(mUsePlayList && mPlayList.size()) { unsigned int trackTime = 0; if(songChannel) { bool playing; songChannel->isPlaying(&playing); if(!playing) mTrackTime = 99999; else { songChannel->getPosition(&trackTime, FMOD_TIMEUNIT_MS); mTrackTime = 0.001 * trackTime; } } else mTrackTime = 99999; //if the song stops, move on if(mTrackTime > mPlayList[mTrack].trackTime) skipSong(); } for(int i = 0; i < (int)mDelayedSounds.size(); i++) { mDelayedSounds[i].delay-= dt; if(mDelayedSounds[i].delay <= 0) { mDelayedSounds[i].sound->setPaused(false); mDelayedSounds[i] = mDelayedSounds.back(); mDelayedSounds.pop_back(); i--; } } }
/* Plays a song. */ void playSong( const char* fileName ) { stopSong( ); currMusic = Mix_LoadMUS( fileName ); if( currMusic != NULL ) { Mix_PlayMusic( currMusic, -1 ); } }
void PlaybackWidget::changeSong(QString songPath) { stopSong(); curchan = BASS_StreamCreateFile(false,songPath.utf16(),0,0, BASS_SAMPLE_FLOAT | BASS_STREAM_AUTOFREE | BASS_UNICODE); BASS_ChannelPlay(curchan,false); cursongblength = BASS_ChannelGetLength(curchan, BASS_POS_BYTE); cursonglength = BASS_ChannelBytes2Seconds(curchan,cursongblength); changeState(PLAYING); }
void shutDownMixer( ) { stopSong( ); while( Mix_Init( 0 ) ) { Mix_Quit( ); } Mix_CloseAudio( ); }
void SoundManager::update(float dt) {if(mSilent) return; mSystem->update(); if (fading && song) { musicFadeTimeCounter -= dt; if (musicFadeTimeCounter < 0) { stopSong(); if(nextSong != "") playSong(nextSong, 1, 0); nextSong = ""; fading = false; musicFadeTimeCounter = 0.0; musicFadeTime = 0.0; } else { songChannel->setVolume(mMusicVolume * musicFadeTimeCounter/musicFadeTime); } } //if we have a play list...well, use it if(mUsePlayList && mPlayList.size()) { unsigned int trackTime = 0; if(songChannel) { bool playing; songChannel->isPlaying(&playing); if(!playing) mTrackTime = 99999; else { songChannel->getPosition(&trackTime, FMOD_TIMEUNIT_MS); //if tracktime is zero and the last tracktime is also zero // if(mTrackTime == 0 && trackTime == 0) // mTrackTime = 9999; // else mTrackTime = 0.001 * trackTime; } } else mTrackTime = 99999; //if the song stops, move on // printf("%f/%f\n", mTrackTime, mPlayList[mTrack].trackTime); if(mTrackTime > mPlayList[mTrack].trackTime) skipSong(); } }
void PlaybackWidget::changeState(PlaybackWidget::Playstate s) { //No need to do anything if there isn't a song playing. if(curchan == NULL) return; if(s == PLAYING) { ui.playBtn->setIcon(pause); BASS_ChannelPlay(curchan,false); updateTimer->start(); } else if(s == PAUSED) { ui.playBtn->setIcon(play); BASS_ChannelPause(curchan); } else if(s == STOPPED) stopSong(); state = s; }
int rowTutor::qt_metacall(QMetaObject::Call _c, int _id, void **_a) { _id = QMainWindow::qt_metacall(_c, _id, _a); if (_id < 0) return _id; if (_c == QMetaObject::InvokeMetaMethod) { switch (_id) { case 0: playSong(); break; case 1: stopSong(); break; case 2: playTutorSong((*reinterpret_cast< QList<char>(*)>(_a[1]))); break; case 3: playNoteGUI((*reinterpret_cast< char(*)>(_a[1]))); break; case 4: noteCDown(); break; case 5: noteDDown(); break; case 6: noteEDown(); break; case 7: noteFDown(); break; case 8: noteGDown(); break; case 9: noteHiCDown(); break; case 10: key1(); break; case 11: key2(); break; case 12: key3(); break; case 13: key4(); break; case 14: key5(); break; case 15: key6(); break; case 16: key7(); break; case 17: key8(); break; case 18: key9(); break; case 19: key10(); break; case 20: key11(); break; case 21: key12(); break; case 22: key13(); break; case 23: key14(); break; case 24: key15(); break; case 25: key16(); break; case 26: key17(); break; case 27: key18(); break; default: ; } _id -= 28; } return _id; }
PlaybackWidget::~PlaybackWidget() { stopSong(); }
void AmigaSound::playSong(int16 song) { debug(2, "Sound::playSong %d override %d", song, _lastOverride); if (song < 0) { stopSong(); return; } // remap song numbers for the Amiga switch (song) { case 1: case 2: song = 39; break; case 37: case 52: case 196: song = 90; break; case 38: case 89: song = 3; break; case 24: case 158: song = 117; break; case 71: case 72: case 73: case 75: song = 133; break; case 203: song = 67; break; case 145: song = 140; break; case 53: case 204: song = 44; break; case 136: case 142: case 179: song = 86; break; case 101: case 102: case 143: song = 188; break; case 65: case 62: song = 69; break; case 118: case 119: song = 137; break; case 130: case 131: song = 59; break; case 174: case 175: song = 57; break; case 171: case 121: song = 137; break; case 138: case 170: case 149: song = 28; break; case 122: case 180: case 83: case 98: song = 83; break; case 20: case 33: song = 34; break; case 29: case 35: song = 36; break; case 7: case 9: case 10: song = 11; break; case 110: song = 94; break; case 111: song = 95; break; case 30: song = 43; break; case 76: song = 27; break; case 194: case 195: song = 32; break; } if (_lastOverride != 32 && _lastOverride != 44) { if (playSpecialSfx(song)) { return; } } if (_lastOverride == song && _mixer->isSoundHandleActive(_modHandle)) { return; } switch (song) { // hotel case 39: playModule("HOTEL", 1); break; case 19: playModule("HOTEL", 3); break; case 34: playModule("HOTEL", 2); break; case 36: playModule("HOTEL", 4); _fanfareRestore = _lastOverride; _fanfareCount = 60; break; // jungle case 40: playModule("JUNG", 1); _fanfareRestore = _lastOverride; _fanfareCount = 80; _fluteCount = 100; break; case 3: playModule("JUNG", 2); _fluteCount = 100; break; // temple case 54: playModule("TEMPLE", 1); break; case 12: playModule("TEMPLE", 2); break; case 11: playModule("TEMPLE", 3); break; case 31: playModule("TEMPLE", 4); _fanfareRestore = _lastOverride; _fanfareCount = 80; break; // floda case 41: playModule("FLODA", 4); _fanfareRestore = _lastOverride; _fanfareCount = 60; break; case 13: playModule("FLODA", 3); break; case 16: playModule("FLODA", 1); break; case 17: playModule("FLODA", 2); break; case 43: playModule("FLODA", 5); break; // end credits case 67: playModule("TITLE", 1); break; // intro credits case 88: playModule("TITLE", 1); break; // valley case 90: playModule("AWESTRUK", 1); break; // confrontation case 91: playModule("'JUNGLE'", 1); break; // Frank case 46: playModule("FRANK", 1); break; // trader bob case 6: playModule("BOB", 1); break; // azura case 44: playModule("AZURA", 1); break; // amazon fortress case 21: playModule("FORT", 1); break; // rocket case 32: playModule("ROCKET", 1); break; // robot case 92: playModule("ROBOT", 1); break; default: // song not available in the amiga version return; } _lastOverride = song; }
value ocaml_stop (value v) { stopSong(systemSong); return v; }
void MainWindow::createActions() //POST: Actions are initialized and connected to the appropriate slots for handling { //This is very repetitive. Format for creating an action: /* actionPointer = new QAction("n&ame", parent); //Initiliaze action of name // "name" with alt-shortcut indicated // by character following '&' actionPointer->setShorcut(tr("keyboard shortcut")); //Sets the action's shortcut // ex. "Ctrl+Alt+K" connect(actionPointer, SIGNAL(triggered), //When the action is triggered (via menu someWidgetPointer, SLOT(someSlot())); // click et al.), handle this via a slot */ //method of someWidget //If the action just switches some property on or off (true or false), one can use // actionPointer->setCheckable() to indicate this. To check if the property is on or off // use actionPointer->isChecked() // File menu actions openAct = new QAction("&Open", this); openAct->setShortcut(tr("Ctrl+O")); connect(openAct, SIGNAL(triggered()), this, SLOT(open())); enqueueAct = new QAction("&Add to Playlist", this); enqueueAct->setShortcut(tr("Ctrl+A")); connect(enqueueAct, SIGNAL(triggered()), this, SLOT(addToPlaylist())); quitAct = new QAction("&Quit", this); quitAct->setShortcut(tr("Ctrl+Q")); connect(quitAct, SIGNAL(triggered()), this, SLOT(quit())); // Controls toolbar actions pauseAct = new QAction(style()->standardIcon(QStyle::SP_MediaPause), tr("P&ause"), this); connect(pauseAct, SIGNAL(triggered()), myPlayer, SLOT(pause())); connect(pauseAct, SIGNAL(triggered()), glWindow, SLOT(pauseSong())); playAct = new QAction(style()->standardIcon(QStyle::SP_MediaPlay), "P&lay", this); connect(playAct, SIGNAL(triggered()), this, SLOT(resumeTest())); prevAct = new QAction(style()->standardIcon(QStyle::SP_MediaSkipBackward), "&Prev", this); connect(prevAct, SIGNAL(triggered()), this, SLOT(gotoPrevSong())); nextAct = new QAction(style()->standardIcon(QStyle::SP_MediaSkipForward), "&Next", this); connect(nextAct, SIGNAL(triggered()), this, SLOT(gotoNextSong())); stopAct = new QAction(style()->standardIcon(QStyle::SP_MediaStop), "&Stop", this); connect(stopAct, SIGNAL(triggered()), myPlayer, SLOT(stop())); connect(stopAct, SIGNAL(triggered()), glWindow, SLOT(stopSong())); // Visualization menu actions redAct = new QAction("Increase &Red", this); redAct->setShortcut(tr("Ctrl+R")); connect(redAct, SIGNAL(triggered()), glWindow, SLOT(IncreaseRed())); greenAct = new QAction("Increase &Green", this); greenAct->setShortcut(tr("Ctrl+G")); connect(greenAct, SIGNAL(triggered()), glWindow, SLOT(IncreaseGreen())); blueAct = new QAction("Increase &Blue", this); blueAct->setShortcut(tr("Ctrl+B")); connect(blueAct, SIGNAL(triggered()), glWindow, SLOT(IncreaseBlue())); prevVisAct = new QAction("&Previous Visualization", this); prevVisAct->setShortcut(tr("Ctrl+Z")); connect(prevVisAct, SIGNAL(triggered()), glWindow, SLOT(LastVisualization())); nextVisAct = new QAction("&Next Visualization", this); nextVisAct->setShortcut(tr("Ctrl+X")); connect(nextVisAct, SIGNAL(triggered()), glWindow, SLOT(NextVisualization())); fullScreenAct = new QAction("&Fullscreen", this); fullScreenAct->setShortcut(tr("Ctrl+F")); fullScreenAct->setCheckable(true); connect(fullScreenAct, SIGNAL(triggered()), this, SLOT(fullScreen())); //Playlist actions repeatOneAct = new QAction("Repeat &One", this); repeatOneAct->setShortcut(tr("Ctrl+T")); repeatOneAct->setCheckable(true); repeatAllAct = new QAction("Repeat &All", this); repeatAllAct->setShortcut(tr("Ctrl+Alt+T")); repeatAllAct->setCheckable(true); // About action aboutAct = new QAction("&About", this); connect(aboutAct, SIGNAL(triggered()), this, SLOT(about())); }