예제 #1
0
void GuiSound::Play() {
    switch (type) {
        case SOUND_PCM:
            xenon_sound_submit((void*)sound,length);
            break;
    }
#ifndef NO_SOUND
    int vol;

    switch (type) {
        case SOUND_PCM:
            vol = 255 * (volume / 100.0);
            voice = ASND_GetFirstUnusedVoice();
            if (voice >= 0)
                ASND_SetVoice(voice, VOICE_STEREO_16BIT, 48000, 0,
                    (u8 *) sound, length, vol, vol, NULL);
            break;

        case SOUND_OGG:
            voice = 0;
            if (loop)
                PlayOgg((char *) sound, length, 0, OGG_INFINITE_TIME);
            else
                PlayOgg((char *) sound, length, 0, OGG_ONE_TIME);
            SetVolumeOgg(255 * (volume / 100.0));
            break;
    }
#endif
}
예제 #2
0
/***
      gx_audio_Stop

     This function stops current Audio DMA process
     This is called when going back to Main Menu
 ***/
void gx_audio_Stop(void)
{
  /* restart menu audio processing */
  DSP_Unhalt();
  ASND_Init();
  ASND_Pause(0);
	
  /* play background music */
  if (Bg_music_ogg && !Shutdown)
  {
    PauseOgg(0);	
    PlayOgg((char *)Bg_music_ogg, Bg_music_ogg_size, 0, OGG_INFINITE_TIME);	
    SetVolumeOgg(((int)config.bgm_volume * 255) / 100);	
  }
}
예제 #3
0
int AalibPlay(int channel)
{
	if ((channel<1)||(channel>48))
	{
		return PSPAALIB_ERROR_INVALID_CHANNEL;
	}
	if (!channels[channel].initialized)
	{
		return PSPAALIB_ERROR_UNINITIALIZED_CHANNEL;
	}
	if (!AalibGetStopReason(channel))
	{
		return PSPAALIB_SUCCESS;
	}
	int hardwareChannel=GetFreeHardwareChannel();
	if (hardwareChannel==-1)
	{
		return PSPAALIB_WARNING_NO_FREE_CHANNELS;
	}
	hardwareChannels[hardwareChannel]=channel;
	sceKernelStartThread(threads[hardwareChannel],sizeof(int),(void*)(&hardwareChannel));
	if ((PSPAALIB_CHANNEL_WAV_1<=channel)&&(channel<=PSPAALIB_CHANNEL_WAV_32))
	{
		return PlayWav(channel-PSPAALIB_CHANNEL_WAV_1);
	}
	if ((PSPAALIB_CHANNEL_OGG_1<=channel)&&(channel<=PSPAALIB_CHANNEL_OGG_10))
	{
		return PlayOgg(channel-PSPAALIB_CHANNEL_OGG_1);
	}
	if ((PSPAALIB_CHANNEL_SCEMP3_1<=channel)&&(channel<=PSPAALIB_CHANNEL_SCEMP3_2))
	{
		return PlaySceMp3(channel-PSPAALIB_CHANNEL_SCEMP3_1);
	}
	if ((PSPAALIB_CHANNEL_AT3_1<=channel)&&(channel<=PSPAALIB_CHANNEL_AT3_2))
	{
		return PlayAt3(channel-PSPAALIB_CHANNEL_AT3_1);
	}
	return PSPAALIB_ERROR_INVALID_CHANNEL;
}
예제 #4
0
파일: cd_revol.c 프로젝트: Izhido/qrevpak
void CDAudio_Play(byte track, qboolean looping)
{
	int i, lf;
	trackinfo_t* tnod;
	int trackHdl;
	int newTrackDataLength;
	byte* newTrackData;

	if (!enabled)
		return;
	
	if (!cdValid)
	{
		CDAudio_GetAudioDiskInfo();
		if (!cdValid)
			return;
	}

	track = remap[track];

	if (track < 1 || track > maxTrack)
	{
		Con_DPrintf("CDAudio: Bad track number %u.\n", track);
		return;
	}

	i = track;

	if(cd_nofirst.value)
		i--;
	
	if (playing)
	{
		if (playTrack == track)
			return;
		CDAudio_Stop();
	}

	lf = -1;
	tnod = CDAudio_GetTrack(trackList, i - 1, &lf); 

	if(tnod == NULL)
	{
		Con_Printf("CDAudio: Can't locate track %i\n", track);
		return;
	}

	newTrackDataLength = Sys_FileOpenRead(tnod->track, &trackHdl);
	if(newTrackDataLength <= 0)
	{
		Con_Printf("CDAudio: Can't open track %i\n", track);
		return;
	};

	if(trackData == NULL)
	{
		trackData = Sys_Malloc(newTrackDataLength, "CDAudio_Play");
		trackDataSize = newTrackDataLength;
	} else if(trackDataSize < newTrackDataLength)
	{
		newTrackData = realloc(trackData, newTrackDataLength);
		if(newTrackData == NULL)
		{
			free(trackData);
			trackData = Sys_Malloc(newTrackDataLength, "CDAudio_Play");
		} else
		{
			trackData = newTrackData;
		};
		trackDataSize = newTrackDataLength;
	};
	trackDataLength = newTrackDataLength;

	Sys_FileRead(trackHdl, trackData, trackDataLength);
	Sys_FileClose(trackHdl);

	if(PlayOgg(trackData, trackDataLength, 0, looping ? OGG_INFINITE_TIME : OGG_ONE_TIME))
	{
		Con_Printf("CDAudio: Can't play track %i\n", track);
		return;
	};

	playLooping = looping;
	playTrack = track;
	playing = true;

	//Con_Printf("Now playing: %s\n", tnod->track);

	if (cdvolume == 0.0)
		CDAudio_Pause ();
}