如何做单声道到立体声转换?(how to do mono to stereo conversion?

2019-09-23 10:58发布

我使用libswresample从任何PCM格式44.1,16位整型,立体声重新取样。

我玩弄产生的音频流的一些音频音量分析,我想通了,万一我有44.1kHz的,16位INT单为源,我有大致的表现公式:

leftSample = sourceSample / sqrt(2);
rightSample = sourceSample / sqrt(2);

但我期待:

leftSample = sourceSample;
rightSample = sourceSample;

(在情况下,源是立体声的,我只是有leftSample = leftSourceSample; rightSample = rightSourceSample;

我期待来自几个方面:

  1. 这是怎么我自己直接的解决方案很可能已经。
  2. 我搜索了一下四周,其他人似乎做同样,如这里 。
  3. 在一个很普通的播放增益实现(唯一一个我真的知道,使用基本上无处不在,我觉得首先从mp3gain;一个副本,可以看出这里 ),它也做的:

     switch ( num_channels) { case 1: right_samples = left_samples; case 2: break; default: return GAIN_ANALYSIS_ERROR; } 

    这是ESP。 相关的,因为播放增益通过使用标准声(粉红噪声,可以下载此实现校准位置 ),这是单声道。

    在播放增益规范,还计算出这样的(见这里 )。

我的困惑提出后,我试图执行的ReplayGain自己,我偶然发现了这一点。

因此,一些问题:

  1. 为什么libswresample做到这一点?
  2. 这个预期在libswresample或错误? (我想从源(例如,了解这里 ),但我还没有完全理解这一切呢。)我加了一个bug报告在这里 。
  3. 什么是“正确”的解决方案?
  4. 什么是其他球员在做什么?
  5. 什么是常见的声卡,如果你给单样本,以它做什么?

(我还张贴在这个问题上avp.stackexchange现在,也许这是一个更好的地方问这个,不知道。)

Answer 1:

实施是一个正确实施的“平移”单声道信号转换为立体声场。 如果您平移,而是一路向左或向右所有你想要的方式如同它在中间被平移的信号强度是相同的,因此声像被留下将是:

//left panning
leftSample = sourceSample;
rightSample = 0;
//right panning
leftSample = 0;
rightSample = sourceSample;
//center panning (same power as hard left/right conversion/)
leftSample = sourceSample * sqrt(2)/2;
rightSample = sourceSample * sqrt(2)/2;

但是,如果从单声道转换为立体声,你的直觉是正确的。 有没有理由降低水平,因为你不会被比较集中,以声像信号。 去最好的办法是在充分的力量,让信号:

//mono to stereo conversion
leftSample = sourceSample;
rightSample = sourceSample;

这也有可能是他们留下一些后S / R转换增益变化,但水平显得随意。



文章来源: how to do mono to stereo conversion?