小编MOH*_*OHW的帖子

解交织PCM(*.wav)立体声音频数据

我知道PCM数据存储为[left][right][left][right]....我试图将立体声PCM转换为单声道Vorbis(*.ogg),据我所知,可以通过将左右声道减半((左+右)*0.5)来实现.我实际上通过修改libvorbis sdk中的编码器示例来实现这一点,

#define READ 1024
signed char readbuffer[READ*4];
Run Code Online (Sandbox Code Playgroud)

并且因此读取PCM数据

fread(readbuffer, 1, READ*4, stdin)
Run Code Online (Sandbox Code Playgroud)

然后,我将这两个频道减半,

buffer[0][i] = ((((readbuffer[i*4+1]<<8) | (0x00ff&(int)readbuffer[i*4]))/32768.f) + (((readbuffer[i*4+3]<<8) | (0x00ff&(int)readbuffer[i*4+2]))/32768.f)) * 0.5f;
Run Code Online (Sandbox Code Playgroud)

它工作得很好,但是,我不明白他们如何从PCM数据中解交左右声道(即所有的位移和"ANDing"和"ORing").

c++ encoding pcm vorbis

6
推荐指数
1
解决办法
2048
查看次数

将 8 位 PCM 转换为 16 位 PCM

这个问题开始,我了解了如何解交织 16 位 PCM 数据的左右声道。

我现在的问题是,如何将 8 位 PCM 解交织并“拉伸”为 16 位值

c++ audio pcm

2
推荐指数
1
解决办法
3549
查看次数

标签 统计

c++ ×2

pcm ×2

audio ×1

encoding ×1

vorbis ×1