1 /******************************************************************************
2 ** File Name: audio.h *
3 ** Author: Xueliang.Wang *
5 ** Copyright: 2004 Spreatrum, Incoporated. All Rights Reserved. *
6 ** Description: This file define all audio interface. *
7 ******************************************************************************
9 ******************************************************************************
11 ** ------------------------------------------------------------------------- *
12 ** DATE NAME DESCRIPTION *
13 ** 05/10/2004 Xueliang.Wang Create *
14 ******************************************************************************/
19 #include "audio_api.h"
21 /**---------------------------------------------------------------------------*
23 **---------------------------------------------------------------------------*/
25 /**---------------------------------------------------------------------------*
27 **---------------------------------------------------------------------------*/
33 /**---------------------------------------------------------------------------*
34 ** Constant Variables *
35 **---------------------------------------------------------------------------*/
41 AUD_DTMF_letterA, // A
45 AUD_DTMF_letterB, // B
49 AUD_DTMF_letterC, // C
53 AUD_DTMF_letterD, // D
54 AUD_DTMF_MAX_ID // Reserved, user can't use it.
59 uint16 UL_equalizer_coeff[33];
60 uint16 DL_equalizer_coeff[33];
66 uint16 UL_digital_gain;
67 uint16 DL_digital_gain;
69 uint16 UL_digital_scale;
70 uint16 DL_digital_scale;
72 uint16 midi_PGA_gain_base;
73 uint16 digital_sidetone_gain;
75 uint16 DL_IIR1_coeff[6];
76 uint16 DL_IIR2_coeff[6];
83 #define AUD_PLAY_FOREVER 0xFFFFFFFF
85 // Volume of max value.
86 #define AUD_MAX_MIC_VOLUME 9
87 #define AUD_MAX_SPEAKER_VOLUME 9
88 #define AUD_MAX_SIDE_TONE_GAIN 10
90 //background music level
91 #define AUD_BKMUSIC_LOWEST_LEVEL 0 //0:mute
92 #define AUD_BKMUSIC_HIGHEST_LEVEL 5
93 #define AUD_BKMUSIC_TOTAL_LEVEL 6
94 // Echo test callback function.
95 typedef void (*AUD_ECHOCALLBACK_PFUNC)(uint32);
101 ERR_AUD_PARAM, // Input parameters is error.
102 ERR_AUD_CONFLICT, // It's playing ring or midi now, don't handle tone.
103 ERR_AUD_MAX // Reserved, user can't use it.
110 AUD_TYPE_CUSTOM_TONE,
112 AUD_TYPE_GENERIC_TONE,
116 AUD_TYPE_MAX // Reserved, user can't use it.
122 AUD_GENERIC_PRESS_KEY_TONE,
123 AUD_GENERIC_WARNING_TONE,
124 AUD_GENERIC_BATT_WARNING_TONE,
125 AUD_GENERIC_DIAL_TONE,
126 AUD_GENERIC_CONGESTION_TONE,
127 AUD_GENERIC_SUBSCRIBER_BUSY_TONE,
128 AUD_GENERIC_SPECIAL_DIAL_TONE,
129 AUD_GENERIC_SV_CALL_WAITING_TONE,
130 AUD_GENERIC_SV_RADIO_PATH_ACK_TONE,
131 AUD_GENERIC_SV_RADIO_PATH_NOT_AVAIL_TONE,
132 AUD_GENERIC_SV_ERROR_INFO_TONE,
133 AUD_GENERIC_INFO_FREE_TONE,
135 // User could add new at here.
138 AUD_GENERIC_TONE_ID_MAX // Reserved, user can't use it.
139 } AUD_GENERIC_TONE_ID_E;
141 // Audio ring data type.
144 AUD_MIDI_RING, // File format:
145 // General Midi file format
147 AUD_SINGLE_TONE_RING, // File format(in BigEndian):
148 // uint16(type), // AUD_SINGLE_TONE_RING
149 // uint16(data_len), // Number of bytes of ring data
150 // uint16(freq), uint16(duration millisecond),
151 // uint16(freq), uint16(duration millisecond),
153 // uint16(freq), uint16(duration millisecond)
155 // Note: duration = 0xFFFF, means play for ever.
157 AUD_DUAL_TONE_RING, // File format(in BigEndian):
158 // uint16(type), // AUD_DUAL_TONE_RING
159 // uint16(data_len), // Number of bytes of ring data
160 // uint16(freq1), uint16(freq2), uint16(duration millisecond),
161 // uint16(freq1), uint16(freq2), uint16(duration millisecond),
163 // uint16(freq1), uint16(freq2), uint16(duration millisecond)
165 AUD_TRIPLE_TONE_RING, // File format(in BigEndian):
166 // uint16(type), // AUD_TRIPLE_TONE_RING
167 // uint16(data_len), // Number of bytes of ring data
168 // uint16(freq1), uint16(freq2), uint16(freq3), uint16(duration millisecond),
169 // uint16(freq1), uint16(freq2), uint16(freq3), uint16(duration millisecond),
171 // uint16(freq1), uint16(freq2), uint16(freq3), uint16(duration millisecond)
173 AUD_SMAF_RING, // File format:
174 // Defined by Yamaha.
176 AUD_WAVE_RING, // File format:
177 // wave sound 16bit samples data ,sound sampling rate is 16k
179 AUD_MP3_RING, // File format:
182 AUD_AMR_RING, // File format
184 AUD_RING_TYPE_MAX // Reserved, user can't use it.
187 // definition of type of background music volume .
190 AUD_BKMUSIC_BOTH_INVALID,/*both uplink and downlink paras are invalid*/
191 AUD_BKMUSIC_UPLINK_VALID, /*uplink para is valid*/
192 AUD_BKMUSIC_DOWNLINK_VALID, /*downlink para is valid*/
193 AUD_BKMUSIC_BOTH_VALID, /*both uplink and downlink paras are valid*/
194 AUD_BKMUSIC_PARAM_TYPE_MAX /* Reserved, user can't use it.*/
195 } AUD_BKMUSIC_PARAM_TYPE_E;
212 typedef struct AUD_SINGLE_TONE_tag
215 uint16 duration; // Number of milliseconds
218 typedef struct AUD_DUAL_TONE_tag
222 uint16 duration; // Number of milliseconds
225 typedef struct AUD_TRIPLE_TONE_tag
230 uint16 duration; // Number of milliseconds
233 typedef struct AUD_RING_DATA_INFO_tag
235 AUD_RING_TYPE_E type;
238 const uint8 *data_ptr;
239 } AUD_RING_DATA_INFO_T;
243 AUD_STEREO = 0, // dual channel
244 AUD_NON_STEREO = 1 // single channel
264 AUD_REC_DSP_DATA_MIN, //=5
265 AUD_REC_DSP_DATA_1 = AUD_REC_DSP_DATA_MIN,//=5
266 AUD_REC_DSP_DATA_2, //=6
267 AUD_REC_DSP_DATA_3, //=7
268 AUD_REC_DSP_DATA_4, //=8
269 AUD_REC_DSP_DATA_5, //=9
270 AUD_REC_DSP_DATA_6, //=10
271 AUD_REC_DSP_DATA_7, //=11
272 AUD_REC_DSP_DATA_8, //=12
273 AUD_REC_DSP_DATA_9, //=13
274 AUD_REC_DSP_DATA_10, //=14
275 AUD_REC_DSP_DATA_11, //=15
276 AUD_REC_DSP_DATA_12, //=16
277 AUD_REC_DSP_DATA_13, //=17
278 AUD_REC_DSP_DATA_14, //=18
279 AUD_REC_DSP_DATA_15, //=19
280 AUD_REC_DSP_DATA_MAX = AUD_REC_DSP_DATA_15,
281 AUD_REC_DSP_LOG, //20
288 MR475 = 0,/*4.75kbps*/
297 N_MODES /* number of (SPC) modes */
298 }AMR_MODE; //amr encode mode
307 /**---------------------------------------------------------------------------*
309 **---------------------------------------------------------------------------*/
310 /**---------------------------------------------------------------------------*
311 ** Function Prototypes *
312 **---------------------------------------------------------------------------*/
313 /*****************************************************************************/
314 // Description: This function plays generic tone.
315 // Author: Xueliang.Wang
316 // Note: This function does nothing if it is called when playing
318 /*****************************************************************************/
319 PUBLIC ERR_AUD_E AUD_PlayGenericTone( // If succeed, return ERR_AUD_NONE,
320 // else return error value
321 AUD_GENERIC_TONE_ID_E tone_id, // Generic tone enumeration value.
322 uint32 duration // Number of milliseconds of playing this tone.
325 /*****************************************************************************/
326 // Description: This function stops playing generic tone.
327 // Author: Xueliang.Wang
329 /*****************************************************************************/
330 PUBLIC ERR_AUD_E AUD_StopGenericTone(void); // If succeed, return ERR_AUD_NONE,
331 // else return error value
333 /*****************************************************************************/
334 // Description: This function is used to set voice codec enable/disable.
335 // Author: Xueliang.Wang
337 /*****************************************************************************/
338 PUBLIC ERR_AUD_E AUD_EnableVoiceCodec( // If succeed, return ERR_AUD_NONE,
339 // else return error value
340 BOOLEAN is_enable // SCI_TRUE: Enable, SCI_FALSE: Disable
344 /*****************************************************************************/
345 // Description: This function is used to set engineering audio parameters.
346 // Author: Xueliang.Wang
348 /*****************************************************************************/
349 PUBLIC ERR_AUD_E AUD_SetEngineeringParameter( // If succeed, return ERR_AUD_NONE,
350 // else return error value
351 AUDIO_DEVICE_MODE_TYPE_E parameter_type,
352 AUDIO_TEST_DATA_T parameter_data
357 /*****************************************************************************/
358 // Description: This function is used to enable/disable volice loopback
360 // Author: Xueliang.Wang
362 /*****************************************************************************/
363 PUBLIC ERR_AUD_E AUD_EnableVoiceLoopback( // If succeed, return ERR_AUD_NONE,
364 // else return error value
365 BOOLEAN is_enable, // 0: disable 1:enable
366 uint16 delay_time // millisecones
369 /*****************************************************************************/
370 // Description: This function is used to get engineering audio parameters.
371 // Author: Sunsome.Ju
373 /*****************************************************************************/
374 PUBLIC ERR_AUD_E AUD_GetEngineeringParameter( // If succeed, return ERR_AUD_NONE,
375 // else return error value
376 AUDIO_DEVICE_MODE_TYPE_E parameter_type,
377 AUDIO_TEST_DATA_T *parameter_data
381 /*****************************************************************************/
382 // Description: This function is used to set midi playing frequency.
385 /*****************************************************************************/
386 PUBLIC void AUDIO_SetMidiPlayFreq(uint32 midi_play_freq);
388 /*****************************************************************************/
389 // Description: This function is used to set whether the audio data is output by stereo mode.
390 // Author: BenjaminWang
392 /*****************************************************************************/
393 PUBLIC void AUDIO_SetDataStereo( // return void
394 BOOLEAN stereo_state // SCI_TRUE - stereo on SCI_FALSE - stereo off
397 /*****************************************************************************/
398 // Description: This function is used to know whether the audio data is output by stereo mode.
399 // Author: BenjaminWang
401 /*****************************************************************************/
402 PUBLIC BOOLEAN AUDIO_GetDataStereo(void); // return SCI_TRUE - stereo on SCI_FALSE - stereo off
404 PUBLIC void AUD_EnableAmplifier(BOOLEAN bEnable);
407 /*****************************************************************************/
408 // Description: This function is used to turn on MICBIAS voltage.
409 // Author: Benjamin.Wang
411 //****************************************************************************/
412 void VB_TurnOnMICBIAS(void);
414 /*****************************************************************************/
415 // Description: This function is used to shut down MICBIAS voltage.
416 // Author: Benjamin.Wang
418 //****************************************************************************/
419 void VB_ShutDownMICBIAS(void);
421 //record call back function
422 typedef void (*RECORD_CALLBACK)(uint16 data_length);
424 //play call back function
425 typedef BOOLEAN (*PLAY_CALLBACK)();
427 /*****************************************************************************/
428 // Description: This function is used to set voice codec enable/disable.
431 /*****************************************************************************/
432 PUBLIC ERR_AUD_E AUD_EnableVoiceRecord( // If succeed, return ERR_AUD_NONE,
433 // else return error value
434 BOOLEAN is_enable, // SCI_TRUE: Enable, SCI_FALSE: Disable
435 AUD_REC_FORMAT_E recorder_format,
436 RECORD_CALLBACK callback_fun
439 /*****************************************************************************/
440 // Description: This function config the amr parameters
443 /*****************************************************************************/
445 extern void AUD_CfgAmrParam( AMR_MODE amr_mode, uint8 channels, uint8 sample_rate );
447 /*****************************************************************************/
448 // Description: This function transmit the recorded data to uplayer buffer
451 /*****************************************************************************/
452 extern void AUD_ReadVoiceData( uint16 *destination_buf_ptr,uint16 data_length );
454 /*****************************************************************************/
455 // Description: This function start the play flow
458 /*****************************************************************************/
459 extern void AUD_StartPlay( AUD_REC_FORMAT_E voice_format,
460 PLAY_CALLBACK callback_fun,
461 BOOLEAN is_to_speaker,
465 /*****************************************************************************/
466 // Description: This function transmit data to downlayer for playing
469 /*****************************************************************************/
470 extern void AUD_WriteVoiceData (uint16 * source_buf_ptr,uint16 data_length);
472 /*****************************************************************************/
473 // Description: This function stop the paly process
476 /*****************************************************************************/
477 extern void AUD_StopPlay( void );
479 /*****************************************************************************/
480 // Description: United operation for POP noise restrain.
483 /*****************************************************************************/
484 PUBLIC void AUD_DSPUnitedOperation(void);
485 /*****************************************************************************/
486 // Description: This function is used to set Audio Codec Output Data Type.
487 /*****************************************************************************/
488 PUBLIC void AUD_SetOutputDataType(AUDIO_OUTPUT_DATA_TYPE_E eDataType);
490 /*****************************************************************************/
491 // Description: This function is used to get Audio Codec Output Data Type.
492 /*****************************************************************************/
493 PUBLIC AUDIO_OUTPUT_DATA_TYPE_E AUD_GetOutputDataType(void);
495 /*****************************************************************************/
496 // Description: This function is used to config dsp trans samplerate param
497 /*****************************************************************************/
498 PUBLIC void AUD_Cfg_PcmTrans_Param(uint16 dest_samplerate);
500 /*****************************************************************************/
501 // Description: This function sets volume of background music.
502 // Author: Cherry.Liu
504 /*****************************************************************************/
505 PUBLIC ERR_AUD_E AUD_SetBkMusicVolume (
506 AUD_BKMUSIC_PARAM_TYPE_E eParamType,
507 uint16 uiUplinkLevel,
508 uint16 uiDownlinkLevel
510 /*****************************************************************************/
511 // Description: This function eanble/disable earphone when power off.
514 /*****************************************************************************/
515 PUBLIC void AUD_Enable_Earphone(BOOLEAN bEnable);
516 /*****************************************************************************/
517 // Description: This function is used to get dsp trans samplerate param
518 /*****************************************************************************/
519 PUBLIC uint16 AUD_Get_PcmTrans_Samplerate(void);
521 /*****************************************************************************/
522 // Description: This function is used to get record dev type.
523 /*****************************************************************************/
524 PUBLIC AUD_REC_DEV_TYPE_E AUD_GetRecordDevType(HAUDIODEV hDevice);
526 /*****************************************************************************/
527 // Description: interface for mmi to set eq mode.
528 // Author: Cherry.Liu
530 //****************************************************************************/
531 PUBLIC BOOLEAN AUD_SetEqMode(
535 /*****************************************************************************/
536 // Description: interface to set digital gain in arm volume[]. high 7bits
537 // Author: Cherry.Liu
539 //****************************************************************************/
540 PUBLIC void AUD_SetDgGain(
544 /*****************************************************************************/
545 // Description: Audio interface to call sbc encoder for dsp codec.
548 //****************************************************************************/
549 PUBLIC void AUD_SBC_Encode_For_DSPCodec(
550 uint16 source_samplerate,
551 uint16 frame_address,
555 /**---------------------------------------------------------------------------*
557 **---------------------------------------------------------------------------*/