static u32 sceAudioOutputPannedBlocking(u32 chan, int leftvol, int rightvol, u32 samplePtr) { int result = 0; // For some reason, this is the only one that checks for negative. if (leftvol > 0xFFFF || rightvol > 0xFFFF || leftvol < 0 || rightvol < 0) { ERROR_LOG(SCEAUDIO, "sceAudioOutputPannedBlocking() - invalid volume"); result = SCE_ERROR_AUDIO_INVALID_VOLUME; } else if (chan >= PSP_AUDIO_CHANNEL_MAX) { ERROR_LOG(SCEAUDIO, "sceAudioOutputPannedBlocking() - bad channel"); result = SCE_ERROR_AUDIO_INVALID_CHANNEL; } else if (!chans[chan].reserved) { ERROR_LOG(SCEAUDIO, "sceAudioOutputPannedBlocking() - channel not reserved"); result = SCE_ERROR_AUDIO_CHANNEL_NOT_INIT; } else { if (leftvol >= 0) { chans[chan].leftVolume = leftvol; } if (rightvol >= 0) { chans[chan].rightVolume = rightvol; } chans[chan].sampleAddress = samplePtr; result = __AudioEnqueue(chans[chan], chan, true); } DEBUG_LOG(SCEAUDIO, "%08x = sceAudioOutputPannedBlocking(%08x, %08x, %08x, %08x)", result, chan, leftvol, rightvol, samplePtr); return result; }
void sceAudioOutputBlocking(u32 chan, u32 vol, u32 samplePtr) { if (samplePtr == 0) { ERROR_LOG(HLE, "sceAudioOutputBlocking - Sample pointer null"); RETURN(0); } if (chan < 0 || chan >= MAX_CHANNEL) { ERROR_LOG(HLE,"sceAudioOutputBlocking() - BAD CHANNEL"); RETURN(SCE_ERROR_AUDIO_INVALID_CHANNEL); } else if (!chans[chan].reserved) { ERROR_LOG(HLE,"sceAudioOutputBlocking() - channel not reserved"); RETURN(SCE_ERROR_AUDIO_CHANNEL_NOT_RESERVED); } else { DEBUG_LOG(HLE,"sceAudioOutputPanned(%d, %d, %08x )",chan,vol,samplePtr); chans[chan].running = true; chans[chan].leftVolume = vol; chans[chan].rightVolume = vol; chans[chan].sampleAddress = samplePtr; RETURN(0); __AudioEnqueue(chans[chan], chan, true); } }
// Not sure about the range of volume, I often see 0x800 so that might be either // max or 50%? u32 sceAudioOutputPannedBlocking(u32 chan, u32 volume1, u32 volume2, u32 samplePtr) { DEBUG_LOG(HLE,"sceAudioOutputPannedBlocking(%d,%d,%d, %08x )", chan, volume1, volume2, samplePtr); if (samplePtr == 0) { ERROR_LOG(HLE, "Sample pointer null"); return 0; } if (chan < 0 || chan >= MAX_CHANNEL) { ERROR_LOG(HLE,"sceAudioOutputPannedBlocking() - BAD CHANNEL"); return SCE_ERROR_AUDIO_INVALID_CHANNEL; } else if (!chans[chan].reserved) { return SCE_ERROR_AUDIO_CHANNEL_NOT_RESERVED; } else { chans[chan].running = true; chans[chan].leftVolume = volume1; chans[chan].rightVolume = volume2; chans[chan].sampleAddress = samplePtr; return __AudioEnqueue(chans[chan], chan, true); } }
u32 sceAudioOutput2OutputBlocking(u32 vol, u32 dataPtr){ DEBUG_LOG(HLE,"sceAudioOutput2OutputBlocking(%08x, %08x)", vol, dataPtr); chans[0].leftVolume = vol; chans[0].rightVolume = vol; chans[0].sampleAddress = dataPtr; return __AudioEnqueue(chans[0], 0, true); }
u32 sceAudioSRCOutputBlocking(u32 vol, u32 buf) { DEBUG_LOG(HLE, "sceAudioSRCOutputBlocking(%08x, %08x)", vol, buf); chans[src].leftVolume = vol; chans[src].rightVolume = vol; chans[src].sampleAddress = buf; return __AudioEnqueue(chans[src], src, true); }
u32 sceAudioOutputPannedBlocking(u32 chan, int leftvol, int rightvol, u32 samplePtr) { if (leftvol > 0xFFFF || rightvol > 0xFFFF) { ERROR_LOG(HLE, "sceAudioOutputPannedBlocking() - invalid volume"); return SCE_ERROR_AUDIO_INVALID_VOLUME; } else if (chan >= PSP_AUDIO_CHANNEL_MAX) { ERROR_LOG(HLE,"sceAudioOutputPannedBlocking() - bad channel"); return SCE_ERROR_AUDIO_INVALID_CHANNEL; } else if (!chans[chan].reserved) { ERROR_LOG(HLE,"sceAudioOutputPannedBlocking() - channel not reserved"); return SCE_ERROR_AUDIO_CHANNEL_NOT_RESERVED; } else { DEBUG_LOG(HLE, "sceAudioOutputPannedBlocking(%08x, %08x, %08x, %08x)", chan, leftvol, rightvol, samplePtr); if (leftvol >= 0) { chans[chan].leftVolume = leftvol; } if (rightvol >= 0) { chans[chan].rightVolume = rightvol; } chans[chan].sampleAddress = samplePtr; int ret = __AudioEnqueue(chans[chan], chan, true); if (chans[chan].waitingThreads.size() == 0) return hleDelayResult(ret, "output block", 1000); return ret; } }
void sceAudioOutputPannedBlocking(u32 chan, u32 volume1, u32 volume2, u32 samplePtr) { if (samplePtr == 0) { ERROR_LOG(HLE, "sceAudioOutputPannedBlocking - Sample pointer null"); RETURN(0); } else if (chan < 0 || chan >= MAX_CHANNEL) { ERROR_LOG(HLE,"sceAudioOutputPannedBlocking() - BAD CHANNEL"); RETURN(SCE_ERROR_AUDIO_INVALID_CHANNEL); } else if (!chans[chan].reserved) { ERROR_LOG(HLE,"sceAudioOutputPannedBlocking() - CHANNEL NOT RESERVED"); RETURN(SCE_ERROR_AUDIO_CHANNEL_NOT_RESERVED); } else { DEBUG_LOG(HLE, "sceAudioOutputPannedBlocking(%d,%d,%d, %08x )", chan, volume1, volume2, samplePtr); chans[chan].leftVolume = volume1; chans[chan].rightVolume = volume2; chans[chan].sampleAddress = samplePtr; RETURN(0); int retval = __AudioEnqueue(chans[chan], chan, true); if (retval != 0) { // There was an error and didn't block (block always returns 0 here). Fine to RETURN. RETURN(retval); } } }
u32 sceVaudioOutputBlocking(int vol, u32 buffer) { DEBUG_LOG(HLE, "sceVaudioOutputBlocking(%i, %08x)", vol, buffer); chans[PSP_AUDIO_CHANNEL_OUTPUT2].leftVolume = vol; chans[PSP_AUDIO_CHANNEL_OUTPUT2].rightVolume = vol; // TODO: This may be wrong, not sure if's in a different format? chans[PSP_AUDIO_CHANNEL_OUTPUT2].sampleAddress = buffer; return __AudioEnqueue(chans[PSP_AUDIO_CHANNEL_VAUDIO], PSP_AUDIO_CHANNEL_VAUDIO, true); }
void sceAudioOutput2OutputBlocking(u32 vol, u32 dataPtr) { WARN_LOG(HLE,"FAKE sceAudioOutput2OutputBlocking(%i, %08x)", vol, dataPtr); chans[0].leftVolume = vol; chans[0].rightVolume = vol; chans[0].sampleAddress = dataPtr; RETURN(0); u32 retval = __AudioEnqueue(chans[0], 0, true); if (retval < 0) RETURN(retval); }
static u32 sceAudioSRCOutputBlocking(u32 vol, u32 buf) { if (vol > 0xFFFFF) { ERROR_LOG(SCEAUDIO, "sceAudioSRCOutputBlocking(%08x, %08x) - invalid volume", vol, buf); return SCE_ERROR_AUDIO_INVALID_VOLUME; } DEBUG_LOG(SCEAUDIO, "sceAudioSRCOutputBlocking(%08x, %08x)", vol, buf); chans[PSP_AUDIO_CHANNEL_SRC].leftVolume = vol; chans[PSP_AUDIO_CHANNEL_SRC].rightVolume = vol; chans[PSP_AUDIO_CHANNEL_SRC].sampleAddress = buf; return __AudioEnqueue(chans[PSP_AUDIO_CHANNEL_SRC], PSP_AUDIO_CHANNEL_SRC, true); }
static u32 sceAudioOutput2OutputBlocking(u32 vol, u32 dataPtr) { // Note: 0xFFFFF, not 0xFFFF! if (vol > 0xFFFFF) { ERROR_LOG(SCEAUDIO, "sceAudioOutput2OutputBlocking(%08x, %08x) - invalid volume", vol, dataPtr); return SCE_ERROR_AUDIO_INVALID_VOLUME; } DEBUG_LOG(SCEAUDIO, "sceAudioOutput2OutputBlocking(%08x, %08x)", vol, dataPtr); chans[PSP_AUDIO_CHANNEL_OUTPUT2].leftVolume = vol; chans[PSP_AUDIO_CHANNEL_OUTPUT2].rightVolume = vol; chans[PSP_AUDIO_CHANNEL_OUTPUT2].sampleAddress = dataPtr; return __AudioEnqueue(chans[PSP_AUDIO_CHANNEL_OUTPUT2], PSP_AUDIO_CHANNEL_OUTPUT2, true); }
void sceAudioOutput2OutputBlocking() { int vol = PARAM(0); u32 dataPtr = PARAM(1); WARN_LOG(HLE,"FAKE sceAudioOutput2OutputBlocking(%i, %08x)", vol, dataPtr); chans[0].running = true; chans[0].leftVolume = vol; chans[0].rightVolume = vol; chans[0].sampleAddress = dataPtr; RETURN(chans[0].sampleCount); __AudioEnqueue(chans[0], 0, true); }
u32 sceAudioOutput2OutputBlocking(u32 vol, u32 dataPtr){ // Note: 0xFFFFF, not 0xFFFF! if (vol < 0 || vol > 0xFFFFF) { ERROR_LOG(HLE,"sceAudioOutput2OutputBlocking(%08x, %08x) - invalid volume", vol, dataPtr); return SCE_ERROR_AUDIO_INVALID_VOLUME; } DEBUG_LOG(HLE,"sceAudioOutput2OutputBlocking(%08x, %08x)", vol, dataPtr); chans[PSP_AUDIO_CHANNEL_OUTPUT2].leftVolume = vol; chans[PSP_AUDIO_CHANNEL_OUTPUT2].rightVolume = vol; chans[PSP_AUDIO_CHANNEL_OUTPUT2].sampleAddress = dataPtr; int ret = __AudioEnqueue(chans[PSP_AUDIO_CHANNEL_OUTPUT2], PSP_AUDIO_CHANNEL_OUTPUT2, true); if (chans[PSP_AUDIO_CHANNEL_OUTPUT2].waitingThreads.size() == 0) return hleDelayResult(ret, "output block", 1000); return ret; }
u32 sceAudioOutputPanned(u32 chan, u32 leftVol, u32 rightVol, u32 samplePtr) { if (samplePtr == 0) { ERROR_LOG(HLE, "sceAudioOutputPannedBlocking() - Sample pointer null"); return 0; } else if (chan >= PSP_AUDIO_CHANNEL_MAX) { ERROR_LOG(HLE,"sceAudioOutputPanned() - bad channel"); return SCE_ERROR_AUDIO_INVALID_CHANNEL; } else if (!chans[chan].reserved) { ERROR_LOG(HLE,"sceAudioOutputPanned(%08x, %08x, %08x, %08x) - channel not reserved", chan, leftVol, rightVol, samplePtr); return SCE_ERROR_AUDIO_CHANNEL_NOT_RESERVED; } else { DEBUG_LOG(HLE,"sceAudioOutputPanned(%08x, %08x, %08x, %08x)", chan, leftVol, rightVol, samplePtr); chans[chan].leftVolume = leftVol; chans[chan].rightVolume = rightVol; chans[chan].sampleAddress = samplePtr; return __AudioEnqueue(chans[chan], chan, false); } }
u32 sceAudioOutputBlocking(u32 chan, u32 vol, u32 samplePtr) { if (samplePtr == 0) { ERROR_LOG(HLE, "sceAudioOutputBlocking - Sample pointer null"); return 0; } if (chan >= PSP_AUDIO_CHANNEL_MAX) { ERROR_LOG(HLE,"sceAudioOutputBlocking() - BAD CHANNEL"); return SCE_ERROR_AUDIO_INVALID_CHANNEL; } else if (!chans[chan].reserved) { ERROR_LOG(HLE,"sceAudioOutputBlocking() - channel not reserved"); return SCE_ERROR_AUDIO_CHANNEL_NOT_RESERVED; } else { DEBUG_LOG(HLE, "sceAudioOutputBlocking(%d, %d, %08x )",chan,vol,samplePtr); chans[chan].leftVolume = vol; chans[chan].rightVolume = vol; chans[chan].sampleAddress = samplePtr; return __AudioEnqueue(chans[chan], chan, true); } }
static u32 sceAudioOutputBlocking(u32 chan, int vol, u32 samplePtr) { if (vol > 0xFFFF) { ERROR_LOG(SCEAUDIO, "sceAudioOutputBlocking() - invalid volume"); return SCE_ERROR_AUDIO_INVALID_VOLUME; } else if (chan >= PSP_AUDIO_CHANNEL_MAX) { ERROR_LOG(SCEAUDIO, "sceAudioOutputBlocking() - bad channel"); return SCE_ERROR_AUDIO_INVALID_CHANNEL; } else if (!chans[chan].reserved) { ERROR_LOG(SCEAUDIO, "sceAudioOutputBlocking() - channel not reserved"); return SCE_ERROR_AUDIO_CHANNEL_NOT_INIT; } else { DEBUG_LOG(SCEAUDIO, "sceAudioOutputBlocking(%08x, %08x, %08x)", chan, vol, samplePtr); if (vol >= 0) { chans[chan].leftVolume = vol; chans[chan].rightVolume = vol; } chans[chan].sampleAddress = samplePtr; return __AudioEnqueue(chans[chan], chan, true); } }
u32 sceAudioOutput(u32 chan, u32 vol, u32 samplePtr) { if (chan >= PSP_AUDIO_CHANNEL_MAX) { ERROR_LOG(HLE,"sceAudioOutput() - BAD CHANNEL"); return SCE_ERROR_AUDIO_INVALID_CHANNEL; } else if (!chans[chan].reserved) { ERROR_LOG(HLE,"sceAudioOutput(%d, %d, %08x) - channel not reserved", chan, vol, samplePtr); return SCE_ERROR_AUDIO_CHANNEL_NOT_RESERVED; } else { chans[chan].leftVolume = vol; chans[chan].rightVolume = vol; chans[chan].sampleAddress = samplePtr; u32 retval = __AudioEnqueue(chans[chan], chan, false); DEBUG_LOG(HLE, "%08x=sceAudioOutputPanned(%d, %d, %08x)", retval, chan, vol, samplePtr); return retval; } }
u32 sceAudioOutputPanned(u32 chan, int leftvol, int rightvol, u32 samplePtr) { if (leftvol > 0xFFFF || rightvol > 0xFFFF) { ERROR_LOG(HLE, "sceAudioOutputPannedBlocking() - invalid volume"); return SCE_ERROR_AUDIO_INVALID_VOLUME; } else if (chan >= PSP_AUDIO_CHANNEL_MAX) { ERROR_LOG(HLE,"sceAudioOutputPanned() - bad channel"); return SCE_ERROR_AUDIO_INVALID_CHANNEL; } else if (!chans[chan].reserved) { ERROR_LOG(HLE,"sceAudioOutputPanned(%08x, %08x, %08x, %08x) - channel not reserved", chan, leftvol, rightvol, samplePtr); return SCE_ERROR_AUDIO_CHANNEL_NOT_RESERVED; } else { DEBUG_LOG(HLE,"sceAudioOutputPanned(%08x, %08x, %08x, %08x)", chan, leftvol, rightvol, samplePtr); if (leftvol >= 0) { chans[chan].leftVolume = leftvol; } if (rightvol >= 0) { chans[chan].rightVolume = rightvol; } chans[chan].sampleAddress = samplePtr; return __AudioEnqueue(chans[chan], chan, false); } }
u32 sceAudioOutputPanned(u32 chan, u32 leftVol, u32 rightVol, u32 samplePtr) { if (chan < 0 || chan >= MAX_CHANNEL) { ERROR_LOG(HLE,"sceAudioOutputPannedBlocking() - BAD CHANNEL"); return SCE_ERROR_AUDIO_INVALID_CHANNEL; } else if (!chans[chan].reserved) { ERROR_LOG(HLE,"sceAudioOutputPanned(%d, %d, %d, %08x) - channel not reserved", chan,leftVol,rightVol,samplePtr); return SCE_ERROR_AUDIO_CHANNEL_NOT_RESERVED; } else { chans[chan].running = true; chans[chan].leftVolume = leftVol; chans[chan].rightVolume = rightVol; chans[chan].sampleAddress = samplePtr; u32 retval = __AudioEnqueue(chans[chan], chan, false); DEBUG_LOG(HLE,"%08x=sceAudioOutputPanned(%d, %d, %d, %08x)",retval,chan,leftVol,rightVol,samplePtr); return retval; } }