如何实现音频淡入淡出效果
2010-01-07 14:21
344 查看
淡入效果是指音频选区的起始音量很小甚至无声,而最终音量相对效大,则在一段时间范围内音量逐渐增大。
淡出效果是指音频选区的起始音量相对较大,而最终音量很小甚至无声,则在一段时间范围内音量逐渐降低。
音量的逐渐变化是一个线性代数问题,可通过如下代码去对每一帧数据进行线性处理:
While(!音乐结束)
{
获取一帧音频数据放入缓存;
short* pData = (short*)一帧音频数据缓存;// 这里我们处理16位的采样数据, //因此需要将BYTE类型转换成short类型
double rate = 1.0f;
if(音乐当前播放位置-音乐开始播放位置)<=淡入时间长度)//淡入
{
rate = (double)( 音乐当前播放位置-音乐开始播放位置)/ 淡入时间长度;
}
else if(音乐结束位置-音乐当前播放位置<=淡出时间长度)//淡出
{
rate = (double)( 音乐结束位置-音乐当前播放位置)/( 淡出时间长度);
}
if (rate<0.0f)//防止计算误差
{
rate = 0.0f;
}
if (rate<1.0f&&rate>=0.0f)
{
for (int i=0;i<一帧音频数据缓存大小/2;i++)
{
pData[i]*=rate;//对每个采样数据进行线性转换
}
}
播放一帧音频数据;
}
淡出效果是指音频选区的起始音量相对较大,而最终音量很小甚至无声,则在一段时间范围内音量逐渐降低。
音量的逐渐变化是一个线性代数问题,可通过如下代码去对每一帧数据进行线性处理:
While(!音乐结束)
{
获取一帧音频数据放入缓存;
short* pData = (short*)一帧音频数据缓存;// 这里我们处理16位的采样数据, //因此需要将BYTE类型转换成short类型
double rate = 1.0f;
if(音乐当前播放位置-音乐开始播放位置)<=淡入时间长度)//淡入
{
rate = (double)( 音乐当前播放位置-音乐开始播放位置)/ 淡入时间长度;
}
else if(音乐结束位置-音乐当前播放位置<=淡出时间长度)//淡出
{
rate = (double)( 音乐结束位置-音乐当前播放位置)/( 淡出时间长度);
}
if (rate<0.0f)//防止计算误差
{
rate = 0.0f;
}
if (rate<1.0f&&rate>=0.0f)
{
for (int i=0;i<一帧音频数据缓存大小/2;i++)
{
pData[i]*=rate;//对每个采样数据进行线性转换
}
}
播放一帧音频数据;
}
相关文章推荐
- android 如何修改音频文件实现播放淡入淡出效果
- 如何实现音频淡入淡出效果
- 在bootstrop中如何使用tab选项卡 实现淡入淡出的效果
- js如何实现淡入淡出效果
- js如何实现淡入淡出效果
- 原生JavaScript如何实现淡入淡出效果?
- Axure RP Pro - jQuery - 如何实现淡入淡出效果
- jQuery_轮播图_淡入淡出效果(如何用jQuery实现一个淡入淡出轮播图)
- 如何实现无刷新的DropdownList联动效果
- 如何实现无刷新的DropdownList联动效果
- 利用API函数实现图像淡入淡出效果(VB)
- Accordion插件如何实现图标效果啊?
- winform实现淡入淡出,窗体折叠等效果
- WinForm利用 WinApi实现 淡入淡出 弹出 效果 仿QQ消息
- jquery 实现淡入淡出图片轮播效果
- Android如何实现毛玻璃效果之Android高级模糊技术
- android如何实现按钮的点击水波纹效果:
- JS实现淡入淡出图片效果的方法分析
- 如何实现视差滚动效果的网页?
- Windows Phone 7 如何判断ListBox控件滚动到底(实现上拉加载的效果)