Esempio n. 1
0
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;
}
Esempio n. 2
0
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--;
		}
	}
}
Esempio n. 3
0
/* Plays a song. */
void playSong( const char* fileName )
{
	stopSong( );

	currMusic = Mix_LoadMUS( fileName );
	if( currMusic != NULL ) {
		Mix_PlayMusic( currMusic, -1 );
	}
}
Esempio n. 4
0
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);
}
Esempio n. 5
0
void shutDownMixer( )
{
	stopSong( );

	while( Mix_Init( 0 ) ) {
		Mix_Quit( );
	}

	Mix_CloseAudio( );
}
Esempio n. 6
0
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();

	}
}
Esempio n. 7
0
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;
}
Esempio n. 8
0
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;
}
Esempio n. 9
0
PlaybackWidget::~PlaybackWidget()
{
    stopSong();
}
Esempio n. 10
0
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;
}
Esempio n. 11
0
value ocaml_stop (value v)
{
    stopSong(systemSong);
    return v;
}
Esempio n. 12
0
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()));
}