gpt4 book ai didi

python - 如何找到两个不同音频样本之间的标度?

转载 作者:行者123 更新时间:2023-12-02 23:37:01 25 4
gpt4 key购买 nike

我打算制作一个分析音频样本的通用应用程序。当我说“通用”时,是指任何技术(Javascript,C,Java等)都可以使用它。
基本上,我使用Apple的AVFoundation在iOS上创建了一个应用程序,该应用程序以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实现相同的数据。

    关于python - 如何找到两个不同音频样本之间的标度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44310624/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com