Bad voice quality via GSM network


#1

Hello All,

I tried to send a voice message through open AT application via GSM modem (FASTRACK XTEND)? I heard bad quality voice (voice + noise), i use a signal of 8k 16 bits, do you know what could be the problem?

Thank you.


#2

From the information provided, do you really think that’s likely?!

We have no idea how you’re creating this “voice message”, nor how you’re sending it “through open AT application”.

And, of course, there are very many things in the GSM network, and any other networks, that can - and often do - cause “poor quality”


#3

Hello,

I receive my samples from an external application, i store them in a Buffer and my code is roughly the same as the example indicated in ADL USER GUIDE :

Start PCM audio playing process

// audio resource handle
s32 handle;

// audio stream buffer
void * StreamBuffer;

// PCM samples
u16 PCM_Samples[160] = { … , … , … , … , … , … , 0 }; //
size of PCM sample = 320 bytes

// PCM samples index
u8 indexPCM = 0;

// Low level interrupt handler
bool MyLowLevelIRQHandler ( adl_irqID_e Source, adl_irqNotificationLevel_e
Notification Level, adl_irqEventData_t * Data )
{
// copy PCM sample to play
wm_strcpy( StreamBuffer, PCM_Samples );
// Set BufferReady flag to TRUE
*( ( adl_audioStream_t * )Data->SourceData )->BufferReady = TRUE;

  //... 
   
  return FALSE; 

}

// audio event call-back function
void MyAudioEventHandler ( s32 audioHandle, adl_audioEvents_e Event )
{

  // ... 
   
  return; 

}

void adl_main ( adl_InitType_e InitType )
{
s32 Ret;
s32 BufferSize;

  // Subscribe to the current speaker 
  handle = adl_audioSubscribe ( ADL_AUDIO_SPEAKER, MyAudioEventHandler ,  
  ADL_AUDIO_RESOURCE_OPTION_FORBID_PREEMPTION ); 

  // Memory allocation 
  Ret = adl_audioGetOption ( handle,  
  ADL_AUDIO_PCM_8K_16B_MONO_BUFFER_SIZE, &BufferSize ) 
  StreamBuffer = adl_memGet( BufferSize );   // release memory after  
                                                audio stream playing 
  
  // Play an audio PCM stream 
  Ret = adl_audioStreamPlay( handle, ADL_AUDIO_PCM_MONO_8K_16B  
  MyLowLevelIRQHandler, 0, StreamBuffer); 

}

Stream to play (StreamBuffer) is provided from an external application by using FCM, what i receive i store it in StreamBuffer, after that i pass StreamBuffer to the Low level interrupt handler to play the stream, no special code added that could change something to the signal.

Thank you.


#4

Have you verified that those samples are good?

Have you verified that no corruption is happening in the tansfer?


#5

Yes, i don’t exercise any operation to the samples received.

Could you explain what do you mean by corruption?