Skip to content

Commit ad8a16f

Browse files
committed
aesnd: use more accurate frequency calc
1 parent 76dac37 commit ad8a16f

2 files changed

Lines changed: 7 additions & 7 deletions

File tree

gc/aesndlib.h

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
#define DSP_STREAMBUFFER_SIZE 1152 // input 2ms sound data at max. 144KHz
99

1010
#if defined(HW_DOL)
11-
#define DSP_DEFAULT_FREQ 48044
11+
#define DSP_DEFAULT_FREQ (54000000.0f/1124.0f)
1212
#elif defined(HW_RVL)
1313
#define DSP_DEFAULT_FREQ 48000
1414
#endif
@@ -48,10 +48,10 @@ void AESND_SetVoiceMute(AESNDPB *pb,bool mute);
4848
void AESND_SetVoiceLoop(AESNDPB *pb,bool loop);
4949
void AESND_SetVoiceFormat(AESNDPB *pb,u32 format);
5050
void AESND_SetVoiceStream(AESNDPB *pb,bool stream);
51-
void AESND_SetVoiceFrequency(AESNDPB *pb,u32 freq);
51+
void AESND_SetVoiceFrequency(AESNDPB *pb,f32 freq);
5252
void AESND_SetVoiceVolume(AESNDPB *pb,u16 volume_l,u16 volume_r);
5353
void AESND_SetVoiceBuffer(AESNDPB *pb,const void *buffer,u32 len);
54-
void AESND_PlayVoice(AESNDPB *pb,u32 format,const void *buffer,u32 len,u32 freq,u32 delay,bool looped);
54+
void AESND_PlayVoice(AESNDPB *pb,u32 format,const void *buffer,u32 len,f32 freq,u32 delay,bool looped);
5555
AESNDVoiceCallback AESND_RegisterVoiceCallback(AESNDPB *pb,AESNDVoiceCallback cb);
5656

5757
#ifdef __cplusplus

libaesnd/aesndlib.c

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -149,9 +149,9 @@ static __inline__ void __aesndsetvoicebuffer(AESNDPB *pb,void* buffer,u32 len)
149149
pb->mram_end = (u32)buffer + len;
150150
}
151151

152-
static __inline__ void __aesndsetvoicefreq(AESNDPB *pb,u32 freq)
152+
static __inline__ void __aesndsetvoicefreq(AESNDPB *pb,f32 freq)
153153
{
154-
register u32 ratio = 0x00010000*((f32)freq/(f32)DSP_DEFAULT_FREQ);
154+
register u32 ratio = 0x00010000*(freq/DSP_DEFAULT_FREQ)+0.5f;
155155
pb->freq_h = (u16)(ratio>>16);
156156
pb->freq_l = (u16)(ratio&0xffff);
157157
}
@@ -567,7 +567,7 @@ void AESND_FreeVoice(AESNDPB *pb)
567567
_CPU_ISR_Restore(level);
568568
}
569569

570-
void AESND_PlayVoice(AESNDPB *pb,u32 format,const void *buffer,u32 len,u32 freq,u32 delay,bool looped)
570+
void AESND_PlayVoice(AESNDPB *pb,u32 format,const void *buffer,u32 len,f32 freq,u32 delay,bool looped)
571571
{
572572
u32 level;
573573
void *ptr = (void*)buffer;
@@ -619,7 +619,7 @@ void AESND_SetVoiceVolume(AESNDPB *pb,u16 volume_l,u16 volume_r)
619619
_CPU_ISR_Restore(level);
620620
}
621621

622-
void AESND_SetVoiceFrequency(AESNDPB *pb,u32 freq)
622+
void AESND_SetVoiceFrequency(AESNDPB *pb,f32 freq)
623623
{
624624
u32 level;
625625

0 commit comments

Comments
 (0)