Ejemplo n.º 1
0
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;
}
Ejemplo n.º 2
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(&params,&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;
}