合唱音效解释

  1. 1. 算法原理

[cpp] view plaincopyprint?

  1. 合唱即多人一起唱歌,以下是算法的原理图:

[cpp] view plaincopyprint?

  1. /*
  2. *
  3. *        * gain-in                                           ___
  4. * ibuff -----+--------------------------------------------->|   |
  5. *            |      _________                               |   |
  6. *            |     |         |                   * level 1  |   |
  7. *            +---->| delay 1 |----------------------------->|   |
  8. *            |     |_________|                              |   |
  9. *            |        /|\                                   |   |
  10. *            :         |                                    |   |
  11. *            : +-----------------+   +--------------+       | + |
  12. *            : | Delay control 1 |<--| mod. speed 1 |       |   |
  13. *            : +-----------------+   +--------------+       |   |
  14. *            |      _________                               |   |
  15. *            |     |         |                   * level n  |   |
  16. *            +---->| delay n |----------------------------->|   |
  17. *                  |_________|                              |   |
  18. *                     /|\                                   |___|
  19. *                      |                                      |
  20. *              +-----------------+   +--------------+         | * gain-out
  21. *              | Delay control n |<--| mod. speed n |         |
  22. *              +-----------------+   +--------------+         +----->obuff
  23. *
  24. *
  25. */

2. 代码实现

[cpp] view plaincopyprint?

  1. void dsound_chorus_processmix(dsound_chorus_t* chorus, dsound_real_t *in,
  2. dsound_real_t *left_out, dsound_real_t *right_out)
  3. {
  4. int sample_index;
  5. int i;
  6. dsound_real_t d_in, d_out;
  7. for (sample_index = 0; sample_index < FLUID_BUFSIZE; sample_index++) {
  8. d_in = in[sample_index];
  9. d_out = 0.0f;
  10. # if 0
  11. /* Debug: Listen to the chorus signal only */
  12. left_out[sample_index]=0;
  13. right_out[sample_index]=0;
  14. #endif
  15. /* Write the current sample into the circular buffer */
  16. chorus->chorusbuf[chorus->counter] = d_in;
  17. for (i = 0; i < chorus->number_blocks; i++) {
  18. int ii;
  19. /* Calculate the delay in subsamples for the delay line of chorus block nr. */
  20. /* The value in the lookup table is so, that this expression
  21. * will always be positive.  It will always include a number of
  22. * full periods of MAX_SAMPLES*INTERPOLATION_SUBSAMPLES to
  23. * remain positive at all times. */
  24. int pos_subsamples = (INTERPOLATION_SUBSAMPLES * chorus->counter
  25. - chorus->lookup_tab[chorus->phase[i]]);
  26. int pos_samples = pos_subsamples/INTERPOLATION_SUBSAMPLES;
  27. /* modulo divide by INTERPOLATION_SUBSAMPLES */
  28. pos_subsamples &= INTERPOLATION_SUBSAMPLES_ANDMASK;
  29. for (ii = 0; ii < INTERPOLATION_SAMPLES; ii++){
  30. /* Add the delayed signal to the chorus sum d_out Note: The
  31. * delay in the delay line moves backwards for increasing
  32. * delay!*/
  33. /* The & in chorusbuf[...] is equivalent to a division modulo
  34. MAX_SAMPLES, only faster. */
  35. d_out += chorus->chorusbuf[pos_samples & MAX_SAMPLES_ANDMASK]
  36. * chorus->sinc_table[ii][pos_subsamples];
  37. pos_samples--;
  38. };
  39. /* Cycle the phase of the modulating LFO */
  40. chorus->phase[i]++;
  41. chorus->phase[i] %= (chorus->modulation_period_samples);
  42. } /* foreach chorus block */
  43. d_out *= chorus->level;
  44. /* Add the chorus sum d_out to output */
  45. left_out[sample_index] += d_out;
  46. right_out[sample_index] += d_out;
  47. /* Move forward in circular buffer */
  48. chorus->counter++;
  49. chorus->counter %= MAX_SAMPLES;
  50. } /* foreach sample */
  51. }

合唱音效解释

时间: 2024-08-04 16:12:00

合唱音效解释的相关文章

混响音效解释

1.1混响的作用与基本原理 混响器即是人为地给声音加上混响的效果.这样通过改变场景的混响时间,可以对比较“干”的信号进行再加工,增加空间感,提高声音的丰满度,同时可以制造一些特殊的声音效果,如回声等,通过改变混响声和直达声的比例,还可以体现声音的远近感和空间感. 下图一直观的解释了混响的简单原理.为了研究的方便,声学上把混响分为几个部份,规定了一些习惯用语.混响的第一个声音也就是直达声(Direct sound),也就是源声音,在效果器里叫做 dry out (干声输出),随后的几个明显的相隔比

均衡音效解释

1均衡的作用 均衡器是一种可以分别调节各种频率成分电信号放大量的电子设备,通过对各种不同频率的电信号的调节来补偿扬声器和声场的缺陷,补偿和修饰各种声源及其它特殊作用.具体来说,它的作用如下: (1)改善音质 这是均衡的主要用途,它可使乐器的音质更好听.例如,可用高频衰减的方法来降低歌手的咝音,或者对直接录入的电吉它声进行消除镶边声的处理.提升100Hz可使鼓声更丰满,或者对低音吉它声在250Hz附近衰减时变得更清晰.衰减100Hz有助于削弱因众多和声汇集而引起的低音增强感.每支话筒的频响和摆放位

Cocos2d-x使用UserDefault数据持久化实例:保存背景音乐和音效设置

UserDefault可以实现数据的存储,但是它的使用不能泛滥,具体讲一般情况下不会使用它保存大量的数据,它没有SQL语句那样的灵活.UserDefault除了保存游戏设置外,还有可以长期保持游戏精灵等对象的状态. 我们通过一个实例介绍一下在游戏项目中如何使用UserDefault.如图所示,在Setting场景中可以设置是否播放背景音乐和音效,现在我们将它完善将选择的状态保存到UserDefault中. 设置背景音乐与音效(上图HelloWorld场景.下图Setting场景) 我们需要定义两

Android 事件分发机制具体解释

很多其它内容请參照我的个人网站: http://stackvoid.com/ 网上非常多关于Android事件分发机制的解释,大多数描写叙述的都不够清晰,没有吧来龙去脉搞清晰,本文将带你从Touch事件产生到Touch事件被消费这一全过程作全面的剖析. 产生Touch事件 这部分牵扯到硬件和Linux内核部分:我们简单讲述一下这部分内容,假设有兴趣的话能够參考这篇文章. 传递Touch事件 触摸事件是由Linux内核的一个Input子系统来管理的(InputManager),Linux子系统会在

音乐与动漫及游戏的关系--游戏动漫音乐音效制作 分贝块

良好音乐音效在动漫游戏中是相当重要的,让音乐来增加动画的表达效果而不是仅仅辅助动画,在公众的眼里,新的.富有表现性的音乐应该和动画造型一起出现在我们的电影中并不断为气氛.地点和场景提供支持和节奏. 音乐可以解释任何视觉效果,当音乐成为动画的一部分,环境就会让人觉得更加清洁和庄严.在伴随音乐的烘托下,峡谷中雷暴的轰鸣就形成了视觉上逐渐增强的效果. 好的高质量的游戏动漫配乐音乐音效制作方就显得十分的重要 与制作普通的主题曲.校歌.专辑有所不同的是,在对游戏配乐进行创作的时候,更加需要注重产品的细分,

效果器及音响相关术语解释

cable:连线,过线,以上是常规的翻译,意思就是连接一个输出到另一个输入,但根据信号的不同,cable分的很细的种类. instrument cable:乐器线,在电声领域特指高阻抗低电流的信号过线,必须有完善的屏蔽结构及坚固的外壳,大家常用的并不是这种线,由于这种线的要求太高,价格也非常贵. signal cable:信号线,大家通常用来连接吉他的是这种线,一般这种线是用做低阻信号的传输. speaker cable;音箱线,在吉他领域经常被忽视的一种线材,在功率放大信号和喇叭之间传递信号的

【基础练习】【线性DP】codevs1058 合唱队形题解

题目来源:04NOIP提高组 先上题目 题目描述 Description N位同学站成一排,音乐老师要请其中的(N-K)位同学出列,使得剩下的K位同学排成合唱队形. 合唱队形是指这样的一种队形:设K位同学从左到右依次编号为1,2-,K,他们的身高分别为T1,T2,-,TK,  则他们的身高满足T1<...<Ti>Ti+1>->TK(1<=i<=K). 你的任务是,已知所有N位同学的身高,计算最少需要几位同学出列,可以使得剩下的同学排成合唱队形. 输入描述 Inpu

做预解释题的一点小方法和小技巧

在JavaScript中的函数理解中预解释是一个比较难懂的话题.原理虽然简单,寥寥数言,但其内涵却有深意,精髓难懂.如何在轻松活跃的头脑中将它学会,现在针对我在学习中的一点小窍门给大家分享一下,希望能给大家一些帮助: 万事需遵循"原理"--"预解释"无节操和"this"指向:(可先看例题解析然后结合原理进行学习) (感谢蕾蕾老师给归纳的预解释无节操原理:) 如果函数传参数则先于以下执行,就相当于在函数私有作用域下var了一个变量:根据作用域原理,

Android插件实例——360 DroidPlugin具体解释

在中国找到钱不难,但你的一个点子不意味着是一个创业.你谈一个再好的想法,比方我今天谈一个创意说,新浪为什么不收购GOOGLE呢?这个创意非常好.新浪一收购GOOGLE.是不是新浪就变成老大了?你从哪儿弄来钱?怎么去整合GOOGLE呢: 之前写过有关于Android 插件方向的文章,解析了一下Android的插件原理与执行方式.非常多小伙伴都问我.为什么不把我制作的插件放到Github上,让大家共享一下. 我仅仅能说.大哥啊,这个插件是我在公司研发的时候制作的,商业机密.不能开源啊. 刚好.近期逛