Diffstat (limited to 'gammu/emb/common/service/gsmring.c') (more/less context) (show whitespace changes)
-rw-r--r-- | gammu/emb/common/service/gsmring.c | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/gammu/emb/common/service/gsmring.c b/gammu/emb/common/service/gsmring.c index 5a1ff87..f7f7082 100644 --- a/gammu/emb/common/service/gsmring.c +++ b/gammu/emb/common/service/gsmring.c @@ -59,97 +59,98 @@ int GSM_RingNoteGetFullDuration(GSM_RingNote Note) case Duration_1_2 : duration = 64; break; case Duration_1_4 : duration = 32; break; case Duration_1_8 : duration = 16; break; case Duration_1_16 : duration = 8; break; case Duration_1_32 : duration = 4; break; } switch (Note.DurationSpec) { case NoSpecialDuration : break; case DottedNote : duration = duration * 3/2; break; case DoubleDottedNote : duration = duration * 9/4; break; case Length_2_3 : duration = duration * 2/3; break; } return duration; } #ifndef PI # define PI 3.141592654 #endif #define WAV_SAMPLE_RATE 44100 GSM_Error savewav(FILE *file, GSM_Ringtone *ringtone) { unsigned char WAV_Header[] = { 'R','I','F','F', 0x00,0x00,0x00,0x00, /* Length */ 'W','A','V','E'}; unsigned char FMT_Header[] = {'f','m','t',' ', 0x10,0x00,0x00,0x00,0x01,0x00,0x01,0x00,0x44,0xac, 0x00,0x00,0x88,0x58,0x01,0x00,0x02,0x00,0x10,0x00}; unsigned char DATA_Header[] = { 'd','a','t','a', 0x00,0x00,0x00,0x00}; /* Length */ short DATA_Buffer[60000]; long wavfilesize; GSM_RingNote *Note; long i,j,length=0; double phase=0,phase_step; fwrite(&WAV_Header, 1, sizeof(WAV_Header), file); fwrite(&FMT_Header, 1, sizeof(FMT_Header), file); fwrite(&DATA_Header, 1, sizeof(DATA_Header), file); for (i=0;i<ringtone->NoteTone.NrCommands;i++) { if (ringtone->NoteTone.Commands[i].Type == RING_Note) { Note = &ringtone->NoteTone.Commands[i].Note; phase_step = GSM_RingNoteGetFrequency(*Note)*WAV_SAMPLE_RATE*1.5; for (j=0;j<((long)(GSM_RingNoteGetFullDuration(*Note)*WAV_SAMPLE_RATE/70));j++) { - DATA_Buffer[j] = ((int)(sin(phase*PI)*50000)); + /*DATA_Buffer[j] = ((int)(sin(phase*PI)*50000));*/ + DATA_Buffer[j] = ((int)(0.5*50000)); phase = phase + phase_step; length++; } fwrite(&DATA_Buffer,sizeof(short),j,file); } } wavfilesize = sizeof(WAV_Header) + sizeof(FMT_Header) + sizeof(DATA_Header) + length*2; WAV_Header[4] = ((unsigned char)wavfilesize % 256); WAV_Header[5] = ((unsigned char)wavfilesize / 256); WAV_Header[6] = ((unsigned char)wavfilesize / (256*256)); WAV_Header[7] = ((unsigned char)wavfilesize / (256*256*256)); wavfilesize = wavfilesize - 54; DATA_Header[4] = ((unsigned char)wavfilesize % 256); DATA_Header[5] = ((unsigned char)wavfilesize / 256); DATA_Header[6] = ((unsigned char)wavfilesize / (256*256)); DATA_Header[7] = ((unsigned char)wavfilesize / (256*256*256)); fseek( file, 0, SEEK_SET); fwrite(&WAV_Header, 1, sizeof(WAV_Header), file); fwrite(&FMT_Header, 1, sizeof(FMT_Header), file); fwrite(&DATA_Header, 1, sizeof(DATA_Header), file); return ERR_NONE; } static GSM_Error savebin(FILE *file, GSM_Ringtone *ringtone) { char nullchar=0x00; fwrite(&nullchar,1,1,file); fwrite(&nullchar,1,1,file); fprintf(file,"\x0C\x01\x2C"); fprintf(file,"%s",DecodeUnicodeString(ringtone->Name)); fwrite(&nullchar,1,1,file); fwrite(&nullchar,1,1,file); fwrite(ringtone->NokiaBinary.Frame,1,ringtone->NokiaBinary.Length,file); return ERR_NONE; } static GSM_Error savepuremidi(FILE *file, GSM_Ringtone *ringtone) { fwrite(ringtone->NokiaBinary.Frame,1,ringtone->NokiaBinary.Length,file); return ERR_NONE; } GSM_Error saverttl(FILE *file, GSM_Ringtone *ringtone) { |