录音读写程序c语言,如果用c语言程序读取一段音频文件要如何做,具体要调用哪些函数,在网上搜索了半天,乱七八糟的,找不到什么有用的信息...
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
/*
源码:音乐播放
作者:傻傻_痴痴
来源: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语言程序读取一段音频文件要如何做,具体要调用哪些函数,在网上搜索了半天,乱七八糟的,找不到什么有用的信息...相关推荐
- python读写磁盘扇区数据有什么用_18-55.在Windows中,能够自动修复文件系统错误、扫描并尝试恢复坏扇区的操作是( )_学小易找答案...
[单选题]sklearn实现KNN算法,使用的方法是? [单选题]以下机器加工方式,witness没有提供的是( ) [多选题]以下哪些是python常用的科学计算库? [多选题]16-68. 在Wi ...
- 上传声音 微信小程序_图文详解微信小程序中调用录音功能和音频播放的方法...
老规矩,先几张图. 1.为了进来看得清楚.刚开始没有加载音频列表.代码往前挪一挪即可. 2.按住 录音按钮的时候会出现麦克风.中间的麦克风是个帧动画. 其实就是用js控制图片显示隐藏.没啥好说的.这里 ...
- matlab如何使音频文件声音变大_如何用录音软件AU2020给音频消除噪音?只需简单几步你也可以办到...
最近有好多朋友私信我,最近头条音频频道单价很高,比视频收益还要高,大家纷纷想通过自已录制音频上传的方式,来获取收益.问到如何才能给录好的音频文件降噪,还原出自已真实的声音,得到一个好的音质.而对于平时 ...
- 微信录音amr音频文件转mp3格式
直到现在,仍然不存在一项旨在网页上播放音频的标准.HTML5 规定了一种通过 audio 元素来包含音频的标准方法.audio 元素能够播放声音文件或者音频流.当前,audio 元素支持三种音频格式: ...
- 用c语言做RFID读卡程序,2.STM32读卡号读写数据代码示例3.0(C语言)
文件名大小更新时间 2.STM32读卡号读写数据代码示例3.0(C语言)\HFRFID.uvgui.WEIZAI736912016-07-15 2.STM32读卡号读写数据代码示例3.0(C语言)\H ...
- Linux 应用程序 嵌汇编,Linux下C语言嵌汇编
Using Assembly Language in Linux. Intel和AT&T汇编语法差异: 1.前缀: Intel汇编寄存器和立即数无需前缀.后者寄存器前缀为%,立即数前缀为$. ...
- 单片机c语言存数据,单片机中C语言的数据存储与程序编写
一.五大内存分区 内存分成5个区,它们分别是堆.栈.自由存储区.全局/静态存储区和常量存储区. 1.栈区(stack):FIFO就是那些由编译器在需要的时候分配,在不需要的时候自动清除的变量的存储区. ...
- 上传声音 微信小程序_SpringBoot开发案例之微信小程序录音上传
前言 书接上回的<SpringBoot开发案例之微信小程序文件上传>,正常的业务流程是,口语测评需要学生通过前端微信小程序录入一段音频,通过调用第三方音频处理服务商进行评分,然后服务端对原 ...
- [Go语言入门] 02 Go语言程序结构
文章目录 02 Go语言程序结构 2.1 Go语言的一些基本概念 2.2 go源文件的代码结构 2.3 Go项目的基本文件结构 2.4 实战:创建一个模块 2.5 实战:从另一个模块调用刚创建的模块 ...
最新文章
- 用这种方法实现无监督端到端图像分类!(附论文)
- 监督学习和无监督学习
- 为Apache动态增加模块
- RHEL5一个网卡绑定多个IP
- Project Euler 50 Consecutive prime sum
- Google 发布浏览器3D插件 O3D API
- 新技术驱动新商业,网易创新企业大会亮点抢先看!
- PHP正则匹配6到16位字符组合(且只能为数字、字母、下划线)
- linux清空日志文件内容 (转)
- 《研磨设计模式》抽象工厂模式与简单工厂模式的比较(golang)
- 计蒜客 17119 Trig Function(切比雪夫多项式)
- 【滤波器】基于时变维纳滤波器实现语音去噪含Matlab源码
- 如何关闭正在运行的端口
- 简单介绍JVM的GC过程
- 三天打鱼两天晒网问题
- JavaScript事件解析
- linux下ms安装教程,MS在linux的安装过程.doc
- 68 ping: Lacking privilege for raw socket.
- 全链路前端性能优化方案
- 基于EinScan-S的编码结构光方法空间三维模型重建