繁体   English   中英

如何在两个不同的音频样本之间找到比例?

[英]How do I find a scale between two different audio samples?

我打算制作一个分析音频样本的通用应用程序。 当我说'通用'时,我的意思是任何技术(Javascript,C,Java等)都可以使用它。 基本上我在iOS上使用Apple的AVFoundation制作了一个应用程序,它实时接收长度为512(bufferSize = 512)的麦克风样本。 在Python我使用PyAudio做了同样的事情,但不幸的是我收到了非常不同的值......

看样品:

Samples of bufferSize = 512 on iOS:

[0.0166742969, 0.0181432627, 0.0184620395, 0.0182254426, 0.0181945376, 0.0185530782, 0.0192517322, 0.0199078992, 0.0204724055, 0.0212812237, 0.022370765, 0.0230008475, 0.0225516111, 0.0213304944, 0.0200473778, 0.019841563, 0.0206818394, 0.0211550407, 0.0207783803, 0.020227218 ....

Samples of bufferSize = 512 on Python:

[ -52.  -32.  -11.   10.   24.   31.   37.   38.   33.   25.   10.   -4.
  -18.  -26.  -29.  -39. ....

更多:

https://pastebin.com/jrM2VWXR

Python代码:

https://gist.github.com/denisb411/7c6f601175e8bb9f735d8aa43a0db340

在这两种情况下我都使用同一台计算机。

我如何找到一种方法来“转换”(不知道这是否是正确的词)它们的规模相同?

如果我不清楚这个问题,请通知我。

音频样本通常在16或24位上量化。 但是这些样本可以采用的值范围有不同的约定:

  • 如果要对8位进行量化,则样本通常将存储为无符号字节,范围为0到255
  • 如果你要在16位上进行量化,那么样本通常会被存储为2的补码有符号整数,范围从-32768到32767
  • 如果要对24位进行量化,则样本通常会存储为无符号整数
  • 等等

基本上,当您决定存储样本时,您有两个参数:

  • 签名或未签名
  • int或float

每个都有其优点和缺点。 例如,存储在[-1,1]范围内的浮点数中的优点是,两个样本的乘积将始终在[-1,1]的相同范围内......

因此,要回答您的问题,您只需要更改打开PyAudio流的格式。 目前,您使用format=pyaudio.paInt16 尝试将其更改为pyaudio.paFloat32 ,您应该获得与iOS实现相同的数据。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM