gpt4 book ai didi

macos - 音频单元和写入文件

转载 作者:行者123 更新时间:2023-12-02 22:24:58 24 4
gpt4 key购买 nike

我正在 OS X 上创建实时音频音序器应用程序。
实时合成部分使用 AURenderCallback 实现.
现在我正在制作将渲染结果写入 Wave 文件的函数 (44100Hz 16bit Stereo) .
渲染回调函数的格式是 44100Hz 32 位浮点立体声交错。

我正在使用 ExtAudioFileWrite写入文件。
但是ExtAudioFileWrite函数返回错误代码 1768846202 ;

我搜索了 1768846202但我无法获取信息。
你能给我一些提示吗?

谢谢你。

这是代码。

    outFileFormat.mSampleRate = 44100;
outFileFormat.mFormatID = kAudioFormatLinearPCM;
outFileFormat.mFormatFlags =
kAudioFormatFlagIsSignedInteger | kAudioFormatFlagIsPacked;
outFileFormat.mBitsPerChannel = 16;
outFileFormat.mChannelsPerFrame = 2;
outFileFormat.mFramesPerPacket = 1;
outFileFormat.mBytesPerFrame =
outFileFormat.mBitsPerChannel / 8 * outFileFormat.mChannelsPerFrame;
outFileFormat.mBytesPerPacket =
outFileFormat.mBytesPerFrame * outFileFormat.mFramesPerPacket;

AudioBufferList *ioList;
ioList = (AudioBufferList*)calloc(1, sizeof(AudioBufferList)
+ 2 * sizeof(AudioBuffer));
ioList->mNumberBuffers = 2;
ioList->mBuffers[0].mNumberChannels = 1;
ioList->mBuffers[0].mDataByteSize = allocByteSize / 2;
ioList->mBuffers[0].mData = ioDataL;
ioList->mBuffers[1].mNumberChannels = 1;
ioList->mBuffers[1].mDataByteSize = allocByteSize / 2;
ioList->mBuffers[1].mData = ioDataR;

...

while (1) {
//Fill buffer by using render callback func.
RenderCallback(self, nil, nil, 0, frames, ioList);

//i want to create one sec file.
if (renderedFrames >= 44100) break;

err = ExtAudioFileWrite(outAudioFileRef, frames , ioList);
if (err != noErr){
NSLog(@"ERROR AT WRITING TO FILE");
goto errorExit;
}
}

最佳答案

一些错误代码实际上是四个字符串。 Core Audio book 提供了一个很好的功能来处理错误。

static void CheckError(OSStatus error, const char *operation)
{
if (error == noErr) return;

char str[20];
// see if it appears to be a 4-char-code
*(UInt32 *)(str + 1) = CFSwapInt32HostToBig(error);
if (isprint(str[1]) && isprint(str[2]) && isprint(str[3]) && isprint(str[4])) {
str[0] = str[5] = '\'';
str[6] = '\0';
} else
// no, format it as an integer
sprintf(str, "%d", (int)error);

fprintf(stderr, "Error: %s (%s)\n", operation, str);

exit(1);
}

像这样使用它:
CheckError(ExtAudioFileSetProperty(outputFile, 
kExtAudioFileProperty_CodecManufacturer,
sizeof(codec),
&codec), "Setting codec.");

关于macos - 音频单元和写入文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1374674/

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