示例#1
0
文件: arm7main.c 项目: nakijun/NesDS
void initsound() { 		
	int i;
	powerOn(POWER_SOUND); 
	REG_SOUNDCNT = SOUND_ENABLE | SOUND_VOL(0x7F);
	for(i = 0; i < 16; i++) {
		SCHANNEL_CR(i) = 0;
	}
	SCHANNEL_SOURCE(0)=(u32)&buffer[0];
	SCHANNEL_SOURCE(1)=(u32)&buffer[2*MIXBUFSIZE];
	SCHANNEL_SOURCE(2)=(u32)&buffer[4*MIXBUFSIZE];
	SCHANNEL_SOURCE(3)=(u32)&buffer[6*MIXBUFSIZE];
	SCHANNEL_SOURCE(4)=(u32)&buffer[8*MIXBUFSIZE];
	SCHANNEL_SOURCE(5)=(u32)&buffer[10*MIXBUFSIZE];
	SCHANNEL_SOURCE(6)=(u32)&buffer[12*MIXBUFSIZE];
	SCHANNEL_SOURCE(7)=(u32)&buffer[14*MIXBUFSIZE];
	SCHANNEL_SOURCE(8)=(u32)&buffer[16*MIXBUFSIZE];
	SCHANNEL_SOURCE(10)=(u32)&buffer[18*MIXBUFSIZE];
	SCHANNEL_TIMER(0)=-0x2b9; 
	SCHANNEL_TIMER(1)=-0x2b9; 
	SCHANNEL_TIMER(2)=-0x2b9; 
	SCHANNEL_TIMER(3)=-0x2b9; 
	SCHANNEL_TIMER(4)=-0x2b9; 
	SCHANNEL_TIMER(5)=-0x2b9; 
	SCHANNEL_TIMER(6)=-0x2b9; 
	SCHANNEL_TIMER(7)=-0x2b9; 
	SCHANNEL_TIMER(8)=-0x2b9; 
	SCHANNEL_TIMER(10)=-0x2b9; 
	SCHANNEL_LENGTH(0)=MIXBUFSIZE;
	SCHANNEL_LENGTH(1)=MIXBUFSIZE;
	SCHANNEL_LENGTH(2)=MIXBUFSIZE;
	SCHANNEL_LENGTH(3)=MIXBUFSIZE;
	SCHANNEL_LENGTH(4)=MIXBUFSIZE;
	SCHANNEL_LENGTH(5)=MIXBUFSIZE;
	SCHANNEL_LENGTH(6)=MIXBUFSIZE;
	SCHANNEL_LENGTH(7)=MIXBUFSIZE;
	SCHANNEL_LENGTH(8)=MIXBUFSIZE;
	SCHANNEL_LENGTH(10)=MIXBUFSIZE / 2;
	SCHANNEL_REPEAT_POINT(0) = 0; 
	SCHANNEL_REPEAT_POINT(1) = 0; 
	SCHANNEL_REPEAT_POINT(2) = 0; 
	SCHANNEL_REPEAT_POINT(3) = 0; 
	SCHANNEL_REPEAT_POINT(4) = 0; 
	SCHANNEL_REPEAT_POINT(5) = 0; 
	SCHANNEL_REPEAT_POINT(6) = 0; 
	SCHANNEL_REPEAT_POINT(1) = 0; 
	SCHANNEL_REPEAT_POINT(8) = 0; 
	SCHANNEL_REPEAT_POINT(10) = 0; 
	TIMER0_DATA = -0x572;
	TIMER1_DATA = 0x10000 - MIXBUFSIZE;
	memset(buffer, 0, sizeof(buffer));

	memset(IPC_PCMDATA, 0, 512);
} 
示例#2
0
void SoundEngine::initStreaming(int timerChannel)
{
    memset(buffer, 0, sizeof buffer);
    bufferIndex = 0;

    /*
     * Next timer tick will populate the first half of the buffer
     * (bufferIndex=0) but by the time we get there, the audio
     * hardware will already be started on the second half.  We want
     * the sound hardware and Timer 0 to stay synchronized, so that
     * they're always operating on opposite halves of 'buffer'.
     */
    timerStart(timerChannel,
               ClockDivider_256,
               timerFreqToTicks_256(SAMPLE_RATE / SAMPLES_PER_FRAME),
               timerCallback);

    /*
     * Start playing a circular sound buffer that holds 2 frames.
     */
    SCHANNEL_SOURCE(CHANNEL_PCSPEAKER)       = (uint32_t) &buffer[0];
    SCHANNEL_REPEAT_POINT(CHANNEL_PCSPEAKER) = 0;
    SCHANNEL_LENGTH(CHANNEL_PCSPEAKER)       = BUFFER_SIZE / sizeof(uint32_t);
    SCHANNEL_TIMER(CHANNEL_PCSPEAKER)        = SOUND_FREQ(SAMPLE_RATE);
    SCHANNEL_CR(CHANNEL_PCSPEAKER)           = SCHANNEL_ENABLE |
                                               SOUND_VOL(127) |
                                               SOUND_PAN(64) |
                                               SOUND_REPEAT |
                                               SOUND_FORMAT_8BIT;
}
//---------------------------------------------------------------------------------
void startSound(int sampleRate, const void* data, u32 bytes, u8 channel, u8 vol,  u8 pan, u8 format) {
//---------------------------------------------------------------------------------
	SCHANNEL_TIMER(channel)  = SOUND_FREQ(sampleRate);
	SCHANNEL_SOURCE(channel) = (u32)data;
	SCHANNEL_LENGTH(channel) = bytes >> 2 ;
	SCHANNEL_CR(channel)     = SCHANNEL_ENABLE | SOUND_ONE_SHOT | SOUND_VOL(vol) | SOUND_PAN(pan) | (format==1?SOUND_8BIT:SOUND_16BIT);
}
示例#4
0
文件: main7.c 项目: sypherce/dslua
void startSound(int sampleRate, const void* data, uint32 bytes, u8 channel, u8 vol,  u8 pan, u8 format)
{
	SCHANNEL_TIMER(channel)  = SOUND_FREQ(sampleRate);
	SCHANNEL_SOURCE(channel) = (u32)data;
	SCHANNEL_LENGTH(channel) = bytes >> 2;
	u32 form = 0;
	switch(format)
	{
	case 0:
		form = SOUND_FORMAT_16BIT;
		break;
	case 1:
		form = SOUND_FORMAT_8BIT;
		break;
	case 2:
		form = SOUND_FORMAT_ADPCM;
		break;
	}
	SCHANNEL_CR(channel) = SCHANNEL_ENABLE | SOUND_ONE_SHOT | SOUND_VOL(vol) | SOUND_PAN(pan) | form;
}