Exemplo n.º 1
0
int GetRawBuffer(short* buf,int length,float amp,int channel)
{
	if ((channel<1)||(channel>48))
	{
		return PSPAALIB_ERROR_INVALID_CHANNEL;
	}
	if ((PSPAALIB_CHANNEL_WAV_1<=channel)&&(channel<=PSPAALIB_CHANNEL_WAV_32))
	{
		return GetBufferWav(buf,length,amp,channel-PSPAALIB_CHANNEL_WAV_1);
	}
	if ((PSPAALIB_CHANNEL_OGG_1<=channel)&&(channel<=PSPAALIB_CHANNEL_OGG_10))
	{
		return GetBufferOgg(buf,length,amp,channel-PSPAALIB_CHANNEL_OGG_1);
	}
	if ((PSPAALIB_CHANNEL_SCEMP3_1<=channel)&&(channel<=PSPAALIB_CHANNEL_SCEMP3_2))
	{
		return GetBufferSceMp3(buf,length,amp,channel-PSPAALIB_CHANNEL_SCEMP3_1);
	}
	if ((PSPAALIB_CHANNEL_AT3_1<=channel)&&(channel<=PSPAALIB_CHANNEL_AT3_2))
	{
		return GetBufferAt3(buf,length,amp,channel-PSPAALIB_CHANNEL_AT3_1);
	}
	return PSPAALIB_ERROR_INVALID_CHANNEL;
}
Exemplo n.º 2
0
int GetBufferWav(short* buf,int length,float amp,int channel)
{
	if ((channel<0)||(channel>31))
	{
		return PSPAALIB_ERROR_WAV_INVALID_CHANNEL;
	}
	if (streamsWav[channel].paused || !streamsWav[channel].initialized || streamsWav[channel].stopReason==PSPAALIB_STOP_END_OF_STREAM)
	{
		memset((char*)buf,0,4*length);
		return PSPAALIB_WARNING_PAUSED_BUFFER_REQUESTED;
	}
	int i,index;
	int realLength=length*streamsWav[channel].sigBytes*streamsWav[channel].numChannels*streamsWav[channel].sampleRate/PSP_SAMPLE_RATE;
	if (streamsWav[channel].dataPos+realLength>=streamsWav[channel].dataLength)
	{
		RewindWav(channel);
		if (!streamsWav[channel].autoloop)
		{
			streamsWav[channel].paused=TRUE;
			streamsWav[channel].stopReason=PSPAALIB_STOP_END_OF_STREAM;
			memset((char*)buf,0,4*length);
			return PSPAALIB_SUCCESS;
		}
		return GetBufferWav(buf,length,amp,channel);
	}
	if (streamsWav[channel].loadToRam)
	{
		for (i=0;i<length;i++)
		{
			if (streamsWav[channel].sigBytes==1)
			{
				index=streamsWav[channel].numChannels*(int)(i*streamsWav[channel].sampleRate/PSP_SAMPLE_RATE)+streamsWav[channel].dataPos;
				buf[2*i]=(streamsWav[channel].data[index]<<8)*amp;
				index+=((streamsWav[channel].numChannels>1)?1:0);
				buf[2*i+1]=(streamsWav[channel].data[index]<<8)*amp;
			}
			else if (streamsWav[channel].sigBytes==2)
			{
				index=streamsWav[channel].numChannels*(int)(i*streamsWav[channel].sampleRate/PSP_SAMPLE_RATE)+(streamsWav[channel].dataPos/2);
				buf[2*i]=(((short*)streamsWav[channel].data)[index])*amp;
				index+=((streamsWav[channel].numChannels>1)?1:0);
				buf[2*i+1]=(((short*)streamsWav[channel].data)[index])*amp;
			}
			else
			{
				memset((char*)buf,0,4*length);
				return PSPAALIB_WARNING_WAV_INVALID_SBPS;
			}
		}
	}
	else
	{
		sceIoRead(streamsWav[channel].file,streamsWav[channel].data,realLength);
		for (i=0;i<length;i++)
		{
			if (streamsWav[channel].sigBytes==1)
			{
				index=streamsWav[channel].numChannels*(int)(i*streamsWav[channel].sampleRate/PSP_SAMPLE_RATE);
				buf[2*i]=(streamsWav[channel].data[index]<<8)*amp;
				index+=((streamsWav[channel].numChannels>1)?1:0);
				buf[2*i+1]=(streamsWav[channel].data[index]<<8)*amp;
			}
			else if (streamsWav[channel].sigBytes==2)
			{
				index=streamsWav[channel].numChannels*(int)(i*streamsWav[channel].sampleRate/PSP_SAMPLE_RATE);
				buf[2*i]=(((short*)streamsWav[channel].data)[index])*amp;
				index+=((streamsWav[channel].numChannels>1)?1:0);
				buf[2*i+1]=(((short*)streamsWav[channel].data)[index])*amp;
			}
			else
			{
				memset((char*)buf,0,4*length);
				return PSPAALIB_WARNING_WAV_INVALID_SBPS;
			}
		}
	}
	streamsWav[channel].dataPos+=realLength;
	return PSPAALIB_SUCCESS;
}