G711a音频播放测试

demo:

#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <string.h>
#include <signal.h>
#include <unistd.h>
#include <fcntl.h>
#include <pthread.h>
#include <sys/time.h>
#include <sys/ioctl.h>

#include "gmlib.h"
#include "GM8136s_hal_gpio_voice_player.h"

void *audio_groupfd2;
void *file_object;
void *render_object;
int audio_fd2;

int hal_audio_dec_init(void)
{
    int i = 0;
    DECLARE_ATTR(file_attr, gm_file_attr_t);
    DECLARE_ATTR(audio_render_attr, gm_audio_render_attr_t);
    audio_groupfd2 = gm_new_groupfd();

	//g_av_info.audio_info[1].audio_buf_len = AUDIO_BITSTREAM_LEN;
	// g_av_info.audio_info[1].audio_buf     = malloc(g_av_info.audio_info[1].audio_buf_len);
	// memset(g_av_info.audio_info[i].audio_buf, 0, AUDIO_BITSTREAM_LEN);
	
	file_attr.sample_rate = 16000;
	file_attr.sample_size = 16;
	file_attr.channel_type = GM_MONO;//单声道

	file_object = gm_new_obj(GM_FILE_OBJECT);
	render_object= gm_new_obj(GM_AUDIO_RENDER_OBJECT);
	gm_set_attr(file_object, &file_attr);

	// block_size: PCM(don't care) AAC(1024) ADPCM(256) G711(320)
	audio_render_attr.vch = 0;
	audio_render_attr.encode_type = GM_G711_ALAW;
	audio_render_attr.block_size = 320;

	
	gm_set_attr(render_object, &audio_render_attr);
	audio_fd2 = gm_bind(audio_groupfd2, file_object, render_object);

    return 0;
}


int hal_audio_dec_uninit(void)
{
    gm_unbind(audio_fd2);
    gm_apply(audio_groupfd2);	
	gm_delete_obj(file_object);
	gm_delete_obj(render_object);
    gm_delete_groupfd(audio_groupfd2);
}

int  hal_audio_dec_start(void)
{
    int ret = -1;
    ret = gm_apply(audio_groupfd2);
    if(ret < 0 )
    {
        printf("video_playback_start failed!!! \n");
        return -1;
    }
    return 0;
}


int hal_audio_playback(int audio_type,const char *audio_data,int date_len)
{
	int ret;
	char dec_buf[1024] = {0};
	gm_dec_multi_bitstream_t multi_bs[1];


    multi_bs[0].bindfd = audio_fd2;
   	multi_bs[0].bs_buf = audio_data;
    multi_bs[0].bs_buf_len = date_len;
	
    if ((ret = gm_send_multi_bitstreams(multi_bs, 1, 500)) < 0)
    {
        printf("<send bitstream fail(%d)!>\n", ret);
        return -1;
    }
    //printf("audio_playback .....................> end  \n");
    return 0;
}

int voice_player(char *filename)
{
	FILE*			fp;
	fp = fopen(filename,"rb");
	if(fp == 0){
		return -1;
	}
	char AudioBuff[1000];
	int ret;
	while(1)
	{
		ret = fread(AudioBuff,1,320,fp);
        if (ret <= 0)
        {
			break;
        }
		hal_audio_playback(0,AudioBuff,ret);
		usleep(1000/12);
	}
	return 0;

}
int main(int argc,char* argv[])
{
	if(argc != 2)
	{
		printf("useage : voice_player xxx.g711a");
		return 0;
	}
	int ret = 0;
    ret = gm_init(); //gmlib initial
    if(ret == 0 )
    {
		printf("gm_init sucess\n");

	}else
	{
		printf("gm_init error ret = %d\n",ret);

	}
	hal_gm8136s_gpio_pin_init();
	hal_gm8136s_speaker_ctrl(1);
	hal_audio_dec_init();
	hal_audio_dec_start();
	voice_player(argv[1]);

	
	usleep(500*1000);

	hal_audio_dec_uninit();
	hal_gm8136s_speaker_ctrl(0);
	printf("voice_player_sucess!!\n");
	return 0;
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值