LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1058|回复: 3

关于STEREO的编程方法

[复制链接]
发表于 2004-7-28 16:31:52 | 显示全部楼层 |阅读模式
要处理声音当然需要涉及STEREO了,一开始学习的时候往往是用MONO的方式处理的,因为比较方便。但是真正的声音文件,很多都是STEREO的。所以必要说明一下针对STEREO的处理方法。
因为各种不同的文件格式或者不同的DPS,它们取得原始数据的方法都是不同的,没有普遍考虑的意义。所以这里我们考虑的仅仅是如何处理左声道和右声道,而不关心是如何分别取得左声道和右声道数据的。
对于类似Flanger那种需要大量延迟缓冲区的处理效果而言,在进行STEREO处理方式的时候,原本的缓冲区就必须扩大为同样大小的两个,为左声道和右声道分别服务。在实时音效处理中,因为一个左声道数据和一个右声道数据表示的仅仅是相对于MONO的一个采样点所经过的时间。所以为了保证数据被及时处理,往往必须在一个循环之内把一组左声道和右声道同时运算完毕。不过,无论如何,对STEREO的处理总是要比对MONO慢上一点的。这也正是为何声道越多处理速度要求越高,需要占用的内存空间越大的原因吧。
另外,对于Phase Shifting效果来说,也有可能把左右声道的数据进行混合,然后再输出的情况。
还有一种做法,就是把左声道和右声道的相位特意偏移一定的角度(可以是90度),然后造成一种声音分层次从左右两个方向传来的效果,这种方法用来加强STEREO效果时非常明显,也正是区别STEREO和MONO最直观的方法。
和处理各种音效不同的是,在进行BPM计算的时候,输入数据要求是MONO格式,而不是STEREO格式。从STEREO转换到MONO的方式非常简单:MONO = (Lch + Rch) / 2
发表于 2004-7-30 13:36:46 | 显示全部楼层
请大哥讲一下如果要在播放的时候分声道,是不是需不需要在录制的时候就分出左右声道?
如果不需要的话是如何分别分离出两个声道的声音呢?

还有一种声音突然从低音突然滑到高音的时候,先是右边耳机声音大,然后随着音调升高右耳机声音减小,左耳机声音加大,这样的立体声效果连磁带机都能做到,是不是录音的时候就已经将左右声道分离好了,还是用芯片运算分离出来的?如果是运算分离出来的那么是如何计算的呢?
 楼主| 发表于 2004-7-30 14:38:12 | 显示全部楼层
请大哥讲一下如果要在播放的时候分声道,是不是需不需要在录制的时候就分出左右声道?
如果不需要的话是如何分别分离出两个声道的声音呢?

还有一种声音突然从低音突然滑到高音的时候,先是右边耳机声音大,然后随着音调升高右耳机声音减小,左耳机声音加大,这样的立体声效果连磁带机都能做到,是不是录音的时候就已经将左右声道分离好了,还是用芯片运算分离出来的?如果是运算分离出来的那么是如何计算的呢?


确实,现代的CD录音方式是分左右两个声道的数据保存的。也就是说STEREO的数据量比MONO的多一倍。对于老式的磁带机,我不太了解,应该也是这样存储的。

你说的效果可以用两种途径来实现:
1、使用数字方式或者模拟方式的信号处理的手段。对左右声道进行相位偏移。对于MONO来说,左右声道的相位是相同的,也就是你感觉到的左右两边的声音是一样的。但是经过一种效果处理之后(这种效果叫做Phase Shifting,以后我会介绍的),左右两个声道的音乐相位被偏移了一定的角度(一般是90度左右),那么你听到的声音就有层次感了,也就是说,会左右变换了。
2、建立在左右声道的数据分别保存的基础上,其实很容易理解,就是在磁带制作之前,在音效处理师那里把这种效果先做好。然后分左右声道保存起来就可以了。

在老式的磁带机上面,有时候也能实现这种效果,靠的主要是模拟式处理器(也就是一大堆电阻电容电感)。而在现在的CD机上面,几乎所有的都是靠数字式方式处理了,DSP芯片参与其中的大量运算工作。内存的BUFFER代替了电容电感的延迟效果,高速的DSP运算为快速实现多声道多频带滤波提供了可能。
发表于 2004-7-30 16:07:07 | 显示全部楼层
多谢大哥,明白了许多

PS:突然想起来很早之前有过磁带机的卡拉OK,好像就说明当时已经有了分声道录制的磁带了,那时候的磁带机也已经支持分声道放音,现在很少看到这种机器我觉得可能是因为还没等到普及磁带就被CD淘汰了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表