【问题标题】:Audio shorts to floats音频短裤到花车
【发布时间】:2014-03-12 03:16:09
【问题描述】:

已使用 JDK ~6 实现了 YIN 音高检测算法,并且需要对浮点数组进行采样。

我想在没有 javax.sound.sampled 包 YIN 使用的 Android API 10 上实现音高检测。 API 10 确实有 RecordAudio,它可以通过 read(byte/short[] int pos, int size) 传送字节或短片。

什么会优化性能? A) 扩展 Android 1.5 的 RecordAudio 以获得浮动到 YIN(我的首选方法) B) 从 RecordAudio 中取出短裤,将它们转换为浮点数,然后将它们传递到 YIN 输入缓冲区。

无论哪种情况,我都不知道获得短裤的合适方法 (44100, PCM16, signed, mono, littleEndian) 到浮点数。

任何指导表示赞赏。

【问题讨论】:

    标签: android audio


    【解决方案1】:
    【解决方案2】:

    这应该可行

    f = (float) (short) (((short)wavData[i] & 0xFF) + (((short)wavData[i+1] & 0xFF) << 8));
    

    其中wavData 只是一个原始字节数组,从波形文件中读取。

    它应该适用于所有采样率、任何通道数(单声道和立体声)。它仅适用于 16 位 PCM,顺便说一下,它通常是经过签名的,但它可以扩展到更大的分辨率。

    【讨论】:

    • 我在你上面的答案中发现了类似的东西... out_buff[ox] = (short)(in_buff[ix++] & 0xff | in_buff[ix++]
    • 3e-05 是 1.0/(2^(16-1)) 并且是将浮点样本缩放到 -1.0 到 1.0 的范围内。
    猜你喜欢
    • 1970-01-01
    • 2012-02-12
    • 1970-01-01
    • 2022-10-06
    • 1970-01-01
    • 2012-08-04
    • 2012-02-23
    • 1970-01-01
    相关资源
    最近更新 更多