summaryrefslogtreecommitdiffabout
path: root/gammu/emb/common/service/gsmring.c
Side-by-side diff
Diffstat (limited to 'gammu/emb/common/service/gsmring.c') (more/less context) (show whitespace changes)
-rw-r--r--gammu/emb/common/service/gsmring.c3
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)
{