static int PSL1GHT_AUD_OpenDevice(_THIS, const char *devname, int iscapture) { deprintf( "PSL1GHT_AUD_OpenDevice(%08X.%08X, %s, %d)\n", SHW64(this), devname, iscapture); SDL_AudioFormat test_format = SDL_FirstAudioFormat(this->spec.format); int valid_datatype = 0; this->hidden = SDL_malloc(sizeof(*(this->hidden))); if (!this->hidden) { SDL_OutOfMemory(); return 0; } SDL_memset(this->hidden, 0, (sizeof *this->hidden)); // PS3 Libaudio only handles floats while ((!valid_datatype) && (test_format)) { this->spec.format = test_format; switch (test_format) { case AUDIO_F32MSB: valid_datatype = 1; break; default: test_format = SDL_NextAudioFormat(); break; } } int ret=audioInit(); //set some parameters we want //either 2 or 8 channel _params.numChannels = AUDIO_PORT_2CH; //8 16 or 32 block buffer _params.numBlocks = AUDIO_BLOCK_8; //extended attributes _params.attrib = 0; //sound level (1 is default) _params.level = 1; ret=audioPortOpen(&_params, &_portNum); deprintf("audioPortOpen: %d\n",ret); deprintf(" portNum: %d\n",_portNum); ret=audioGetPortConfig(_portNum, &_config); deprintf("audioGetPortConfig: %d\n",ret); deprintf(" readIndex: 0x%8X\n",_config.readIndex); deprintf(" status: %d\n",_config.status); deprintf(" channelCount: %ld\n",_config.channelCount); deprintf(" numBlocks: %ld\n",_config.numBlocks); deprintf(" portSize: %d\n",_config.portSize); deprintf(" audioDataStart: 0x%8X\n",_config.audioDataStart); // create an event queue that will tell when a block is read ret=audioCreateNotifyEventQueue( &_snd_queue, &_snd_queue_key); printf("audioCreateNotifyEventQueue: %d\n",ret); // Set it to the sprx ret = audioSetNotifyEventQueue(_snd_queue_key); printf("audioSetNotifyEventQueue: %d\n",ret); // clears the event queue ret = sysEventQueueDrain(_snd_queue); printf("sysEentQueueDrain: %d\n",ret); ret=audioPortStart(_portNum); deprintf("audioPortStart: %d\n",ret); _last_filled_buf = _config.numBlocks - 1; this->spec.format = test_format; this->spec.size = sizeof(float) * AUDIO_BLOCK_SAMPLES * _config.channelCount; this->spec.freq = 48000; this->spec.samples = AUDIO_BLOCK_SAMPLES; this->spec.channels = _config.channelCount; return ret == 0; }
int main(int argc,char *argv[]) { u32 portNum,i; audioPortParam params; audioPortConfig config; s32 ret = audioInit(); printf("audioInit: %08x\n",ret); params.numChannels = AUDIO_PORT_2CH; params.numBlocks = AUDIO_BLOCK_8; params.attrib = 0x1000; params.level = 1.0f; ret = audioPortOpen(¶ms,&portNum); printf("audioPortOpen: %08x\n",ret); printf(" portNum: %d\n",portNum); ret = audioGetPortConfig(portNum,&config); printf("audioGetPortConfig: %08x\n",ret); printf("config.readIndex: %08x\n",config.readIndex); printf("config.status: %d\n",config.status); printf("config.channelCount: %ld\n",config.channelCount); printf("config.numBlocks: %ld\n",config.numBlocks); printf("config.portSize: %d\n",config.portSize); printf("config.audioDataStart: %08x\n",config.audioDataStart); ret = audioCreateNotifyEventQueue(&snd_queue,&snd_key); printf("audioCreateNotifyEventQueue: %08x\n",ret); printf("snd_queue: %16lx\n",(long unsigned int)snd_queue); printf("snd_key: %16lx\n",snd_key); ret = audioSetNotifyEventQueue(snd_key); printf("audioSetNotifyEventQueue: %08x\n",ret); ret = sysEventQueueDrain(snd_queue); printf("sysEventQueueDrain: %08x\n",ret); ret = audioPortStart(portNum); printf("audioPortStart: %08x\n",ret); i = 0; while(i<1000) { playOneBlock(&config); i++; } ret = audioPortStop(portNum); printf("audioPortStop: %08x\n",ret); ret = audioRemoveNotifyEventQueue(snd_key); printf("audioRemoveNotifyEventQueue: %08x\n",ret); ret = audioPortClose(portNum); printf("audioPortClose: %08x\n",ret); ret = sysEventQueueDestroy(snd_queue,0); printf("sysEventQueueDestroy: %08x\n",ret); ret = audioQuit(); printf("audioQuit: %08x\n",ret); return 0; }