int StopWav(int channel) { if ((channel<0)||(channel>31)) { return PSPAALIB_ERROR_WAV_INVALID_CHANNEL; } if (!streamsWav[channel].initialized) { return PSPAALIB_ERROR_WAV_UNINITIALIZED_CHANNEL; } RewindWav(channel); streamsWav[channel].paused=TRUE; streamsWav[channel].stopReason=PSPAALIB_STOP_ON_REQUEST; return PSPAALIB_SUCCESS; }
int AalibRewind(int channel) { if ((PSPAALIB_CHANNEL_WAV_1<=channel)&&(channel<=PSPAALIB_CHANNEL_WAV_32)) { return RewindWav(channel-PSPAALIB_CHANNEL_WAV_1); } if ((PSPAALIB_CHANNEL_OGG_1<=channel)&&(channel<=PSPAALIB_CHANNEL_OGG_10)) { return RewindOgg(channel-PSPAALIB_CHANNEL_OGG_1); } if ((PSPAALIB_CHANNEL_SCEMP3_1<=channel)&&(channel<=PSPAALIB_CHANNEL_SCEMP3_2)) { return RewindSceMp3(channel-PSPAALIB_CHANNEL_SCEMP3_1); } if ((PSPAALIB_CHANNEL_AT3_1<=channel)&&(channel<=PSPAALIB_CHANNEL_AT3_2)) { return RewindAt3(channel-PSPAALIB_CHANNEL_AT3_1); } return PSPAALIB_ERROR_INVALID_CHANNEL; }
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; }