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
262 AUD_REC_DSP_DATA_MIN, //=5
263 AUD_REC_DSP_DATA_1 = AUD_REC_DSP_DATA_MIN,//=5
264 AUD_REC_DSP_DATA_2, //=6
265 AUD_REC_DSP_DATA_3, //=7
266 AUD_REC_DSP_DATA_4, //=8
267 AUD_REC_DSP_DATA_5, //=9
268 AUD_REC_DSP_DATA_6, //=10
269 AUD_REC_DSP_DATA_7, //=11
270 AUD_REC_DSP_DATA_8, //=12
271 AUD_REC_DSP_DATA_9, //=13
272 AUD_REC_DSP_DATA_10, //=14
273 AUD_REC_DSP_DATA_11, //=15
274 AUD_REC_DSP_DATA_12, //=16
275 AUD_REC_DSP_DATA_13, //=17
276 AUD_REC_DSP_DATA_14, //=18
277 AUD_REC_DSP_DATA_15, //=19
278 AUD_REC_DSP_DATA_MAX = AUD_REC_DSP_DATA_15,
279 AUD_REC_DSP_LOG, //20
286 MR475 = 0,/*4.75kbps*/
295 N_MODES /* number of (SPC) modes */
296 }AMR_MODE; //amr encode mode
305 /**---------------------------------------------------------------------------*
307 **---------------------------------------------------------------------------*/
308 /**---------------------------------------------------------------------------*
309 ** Function Prototypes *
310 **---------------------------------------------------------------------------*/
311 /*****************************************************************************/
312 // Description: This function plays generic tone.
313 // Author: Xueliang.Wang
314 // Note: This function does nothing if it is called when playing
316 /*****************************************************************************/
317 PUBLIC ERR_AUD_E AUD_PlayGenericTone( // If succeed, return ERR_AUD_NONE,
318 // else return error value
319 AUD_GENERIC_TONE_ID_E tone_id, // Generic tone enumeration value.
320 uint32 duration // Number of milliseconds of playing this tone.
323 /*****************************************************************************/
324 // Description: This function stops playing generic tone.
325 // Author: Xueliang.Wang
327 /*****************************************************************************/
328 PUBLIC ERR_AUD_E AUD_StopGenericTone(void); // If succeed, return ERR_AUD_NONE,
329 // else return error value
331 /*****************************************************************************/
332 // Description: This function is used to set voice codec enable/disable.
333 // Author: Xueliang.Wang
335 /*****************************************************************************/
336 PUBLIC ERR_AUD_E AUD_EnableVoiceCodec( // If succeed, return ERR_AUD_NONE,
337 // else return error value
338 BOOLEAN is_enable // SCI_TRUE: Enable, SCI_FALSE: Disable
342 /*****************************************************************************/
343 // Description: This function is used to set engineering audio parameters.
344 // Author: Xueliang.Wang
346 /*****************************************************************************/
347 PUBLIC ERR_AUD_E AUD_SetEngineeringParameter( // If succeed, return ERR_AUD_NONE,
348 // else return error value
349 AUDIO_DEVICE_MODE_TYPE_E parameter_type,
350 AUDIO_TEST_DATA_T parameter_data
355 /*****************************************************************************/
356 // Description: This function is used to enable/disable volice loopback
358 // Author: Xueliang.Wang
360 /*****************************************************************************/
361 PUBLIC ERR_AUD_E AUD_EnableVoiceLoopback( // If succeed, return ERR_AUD_NONE,
362 // else return error value
363 BOOLEAN is_enable, // 0: disable 1:enable
364 uint16 delay_time // millisecones
367 /*****************************************************************************/
368 // Description: This function is used to get engineering audio parameters.
369 // Author: Sunsome.Ju
371 /*****************************************************************************/
372 PUBLIC ERR_AUD_E AUD_GetEngineeringParameter( // If succeed, return ERR_AUD_NONE,
373 // else return error value
374 AUDIO_DEVICE_MODE_TYPE_E parameter_type,
375 AUDIO_TEST_DATA_T *parameter_data
379 /*****************************************************************************/
380 // Description: This function is used to set midi playing frequency.
383 /*****************************************************************************/
384 PUBLIC void AUDIO_SetMidiPlayFreq(uint32 midi_play_freq);
386 /*****************************************************************************/
387 // Description: This function is used to set whether the audio data is output by stereo mode.
388 // Author: BenjaminWang
390 /*****************************************************************************/
391 PUBLIC void AUDIO_SetDataStereo( // return void
392 BOOLEAN stereo_state // SCI_TRUE - stereo on SCI_FALSE - stereo off
395 /*****************************************************************************/
396 // Description: This function is used to know whether the audio data is output by stereo mode.
397 // Author: BenjaminWang
399 /*****************************************************************************/
400 PUBLIC BOOLEAN AUDIO_GetDataStereo(void); // return SCI_TRUE - stereo on SCI_FALSE - stereo off
402 PUBLIC void AUD_EnableAmplifier(BOOLEAN bEnable);
405 /*****************************************************************************/
406 // Description: This function is used to turn on MICBIAS voltage.
407 // Author: Benjamin.Wang
409 //****************************************************************************/
410 void VB_TurnOnMICBIAS(void);
412 /*****************************************************************************/
413 // Description: This function is used to shut down MICBIAS voltage.
414 // Author: Benjamin.Wang
416 //****************************************************************************/
417 void VB_ShutDownMICBIAS(void);
419 //record call back function
420 typedef void (*RECORD_CALLBACK)(uint16 data_length);
422 //play call back function
423 typedef BOOLEAN (*PLAY_CALLBACK)();
425 /*****************************************************************************/
426 // Description: This function is used to set voice codec enable/disable.
429 /*****************************************************************************/
430 PUBLIC ERR_AUD_E AUD_EnableVoiceRecord( // If succeed, return ERR_AUD_NONE,
431 // else return error value
432 BOOLEAN is_enable, // SCI_TRUE: Enable, SCI_FALSE: Disable
433 AUD_REC_FORMAT_E recorder_format,
434 RECORD_CALLBACK callback_fun
437 /*****************************************************************************/
438 // Description: This function config the amr parameters
441 /*****************************************************************************/
443 extern void AUD_CfgAmrParam( AMR_MODE amr_mode, uint8 channels, uint8 sample_rate );
445 /*****************************************************************************/
446 // Description: This function transmit the recorded data to uplayer buffer
449 /*****************************************************************************/
450 extern void AUD_ReadVoiceData( uint16 *destination_buf_ptr,uint16 data_length );
452 /*****************************************************************************/
453 // Description: This function start the play flow
456 /*****************************************************************************/
457 extern void AUD_StartPlay( AUD_REC_FORMAT_E voice_format,
458 PLAY_CALLBACK callback_fun,
459 BOOLEAN is_to_speaker,
463 /*****************************************************************************/
464 // Description: This function transmit data to downlayer for playing
467 /*****************************************************************************/
468 extern void AUD_WriteVoiceData (uint16 * source_buf_ptr,uint16 data_length);
470 /*****************************************************************************/
471 // Description: This function stop the paly process
474 /*****************************************************************************/
475 extern void AUD_StopPlay( void );
477 /*****************************************************************************/
478 // Description: United operation for POP noise restrain.
481 /*****************************************************************************/
482 PUBLIC void AUD_DSPUnitedOperation(void);
483 /*****************************************************************************/
484 // Description: This function is used to set Audio Codec Output Data Type.
485 /*****************************************************************************/
486 PUBLIC void AUD_SetOutputDataType(AUDIO_OUTPUT_DATA_TYPE_E eDataType);
488 /*****************************************************************************/
489 // Description: This function is used to get Audio Codec Output Data Type.
490 /*****************************************************************************/
491 PUBLIC AUDIO_OUTPUT_DATA_TYPE_E AUD_GetOutputDataType(void);
493 /*****************************************************************************/
494 // Description: This function is used to config dsp trans samplerate param
495 /*****************************************************************************/
496 PUBLIC void AUD_Cfg_PcmTrans_Param(uint16 dest_samplerate);
498 /*****************************************************************************/
499 // Description: This function sets volume of background music.
500 // Author: Cherry.Liu
502 /*****************************************************************************/
503 PUBLIC ERR_AUD_E AUD_SetBkMusicVolume (
504 AUD_BKMUSIC_PARAM_TYPE_E eParamType,
505 uint16 uiUplinkLevel,
506 uint16 uiDownlinkLevel
508 /*****************************************************************************/
509 // Description: This function eanble/disable earphone when power off.
512 /*****************************************************************************/
513 PUBLIC void AUD_Enable_Earphone(BOOLEAN bEnable);
514 /*****************************************************************************/
515 // Description: This function is used to get dsp trans samplerate param
516 /*****************************************************************************/
517 PUBLIC uint16 AUD_Get_PcmTrans_Samplerate(void);
519 /*****************************************************************************/
520 // Description: This function is used to get record dev type.
521 /*****************************************************************************/
522 PUBLIC AUD_REC_DEV_TYPE_E AUD_GetRecordDevType(HAUDIODEV hDevice);
524 /*****************************************************************************/
525 // Description: interface for mmi to set eq mode.
526 // Author: Cherry.Liu
528 //****************************************************************************/
529 PUBLIC BOOLEAN AUD_SetEqMode(
533 /*****************************************************************************/
534 // Description: interface to set digital gain in arm volume[]. high 7bits
535 // Author: Cherry.Liu
537 //****************************************************************************/
538 PUBLIC void AUD_SetDgGain(
542 /*****************************************************************************/
543 // Description: Audio interface to call sbc encoder for dsp codec.
546 //****************************************************************************/
547 PUBLIC void AUD_SBC_Encode_For_DSPCodec(
548 uint16 source_samplerate,
549 uint16 frame_address,
553 /**---------------------------------------------------------------------------*
555 **---------------------------------------------------------------------------*/