请问如何将左声道的数据和右声道的数据分离开??

lwglucky 2005-02-05 11:05:47
请问如何将左声道的数据和右声道的数据分离开??
请问如何将左声道的数据和右声道的数据分离开??
...全文
423 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
jlfuhappy 2005-02-21
  • 打赏
  • 举报
回复
”声音数据本来就是按照声道顺序排列的“
同意,因此可以直接从声音文件中取得各个声道的数据。
GoogleGeek 2005-02-18
  • 打赏
  • 举报
回复
声音数据本来就是按照声道顺序排列的
例如对于stereo 16bit的声音数据,排列的是:

左右左右.......
给你demo ,你自己看吧!

/*
The following codes copyed from AMFC(Advanced Multimedia Framework Class) project
futher information ,please contact stream4mobile@gmail.com
*/

/* FIX ME: should use more abstract 'N' channels system */
/*
@output1
@output2
分别代表一个声道
@input 为输入的stereo
@nb_samples为input的数据的数量
*/
void stereo_split(short *output1, short *output2, short *input, int nb_samples)
{
int i;

for(i=0;i<nb_samples;i++) {
*output1++ = *input++;
*output2++ = *input++;
}
}

void stereo_mux(short *output, short *input1, short *input2, int nb_samples)
{
int i;

for(i=0;inb_samples;i++) {
*output++ = *input1++;
*output++ = *input2++;
}
}

对于5.1/6.1/7.1声道的数据,只要记住了声道的排列顺序,同样类似处理,只不过麻烦一点,
下面是所有的排列顺序,---大部分我们只用到其中的subclass
enum eu_AMFC_ChannelMap
{
CHANNEL_UNKNOWN = 0,
CHANNEL_FRONT_LEFT = (1),
CHANNEL_FRONT_RIGHT = (1<<1),
CHANNEL_FRONT_CENTER = (1<<2),
CHANNEL_LFE = (1<<3),
CHANNEL_BACK_LEFT = (1<<4),
CHANNEL_BACK_RIGHT = (1<<5),
CHANNEL_BACK_CENTER = (1<<6),
CHANNEL_SIDE_LEFT = (1<<7),
CHANNEL_SIDE_RIGHT = (1<<8)
};
tom_video 2005-02-18
  • 打赏
  • 举报
回复
tom_video.9629.com 上有个声道叠加的例子,你看看就名白.
loveisbug 2005-02-06
  • 打赏
  • 举报
回复
nod
minideveloper 2005-02-06
  • 打赏
  • 举报
回复
左右声道是分开的,所以很容易分开,比如16bit的stereo的pcm数据中前面的8bit是channel1的数据,后面的8bit就是channel2的数据了
RunningYang 2005-02-05
  • 打赏
  • 举报
回复
那就找找一个splitter的例子看着改一下了
:)

2,543

社区成员

发帖
与我相关
我的任务
社区描述
专题开发/技术/项目 多媒体/流媒体开发
社区管理员
  • 多媒体/流媒体开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧