blob: 68c219068f1474b410933a63622b173be765db59 [file] [log] [blame]
/**
@file
ql_audio.h
@brief
This file provides the definitions for audio & record, and declares the
API functions.
*/
/*============================================================================
Copyright (c) 2017 Quectel Wireless Solution, Co., Ltd. All Rights Reserved.
Quectel Wireless Solution Proprietary and Confidential.
=============================================================================*/
/*===========================================================================
EDIT HISTORY FOR MODULE
This section contains comments describing changes made to the module.
Notice that changes are listed in reverse chronological order.
WHEN WHO WHAT, WHERE, WHY
---------- ------------ ----------------------------------------------------
07/06/2018 Stanley.yong Revise the comments for API.
19/04/2018 Zichar.zhang Add Ql_Update_wav_size function.
Add Ql_AudPlayer_OpenExt function.
Add Ql_AudRecorder_OpenExt function.
19/12/2016 Stanley.yong Optimize the APIs, and add comments.
13/12/2016 Running.qian Implement newly-designed APIs.
18/07/2016 Jun.wu Create
=============================================================================*/
#ifndef __AUD_H__
#define __AUD_H__
//this two headers for alsa params setting
// #include "asoundlib.h"
//#include "alsa-intf/alsa_audio.h"
#include "mbtk_type.h"
#define QUEC_PCM_8K 8000
#define QUEC_PCM_16K 16000
#define QUEC_PCM_44k 44100
#define QUEC_PCM_MONO 1
#define QUEC_PCM_STEREO 2
typedef enum {
AUD_UP_LINK = 0,
AUD_DOWN_LINK,
} Enum_AudDlink;
typedef enum {
AUD_PLAYER_ERROR = -1,
AUD_PLAYER_START = 0,
AUD_PLAYER_PAUSE,
AUD_PLAYER_RESUME,
AUD_PLAYER_NODATA, //Buff no data and play tread will sleep
AUD_PLAYER_LESSDATA, //Buff has less data
AUD_PLAYER_FINISHED,
} Enum_AudPlayer_State;
typedef enum {
AUD_RECORDER_ERROR = -1,
AUD_RECORDER_START = 0,
AUD_RECORDER_PAUSE,
AUD_RECORDER_RESUME,
AUD_RECORDER_FINISHED,
} Enum_AudRecorder_State;
/****************************************************************************
* Audio Volume Level Definition
***************************************************************************/
typedef enum {
AUD_VOLUME_LEVEL1 = 0,
AUD_VOLUME_LEVEL2,
AUD_VOLUME_LEVEL3,
AUD_VOLUME_LEVEL4,
AUD_VOLUME_LEVEL5,
AUD_VOLUME_LEVEL_END
}Enum_AudVolumeLevel;
/****************************************************************************
* Audio Format
***************************************************************************/
typedef enum {
AUD_STREAM_FORMAT_MP3 = 0,
AUD_STREAM_FORMAT_AMR = 1,
AUD_STREAM_FORMAT_PCM = 2,
AUD_STREAM_FORMAT_END
} Enum_AudStreamFormat;
/****************************************************************************
* Audio Direct
***************************************************************************/
typedef enum {
AUD_LINK_REVERSE = 0,
AUD_LINK_FORWARD = 1,
AUD_LINK_BOTH = 2,
AUD_LINK_INVALID
}Enum_AudStreamDirection;
/*****************************************************************
********************New Advanced Audio High API******************
* ***************************************************************/
struct wav_header {
uint32_t riff_id;
uint32_t riff_sz;
uint32_t riff_fmt;
uint32_t fmt_id;
uint32_t fmt_sz;
uint16_t audio_format;
uint16_t num_channels;
uint32_t sample_rate;
uint32_t byte_rate; /* sample_rate * num_channels * bps / 8 */
uint16_t block_align; /* num_channels * bps / 8 */
uint16_t bits_per_sample;
uint32_t data_id;
uint32_t data_sz;
};
#define ID_RIFF 0x46464952
#define ID_WAVE 0x45564157
#define ID_FMT 0x20746d66
#define ID_DATA 0x61746164
#define FORMAT_PCM 1
struct ST_MediaParams {
Enum_AudStreamFormat format;
Enum_AudVolumeLevel volume;
Enum_AudStreamDirection direct;
};
//
// Function: _cb_onPlayer
//
// Description:
// This callback function handles the result of audio player.
//
// @param hdl:
// Handle received from Ql_AudPlayer_Open().
// @param result:
// the executing result for previous operation, such as Open, Play, Pause, Resume, Stop.
// see the definition of Enum_AudPlayer_State for the specific meaning.
typedef int(*_cb_onPlayer)(int hdl, int result);
//
// Function: _cb_onRecorder
//
// Description:
// This callback function handles the result of audio recorder.
// If result < 0, the recorder will stop the recording automatically.
//
// @param result:
// the executing result for previous operation, such as Open, StartRecord, Pause, Resume, Stop.
// see the definition of Enum_AudRecorder_State for the specific meaning.
// @param pBuf:
// pointer to the output recording (PCM) data.
// @param length:
// the length of the output recording (PCM) data.
typedef int(*_cb_onRecorder)(int result, unsigned char* pBuf, unsigned int length); //if result < 0 will stop record, else continue record
/*****************************************************************
* Function: Ql_AudPlayer_Open
*
* Description:
* Open audio play device, and specify the callback function.
* This function can be called twice to play different audio sources.
*
* Parameters:
* device : a string that specifies the PCM device.
* NULL, means the audio will be played on the default PCM device.
*
* If you want to mixedly play audio sources, you can call this
* API twice with specifying different PCM device.
* The string devices available:
* "hw:0,0" (the default play device)
* "hw:0,13" (this device can mix audio and TTS)
* "hw:0,14"
*
* cb_func : callback function for audio player.
* The results of all operations on audio player
* are informed in callback function.
*
* Return:
* pcm device handle on success
* -1 for failure
*****************************************************************/
int Ql_AudPlayer_Open(char* device, _cb_onPlayer cb_func);
/*========================================================================
FUNCTION: Ql_AudPlayer_Play
=========================================================================*/
/** @brief
This function writes pcm data to pcm device to play.
@param[in] hdl, the handle returned by Ql_AudPlayer_Open().
@param[in] pData, pointer to the start address of pcm data.
@param[in] length, the length of pcm data.
@return
on success, the return value is the number of bytes to play
on failure, the return value is -1;
@dependencies
Ql_AudPlayer_Open() must be first called successfully.
*/
/*=======================================================================*/
int Ql_AudPlayer_Play(int hdl, unsigned char* pData, unsigned int length);
/*========================================================================
FUNCTION: Ql_AudPlayer_PlayFrmFile
=========================================================================*/
/** @brief
This function plays the pcm data from the specified file.
@param[in] hdl, the handle returned by Ql_AudPlayer_Open().
@param[in] fd, a file descriptor that contains pcm data.
Note:
the file offset should be set to the start position of pcm
data region, which means you should move the file offset
skipping the file header (such as wave header, amr header).
@param[in] offset, file offset. Please set it to -1 if no need to use.
@return
0 on success
-1 on failure
@dependencies
Ql_AudPlayer_Open() must be first called successfully.
*/
/*=======================================================================*/
int Ql_AudPlayer_PlayFrmFile(int hdl, int fd, int offset);
//
// Function: Ql_AudPlayer_Pause
//
// Description:
// Pause playing.
// @param hdl:
// Handle received from Ql_AudPlayer_Open().
int Ql_AudPlayer_Pause(int hdl);
//
// Function: Ql_AudPlayer_Resume
//
// Description:
// Resume playing.
// @param hdl:
// Handle received from Ql_AudPlayer_Open().
int Ql_AudPlayer_Resume(int hdl);
//
// Function: Ql_AudPlayer_Stop
//
// Description:
// Stop playing audio
// hdl:
// Handle received from Ql_AudPlayer_Open().
void Ql_AudPlayer_Stop(int hdl);
//
// Function: Ql_AudPlayer_Close
//
// Description:
// Close player, and free the resource.
// @param hdl:
// Handle received from Ql_AudPlayer_Open().
void Ql_AudPlayer_Close(int hdl);
int Ql_AudPlayer_set_LessDataThreshold(int hdl, unsigned short threshSize);
int Ql_AudPlayer_get_freeSpace(int hdl);
/*****************************************************************
* Function: Ql_AudRecorder_Open
*
* Description:
* Open audio record device, and specify the callback function.
*
* Parameters:
* device : not used. MUST be NULL.
*
* cb_func : callback function for audio player.
* The results of all operations on audio recorder
* are informed in callback function.
*
* Return:
* pcm device handle
* -1 for failure
*****************************************************************/
int Ql_AudRecorder_Open(char* device, _cb_onRecorder cb_fun);
//
// Function: Ql_AudRecorder_StartRecord
//
// Description:
// Start to record.
// The record data is output in _cb_onRecorder.
//
// Return:
// 0 on success
// -1 on failure
int Ql_AudRecorder_StartRecord(void);
//
// Function: Ql_AudRecorder_Pause
//
// Description:
// Pause recording
int Ql_AudRecorder_Pause(void);
//
// Function: Ql_AudRecorder_Resume
//
// Description:
// Resume recording
int Ql_AudRecorder_Resume(void);
//
// Function: Ql_AudRecorder_Stop
//
// Description:
// Stop recording
void Ql_AudRecorder_Stop(void);
//
// Function: Ql_AudRecorder_Close
//
// Description:
// Close recorder, and free the resource
void Ql_AudRecorder_Close(void);
//
// Function: Ql_clt_set_mixer_value
//
// Description:
// Close recorder, and free the resource
boolean Ql_clt_set_mixer_value(const char *device, int count, const char *value);
//****************QL TONE API************************//
struct Ql_TonePara {
unsigned int lowFreq; //100-4000HZ
unsigned int highFreq; //100-4000HZ
unsigned int volume; //0 -1000
unsigned int duration; // >0 ms
};
int Ql_AudTone_Open(char* device, _cb_onPlayer cb);//cb not support now
int Ql_AudTone_Start(int hdl, struct Ql_TonePara *para);
void Ql_AudTone_Stop(int hdl);
void Ql_AudTone_Close(int hdl);
//****************QL Codec API************************//
struct Ql_ALC5616_DRCAGC {
unsigned short control1_mask;
unsigned short control1_value;
unsigned short control2_mask;
unsigned short control2_value;
unsigned short control3_mask;
unsigned short control3_value;
};
//
// Function: Ql_AudCodec_Set_ALC5616_DRCAGC
//
// Description:
// Set ALC5616 DRC/AGC configuration
int Ql_AudCodec_Set_ALC5616_DRCAGC(const char *i2c, struct Ql_ALC5616_DRCAGC *cfg);
//
// Function: Ql_Update_wav_size
//
// Description:
// update wav format file size in the header
// @param fd:
// wav file discriptor
// @param size:
// wav file size to update
int Ql_Update_wav_size(int fd, int size);
//add by grady, 2018-5-29
/*
* describe : this function is use to open pcm device
* paras :
* device : this should be fix to hw:0,0
* flags ; pcm play flags
* rate: sample rate
* channels : audio channal 1 or 2
* format: format to play or record, 16bit line,MP3
* hostless: if there is no file it is true
* return :
* pcm : pcm handle, use can use this handle to read write data
*/
struct pcm *quec_pcm_open(char *device, unsigned flags, unsigned rate, unsigned channels, unsigned format, unsigned hostless);
/*
* describe : this function is use to close pcm handle
* paras :
* pcm : pcm handle to close
* return :
*/
int quec_pcm_close(struct pcm *pcm );
/*
* describe : this function is use to read pcm buffer
* paras :
* pcm : pcm handle to write date
* buffer: data buffer
* lenth: data length
* return :
*/
int quec_read_pcm(struct pcm *pcm, void * buffer, int length);
/*
* describe : this function is use to get pcm buffer lenth
* paras :
* lenth: data length
* return
* buffer length
*/
int quec_get_pem_buffer_len(struct pcm *pcm);
//add by grady, 2018-6-2
/*
* describe : this function is use to open mixer device
* paras :
* device: mixer device
* return
* mixer handle
*/
struct mixer *quec_mixer_open(const char *device);
/*
* describe : this function is use to close mixer device
* paras :
* mixer: mixer handle
* return
* none
*/
void quec_mixer_close(struct mixer *mixer);
/*
* describe : this function is use to get mixer devie control
* paras :
* mixer: mixer handle
* name: mixer device
* index: mixer index
* return
* mixer control
*/
struct mixer_ctl *quec_mixer_get_control(struct mixer *mixer, const char *name, unsigned index);
/*
* describe : this function is use to set mulvalues
* paras :
* mixer: mixer handle
* count: count
* argv: data
* return :
*
*/
int quec_mixer_ctl_mulvalues(struct mixer_ctl *ctl, int count, char ** argv);
//end grady
/**
* @brief Set RX DSP Gain
* @details
* Gain support [-36,12] dB
*
* @param gain
* DSP gain
*/
int Ql_Rxgain_Set(int gain);
/**
* @brief Set Playback PCM Samprate
* @details
* 0 for NB 1 for WB
*
* @param samprate
* samprate for PCM playback,default value is PCM NB
*/
int Ql_Playback_Samprate_Set(int samprate);
/*****************************************************************
* Function: Ql_AudPlayer_OpenExt
*
* Description:
* expend function from Ql_AudPlayer_OpenExt
* Open audio play device, and specify the callback function.
* This function can be called twice to play different audio sources.
*
* Parameters:
* device : a string that specifies the PCM device.
* NULL, means the audio will be played on the default PCM device.
*
* If you want to mixedly play audio sources, you can call this
* API twice with specifying different PCM device.
* The string devices available:
* "hw:0,0" (the default play device)
* "hw:0,13" (this device can mix audio and TTS)
* "hw:0,14"
*
* cb_func : callback function for audio player.
* The results of all operations on audio player
* are informed in callback function.
*
* flags : pcm flags, eg: PCM_MMAP, PCM_NMMAP.
*
* channels: pcm sample channels.
*
* rate : pcm sample rate.
*
* format : pcm sample fromat
*
* Return:
* pcm device handle
* NULL, fail
*****************************************************************/
int Ql_AudPlayer_OpenExt(
char *dev,
_cb_onPlayer cb_fun,
int flags,
int channels,
int rate,
int format);
/*****************************************************************
* Function: Ql_AudRecorder_Open
*
* Description:
* Open audio record device, and specify the callback function.
*
* Parameters:
* device : not used. MUST be NULL.
*
* cb_func : callback function for audio player.
* The results of all operations on audio recorder
* are informed in callback function.
*
* flags : pcm flags, eg: PCM_MMAP, PCM_NMMAP.
*
* channels: pcm sample channels.
*
* rate : pcm sample rate.
*
* format : pcm sample fromat
*
* Return:
* pcm device handle
* NULL, fail
*****************************************************************/
int Ql_AudRecorder_OpenExt(
char *dev,
_cb_onRecorder cb_fun,
int flags,
int channels,
int rate,
int format);
/*****************************************************************
* Function: Ql_Mp3_To_Wav
*
* Description:
* set mp3 file change to wav file.
*
* Parameters:
* wavpath : wav path
*
* mp3path : mp3 path
*
* Return:
* 0: success
* -1: fail
*****************************************************************/
int Ql_Mp3_To_Wav(const char *wavpath, char *mp3path);
/*****************************************************************
* Function: Ql_Mp3_To_Wav
*
* Description:
* flay mp3 file.
*
* Parameters:
* wavpath : wav path
*
* hdl : Device handle
*
* sample_rate : 0 for NB(8000) 1 for WB(16000)
*
* Return:
* 0: success
* -1: fail
*****************************************************************/
int Ql_Mp3_To_Play(char *mp3path, int hdl,int sample_rate);
/*
* Function: uac enable
*
* Description:
* uac enable
*
* Parameters:
* none
* Return:
* TURE or FALSE
*/
int ql_uac_enable(void);
/*
* Function: uac disable
*
* Description:
* uac disable
*
* Parameters:
* none
* Return:
* TURE or FALSE
*/
int ql_uac_disable(void);
#endif //__AUD_H__