该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

/*

源码:音乐播放

作者:傻傻_痴痴

来源:c4droid吧(欢迎加入交流)

日期:2014.3.30

若要转载源码,请注明作者出处,禁止修改为自己名义发布源码

*/

#include

#include

#include

#include

/*播放状态:未播放、正在播放、暂停*/

#define NOPLAY 1

#define PLAYING 2

#define PAUSED 3

/*当前播放歌曲编号*/

int ListNum = 0;

/*播放状态,初始化为未播放*/

int PLAYSTATE=NOPLAY;

/* 声音对象接口*/

static SLObjectItf engine_m = NULL;

/*声音引擎接口*/

static SLEngineItf engine_e;

/* 混音器对象接口 */

static SLObjectItf output_mix = NULL;

/*混音器输出池接口*/

static SLEnvironmentalReverbItf outputMixEnvironmentalReverb = NULL;

/* 环境回响音效*/

static const SLEnvironmentalReverbSettings reverbSettings =SL_I3DL2_ENVIRONMENT_PRESET_STONECORRIDOR;

/* 播放声音源对象接口*/

static SLObjectItf uriPlayerObject = NULL;

static SLPlayItf uriPlayerPlay;

void PlayNext(int *Num);

void PlayShutdown();

/*创建声音引擎函数*/

void createEngine()

{

SLresult result;

/*创建声音引擎*/

result = slCreateEngine(&engine_m, 0, NULL, 0, NULL, NULL);

/*返回结果,如果失败则出现提示*/

assert(SL_RESULT_SUCCESS == result);

/*实现声音引擎*/

result = (*engine_m)->Realize(engine_m, SL_BOOLEAN_FALSE);

assert(SL_RESULT_SUCCESS == result);

/*获取声音引擎接口*/

result =(*engine_m)->GetInterface(engine_m, SL_IID_ENGINE,&engine_e);

assert(SL_RESULT_SUCCESS == result);

/*设置播放器功能,环境回响效果,音量*/

const SLInterfaceID ids[] = { SL_IID_ENVIRONMENTALREVERB,

};

/*设置是否强制实现实现*/

const SLboolean req[] = {

SL_BOOLEAN_FALSE,

};

/*从声音引擎创建混音器*/

result =(*engine_e)->CreateOutputMix(engine_e, &output_mix,1, ids, req);

assert(SL_RESULT_SUCCESS == result);

/*实现混音器效果*/

result = (*output_mix)->Realize(output_mix, SL_BOOLEAN_FALSE);

assert(SL_RESULT_SUCCESS == result);

#if 0

/* 获取接口混音器接口并放到混音器输出池*/

result =(*output_mix)->GetInterface(output_mix, SL_IID_ENVIRONMENTALREVERB, &outputMixEnvironmentalReverb);

if (SL_RESULT_SUCCESS == result)

{

result =(*outputMixEnvironmentalReverb)->SetEnvironmentalReverbProperties

(outputMixEnvironmentalReverb, &reverbSettings);

}

#endif

}

/*监听是否播放结束*/

void playOverEvent(SLPlayItf caller, void *pContext, SLuint32 playevent)

{

if (playevent ==SL_PLAYEVENT_HEADATEND)

{

/*播放结束自动下一曲*/

printf("播放完毕\n");

PLAYSTATE=NOPLAY;

PlayNext(&ListNum);

}

}

/*加载声音源*/

bool LoadMUS(char *uriPath)

{

SLresult result;

SLDataLocator_URI loc_uri = { SL_DATALOCATOR_URI, (SLchar *) uriPath};

/*数据格式*/

SLDataFormat_MIME format_mime=

{ SL_DATAFORMAT_MIME, NULL, SL_CONTAINERTYPE_UNSPECIFIED };

SLDataSource audioSrc = { &loc_uri, &format_mime };

/*混音器数据*/

SLDataLocator_OutputMix loc_outmix =

{ SL_DATALOCATOR_OUTPUTMIX, output_mix};

SLDataSink audioSnk = { &loc_outmix, NULL };

result =(*engine_e)->CreateAudioPlayer(engine_e, &uriPlayerObject,&audioSrc, &audioSnk, 0,NULL,NULL);

assert(SL_RESULT_SUCCESS == result);

/*实现播放对象*/

result = (*uriPlayerObject)->Realize(uriPlayerObject, SL_BOOLEAN_FALSE);

if (SL_RESULT_SUCCESS != result)

{

(*uriPlayerObject)->Destroy(uriPlayerObject);

uriPlayerObject = NULL;

return false;

}

SLBufferQueueItf _aud_buf;

/*获取播放接口*/

result =(*uriPlayerObject)->GetInterface(uriPlayerObject, SL_IID_PLAY,&uriPlayerPlay);

assert(SL_RESULT_SUCCESS == result);

/*设置播放接口监听*/

result =(*uriPlayerPlay)->RegisterCallback(uriPlayerPlay, playOverEvent, NULL);

result =(*uriPlayerPlay)->SetCallbackEventsMask(uriPlayerPlay,SL_PLAYEVENT_HEADATEND);

assert(SL_RESULT_SUCCESS == result);

return true;

}

/*设置播放状态*/

void setPlayingUriAudioPlayer(bool played)

{

SLresult result;

if (uriPlayerPlay != NULL)

{

result =(*uriPlayerPlay)->SetPlayState(uriPlayerPlay,played ? SL_PLAYSTATE_PLAYING : SL_PLAYSTATE_PAUSED);

assert(SL_RESULT_SUCCESS == result);

}

}

/*播放歌曲*/

void PlayMUS(char *MUSPath)

{

/*不同状态,执行不同*/

switch (PLAYSTATE)

{

case NOPLAY:

LoadMUS(MUSPath);

setPlayingUriAudioPlayer(true);

PLAYSTATE=PLAYING;

break;

case PLAYING:

setPlayingUriAudioPlayer(false);

PlayShutdown();

createEngine();

LoadMUS(MUSPath);

setPlayingUriAudioPlayer(true);

break;

case PAUSED:

PlayShutdown();

createEngine();

LoadMUS(MUSPath);

setPlayingUriAudioPlayer(true);

PLAYSTATE=PLAYING;

break;

}

}

/*播放下一曲*/

void PlayNext(int *Num)

{

*Num += 1;

if (*Num > MusicNum)

{

*Num = 1;

}

struct song *ps = indexSong(MySong, *Num);

if (ps!=NULL)

{

PlayMUS(ps->path);

printf("下一曲: %s\n", ps->name);

}

}

/*播放上一曲*/

void PlayUpper(int *Num)

{

*Num -= 1;

if (*Num <= 0)

{

*Num = MusicNum;

}

struct song *ps = indexSong(MySong, *Num);

if (ps!=NULL)

{

PlayMUS(ps->path);

printf("上一曲: %s\n", ps->name);

}

}

/*暂停歌曲*/

void PauseMUS()

{

switch (PLAYSTATE)

{

case PLAYING:

setPlayingUriAudioPlayer(false);

printf("暂停播放\n");

PLAYSTATE=PAUSED;

break;

case PAUSED:

setPlayingUriAudioPlayer(true);

printf("恢复播放\n");

PLAYSTATE=PLAYING;

break;

case NOPLAY:

ListNum = 1;

struct song *ps = indexSong(MySong, ListNum);

PlayMUS(ps->path);

printf("播放: %s\n", ps->name);

PLAYSTATE=PLAYING;

break;

等等,,,,,都封装好了,贴吧精品贴有

录音读写程序c语言,如果用c语言程序读取一段音频文件要如何做,具体要调用哪些函数,在网上搜索了半天,乱七八糟的,找不到什么有用的信息...相关推荐

  1. python读写磁盘扇区数据有什么用_18-55.在Windows中,能够自动修复文件系统错误、扫描并尝试恢复坏扇区的操作是( )_学小易找答案...

    [单选题]sklearn实现KNN算法,使用的方法是? [单选题]以下机器加工方式,witness没有提供的是( ) [多选题]以下哪些是python常用的科学计算库? [多选题]16-68. 在Wi ...

  2. 上传声音 微信小程序_图文详解微信小程序中调用录音功能和音频播放的方法...

    老规矩,先几张图. 1.为了进来看得清楚.刚开始没有加载音频列表.代码往前挪一挪即可. 2.按住 录音按钮的时候会出现麦克风.中间的麦克风是个帧动画. 其实就是用js控制图片显示隐藏.没啥好说的.这里 ...

  3. matlab如何使音频文件声音变大_如何用录音软件AU2020给音频消除噪音?只需简单几步你也可以办到...

    最近有好多朋友私信我,最近头条音频频道单价很高,比视频收益还要高,大家纷纷想通过自已录制音频上传的方式,来获取收益.问到如何才能给录好的音频文件降噪,还原出自已真实的声音,得到一个好的音质.而对于平时 ...

  4. 微信录音amr音频文件转mp3格式

    直到现在,仍然不存在一项旨在网页上播放音频的标准.HTML5 规定了一种通过 audio 元素来包含音频的标准方法.audio 元素能够播放声音文件或者音频流.当前,audio 元素支持三种音频格式: ...

  5. 用c语言做RFID读卡程序,2.STM32读卡号读写数据代码示例3.0(C语言)

    文件名大小更新时间 2.STM32读卡号读写数据代码示例3.0(C语言)\HFRFID.uvgui.WEIZAI736912016-07-15 2.STM32读卡号读写数据代码示例3.0(C语言)\H ...

  6. Linux 应用程序 嵌汇编,Linux下C语言嵌汇编

    Using Assembly Language in Linux. Intel和AT&T汇编语法差异: 1.前缀: Intel汇编寄存器和立即数无需前缀.后者寄存器前缀为%,立即数前缀为$. ...

  7. 单片机c语言存数据,单片机中C语言的数据存储与程序编写

    一.五大内存分区 内存分成5个区,它们分别是堆.栈.自由存储区.全局/静态存储区和常量存储区. 1.栈区(stack):FIFO就是那些由编译器在需要的时候分配,在不需要的时候自动清除的变量的存储区. ...

  8. 上传声音 微信小程序_SpringBoot开发案例之微信小程序录音上传

    前言 书接上回的<SpringBoot开发案例之微信小程序文件上传>,正常的业务流程是,口语测评需要学生通过前端微信小程序录入一段音频,通过调用第三方音频处理服务商进行评分,然后服务端对原 ...

  9. [Go语言入门] 02 Go语言程序结构

    文章目录 02 Go语言程序结构 2.1 Go语言的一些基本概念 2.2 go源文件的代码结构 2.3 Go项目的基本文件结构 2.4 实战:创建一个模块 2.5 实战:从另一个模块调用刚创建的模块 ...

最新文章

  1. 用这种方法实现无监督端到端图像分类!(附论文)
  2. 监督学习和无监督学习
  3. 为Apache动态增加模块
  4. RHEL5一个网卡绑定多个IP
  5. Project Euler 50 Consecutive prime sum
  6. Google 发布浏览器3D插件 O3D API
  7. 新技术驱动新商业,网易创新企业大会亮点抢先看!
  8. PHP正则匹配6到16位字符组合(且只能为数字、字母、下划线)
  9. linux清空日志文件内容 (转)
  10. 《研磨设计模式》抽象工厂模式与简单工厂模式的比较(golang)
  11. 计蒜客 17119 Trig Function(切比雪夫多项式)
  12. 【滤波器】基于时变维纳滤波器实现语音去噪含Matlab源码
  13. 如何关闭正在运行的端口
  14. 简单介绍JVM的GC过程
  15. 三天打鱼两天晒网问题
  16. JavaScript事件解析
  17. linux下ms安装教程,MS在linux的安装过程.doc
  18. 68 ping: Lacking privilege for raw socket.
  19. 全链路前端性能优化方案
  20. 基于EinScan-S的编码结构光方法空间三维模型重建

热门文章

  1. Hadoop应用配置
  2. Shopee安全团队(新加坡)安全运营/漏洞研究岗位开放招聘
  3. php得qq交流群号,为各位PHP爱好者提供一个交流群
  4. “玩儿单词”产品分析
  5. 开学了,计算机的大学生们,送你们一篇经书,希望你们的四年不负年华!
  6. 全职三年 我又上班了
  7. 电脑网站(手机网站)支付宝支付的配置信息(appid、商户私钥、支付宝公钥)
  8. 我和【2011淘宝大奖赛】有个约会
  9. 无需Java环境,Jar包一键启停(静默启停),开机自启,读取外部配置文件
  10. Mp3播放器项目问题记录