gpt4 book ai didi

ios - 如何使用 native 定点类型 (8.24) 进行 iOS 音频处理

转载 作者:可可西里 更新时间:2023-11-01 05:16:14 24 4
gpt4 key购买 nike

所以我想将 -1 到 +1 范围内的 float 正确缩放为 AUGraph 预期的格式,流格式设置如下:

size_t bytesPerSample = sizeof (AudioUnitSampleType); // is 4 bytes

stereoStreamFormat.mFormatID = kAudioFormatLinearPCM;
stereoStreamFormat.mFormatFlags = kAudioFormatFlagsAudioUnitCanonical;
stereoStreamFormat.mBytesPerPacket = bytesPerSample;
stereoStreamFormat.mFramesPerPacket = 1;
stereoStreamFormat.mBytesPerFrame = bytesPerSample;
stereoStreamFormat.mChannelsPerFrame = 2;
stereoStreamFormat.mBitsPerChannel = 8 * bytesPerSample;
stereoStreamFormat.mSampleRate = graphSampleRate; // 44.1k

this question帮助我设置了图形,但是当我像这样转换 float 时:

sampleValueLeft = (Fixed) (floatVal * 32767.0f); 
// there doesn't seem to be any difference whether i cast into
// SInt16 or SInt32 (which the Fixed type is defined to be)..

有效,信号听起来不错,但非常安静。所以我做错了缩放?按更大的比例缩放会弄乱信号。听起来不像削波,输出音量也没有变高。我不打算深入研究定点数学,我只需要一个可以转换为正确格式的单行代码。

谢谢!

编辑:我一直在使用不同的流格式,在此之前我不知道如何正确使用立体声信号。通过这种不同的设置,我在输出音量方面没有遇到任何问题,所以我认为增益问题一定与缩放有关...

最佳答案

阅读此 post ,这是对 iOS 8.24 格式的一个很好的解释。

这是它的结论:
基本上它告诉您前(左)8 位仅用于 (+/-) 符号,其余 24 位是声音。
因此,如果您想将其转换为 Sint16,请将位向右移动 9 位并进行转换。这样,(+/-) 符号保留在第一位中,声音数据被降低到较低的精度。
如果您希望它作为 (+/-)1 到 0 范围内的 float ,请将它除以最大可能值 32768。

代码如下:

    SInt16 sampleInt16 = (SInt16)(samples[i] >> 9);
float sampleFloat = sampleInt16 / 32768.0;

关于ios - 如何使用 native 定点类型 (8.24) 进行 iOS 音频处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6095536/

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