gpt4 book ai didi

iphone - 如何查看ExtAudioFileRead的结果?

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

我正在使用ExtAudioFileRead将WAV文件作为float *缓冲区读入内存。但是,我不确定结果-当我打印出来时,得到的值是-1到+ 1(理论上应该是正确的),但是如何确定它们是正确的呢?

- (float *) readTestFileAndSize: (int *) size
{
CFStringRef str = CFStringCreateWithCString(
NULL,
[[[NSBundle mainBundle] pathForResource: @"25" ofType:@"wav"] UTF8String],
kCFStringEncodingMacRoman
);
CFURLRef inputFileURL = CFURLCreateWithFileSystemPath(
kCFAllocatorDefault,
str,
kCFURLPOSIXPathStyle,
false
);

ExtAudioFileRef fileRef;
ExtAudioFileOpenURL(inputFileURL, &fileRef);

SInt64 theFileLengthInFrames = 0;
// Get the total frame count
UInt32 thePropertySize = sizeof(theFileLengthInFrames);

ExtAudioFileGetProperty(fileRef, kExtAudioFileProperty_FileLengthFrames, &thePropertySize, &theFileLengthInFrames);

AudioStreamBasicDescription audioFormat;
audioFormat.mSampleRate = 44100;
audioFormat.mFormatID = kAudioFormatLinearPCM;
audioFormat.mFormatFlags = kLinearPCMFormatFlagIsFloat;
audioFormat.mBitsPerChannel = sizeof(Float32) * 8;
audioFormat.mChannelsPerFrame = 1; // Mono
audioFormat.mBytesPerFrame = audioFormat.mChannelsPerFrame * sizeof(Float32); // == sizeof(Float32)
audioFormat.mFramesPerPacket = 1;
audioFormat.mBytesPerPacket = audioFormat.mFramesPerPacket * audioFormat.mBytesPerFrame; // = sizeof(Float32)

// 3) Apply audio format to the Extended Audio File
ExtAudioFileSetProperty(
fileRef,
kExtAudioFileProperty_ClientDataFormat,
sizeof (AudioStreamBasicDescription), //= audioFormat
&audioFormat);

int numSamples = 1024; //How many samples to read in at a time
UInt32 sizePerPacket = audioFormat.mBytesPerPacket; // = sizeof(Float32) = 32bytes
UInt32 packetsPerBuffer = numSamples;
UInt32 outputBufferSize = packetsPerBuffer * sizePerPacket;

// So the lvalue of outputBuffer is the memory location where we have reserved space
UInt8 *outputBuffer = (UInt8 *)malloc(sizeof(UInt8 *) * outputBufferSize);

NSLog(@"outputBufferSize - %llu", theFileLengthInFrames);

float* total = malloc(theFileLengthInFrames * sizeof(float));

*size = theFileLengthInFrames;

AudioBufferList convertedData;

convertedData.mNumberBuffers = 1; // Set this to 1 for mono
convertedData.mBuffers[0].mNumberChannels = audioFormat.mChannelsPerFrame; //also = 1
convertedData.mBuffers[0].mDataByteSize = outputBufferSize;
convertedData.mBuffers[0].mData = outputBuffer; //

int totalBytes = 0;

UInt32 frameCount = numSamples;
while (frameCount > 0) {

ExtAudioFileRead(fileRef, &frameCount, &convertedData);
if (frameCount > 0) {
AudioBuffer audioBuffer = convertedData.mBuffers[0];
float *samplesAsCArray = (float *)audioBuffer.mData;

memcpy(total + totalBytes, samplesAsCArray, frameCount * sizeof(float));

totalBytes += frameCount;
}
}

return total;
}

最佳答案

我能想到的只有几种测试方法:

  • 将您已加载的数据与您知道的有效方法加载的数据进行比较
  • 以某种方式(可能使用AudioQueue)播放音频数据
  • 关于iphone - 如何查看ExtAudioFileRead的结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15599873/

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