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

/*

源码:音乐播放

作者:傻傻_痴痴

来源: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. 录音读写程序c语言,如果用c语言程序读取一段音频文件要如何做,具体要调用哪些函数,在网上搜索了半天,乱七八糟的,找不到什么有用的信息...

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 /* 源码:音乐播放 作者:傻傻_痴痴 来源:c4droid吧(欢迎加入交流) 日期:2014.3.30 若要转载源码,请注明作者出处,禁止修改为自己名义 ...

  2. linux下最简单多线程单文件socks5代理proxy服务器程序(仅一个c文件,带详细注解)

    2020.9.11 网上看的都比较复杂,GITHUB找了一个多线程的相对简单的MicroSocks项目,花了几周时间(没办法,菜鸟一个)改了一下,改成单文件,测试OK. /* wxl_socks5_p ...

  3. java dom创建xml文件_Java 如何使用dom方式读取和创建xml文件

    Java 如何使用dom方式读取和创建xml文件 发布时间:2020-11-11 17:08:31 来源:亿速云 阅读:101 作者:Leah 本篇文章给大家分享的是有关Java 如何使用dom方式读 ...

  4. 文件或目录损坏且无法读取?正确恢复文件的4个方法

    你有没有遇到过"文件损坏已无法读取"的提示窗口?相信使用电脑的你,或多或少都会遇到过,尤其是我们使用硬盘或者移动硬盘的时候. 遇到这种问题,我们第一时间不是按照系统提示去删除或者格 ...

  5. pr 文件结构不一致_premiere导入文件的文件结构中存在不一致 已禁止读取和写入此文件的元数据...

    展开全部 1.先将csv文件分bai别读出, 然后写入一du个H5文件zhi当中dao. 对外只有一个H5文件,内部,实际可装版入多个csv文件. 2.因为权 csv文件包括汉字,因此可以通过enco ...

  6. 使用c语言测试大端和小端,C语言*符号使用及大端法小端法测试

    工具:Microsoft Visual C++ 6.0 例子: int a = 1; int* b = &a; C语言规定a表示存储单元中的数据,&a表示存储单元的地址,b存储的就是a ...

  7. c 语言 测试工具,几种C/C++语言安全检测工具介绍

    描述: (1)输入待扫描的源程序文件或者文件夹,分析输入的文件和文件夹,识别出其中的所有源程序文件,建立一个待扫描文件列表,下一步就可以从待扫描文件列表中有序的读取带扫描文件进行扫描. (2)当词法分 ...

  8. 哈工大 c语言测试与系统控制 ad,哈工大——c语言在测量与控制中应用实验报告.pdf...

    哈工大--c语言在测量与控制中应用实验报告 Harbin Institute of Technology Harbin Institute of Technology C 语言在测量与控制中的 C 语 ...

  9. c语言测试代码怎么写,初学C语言,写了一个测试手速的工具,代码发上来,存着。。...

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 RT 有幸看到的可以去试一试.... #include "stdio.h" #include "time.h" # ...

  10. c语言 测试有哪种天赋,c语言是指什么

    c语言是指什么 多元性向潜能发展测验是一种性向测验,"性向"是指学**某种知识或技能的潜能,和学生目前的个人程度有关,因此可用来预测个人未来在某些相关知识技能的学**成效.中学多远 ...

最新文章

  1. 用 Java 实现断点续传 (HTTP)
  2. uva 10047 the monocyle (四维bfs)
  3. JavaScript实现radianToDegree弧度到度算法(附完整源码)
  4. java延迟覆盖_高效Java第九条覆盖equals时总要覆盖hashCode
  5. 【初学线段树,看这篇文章准没错】线段树(单点修改and区间修改)acm寒假集训日记22/1/10
  6. play另一个模板japid
  7. 思科交换机VLAN基本配置
  8. 从7654浏览器卸载到安装360安全卫士
  9. C/C++利用netsh设置动态IP和静态IP
  10. guet-acm-开挂的chair
  11. 3d场景渲染插件MultiScatter 1.623
  12. [附源码]SSM计算机毕业设计中华美食网站JAVA
  13. Windows下wafw00f的安装
  14. android 软件备份工具,android备份软件 知乎 备份软件 知乎
  15. 基于Python的头脑王者脚本(纯娱乐)
  16. 利用python将中文名转换为英文名
  17. GreenDao 使用详解(入门篇)
  18. return--返回值
  19. windows计算器(calc)按键功能详解
  20. 汽车环视算法原理及其实现

热门文章

  1. WPS 页码设置为(前1...前3,后4...后6)
  2. 睡眠十律 (BBC纪录片) -- 讲述10分钟获得好睡眠的方法
  3. u盘 计算机管理 没有就绪,U盘无法识别先别着急扔!这五步操作还能挽救一下...
  4. 一个程序员未来5年的自我规划
  5. 手把手教你搭建一台永久运行的个人服务器
  6. 通过游戏编程学Python(番外篇)— 乱序成语、猜单词
  7. 20190904_chip-seq/ ATAC-seq/DAP-seq 原理理解
  8. SpringBoot自定义Starter(二十四)
  9. AI:全球人工智能领域代表性学者简介及大佬们的关系圈—向大佬们学习(国外内分开,持续更新/建议收藏)
  10. 金融反欺诈 常用特征处理方法