ios - 将 16 位短整型转换为 32 位浮点型

标签 ios audio type-conversion tone-generator

在 iOS 的音调发生器示例中:http://www.cocoawithlove.com/2010/10/ios-tone-generator-introduction-to.html

我正在尝试在 iOS 中将短数组转换为 Float32。

        Float32 *buffer = (Float32 *)ioData->mBuffers[channel].mData;
        short* outputShortBuffer = static_cast<short*>(outputBuffer);

        for (UInt32 frame = 0, j=0; frame < inNumberFrames; frame++, j=j+2)
        {
            buffer[frame] =  outputShortBuffer[frame];
        }

由于某些原因,我在从扬声器播放时听到了额外的噪音。我认为从 short 到 Float32 的转换有问题?

最佳答案

是的,有。

假设浮点样本的值范围是 -1.0 <= Xn <= 1.0signed short-32767 <= Xn <= +32767 .仅仅类型转换将导致几乎所有 sample 上的剪裁。

所以考虑到这一点:

    Float32 *buffer = (Float32 *)ioData->mBuffers[channel].mData;
    short* outputShortBuffer = static_cast<short*>(outputBuffer);

    for (UInt32 frame = 0, j=0; frame < inNumberFrames; frame++, j=j+2)
    {
        buffer[frame] =  ((float) outputShortBuffer[frame]) / 32767.0f;
    }

[注意:这不是执行此操作的最佳方式]。

但是,你确定你的框架是单声道的吗?如果不是,这也可能是音频损坏的原因,因为您只会复制一个 channel 。

顺便说一句,为什么,如果你的输出缓冲区是 float你不是一直在使用它们吗?

关于ios - 将 16 位短整型转换为 32 位浮点型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16529857/

相关文章:

json - 如何使用 MongoDB C++ 驱动程序将字符串转换为 BSON?

ios - Swift ios dismissViewControllerAnimated 和退出之间的区别

ios - 在应用启动时显示介绍视频

iphone - 使用 iOS 在 cordova 项目中打开本地 pdf

c++ - 试图读取AIFF文件意外错误与指针位置等有关

java - Ascii 到 Hex 转换错误

c# - 如何覆盖 NET 类型转换器?

ios - iPhone/iOS 中 viewDidAppear、viewDidLoad 之间的区别?

python - 难以使用 librosa.effects.trim 命令执行静音消除

iphone - iPhone中是否启用了背景音频播放?