首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何创建AIFF文件

如何创建AIFF文件
EN

Stack Overflow用户
提问于 2013-01-21 07:49:47
回答 4查看 1.6K关注 0票数 1

我有一些原始的声音数据,我想成为一个AIFF文件格式。我知道音频数据的细节。我试着从音频中创建一个wave,但不起作用。OS确实有一个创建头文件的函数,但它直接寻址文件,而我可能不想这么做(还有这个函数,SetupAIFFHeader在64位代码中已被弃用且不可用)。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2013-03-07 03:02:02

Apple的Core Audio API将创建数据并将数据写入AIFF文件和其他格式。它工作得很好,但在我看来,API很难使用。我将在下面粘贴一些示例代码,但您可能想要更改它。AudioFileWriteBytes一次可以写入2个以上的字节。在AudioToolbox/ExtendedAudioFile.h中还有另一个包装器API,它可以让你编写像32位浮点数这样的格式,并将其转换成底层格式,无论是AIFF/PCM还是压缩格式。

代码语言:javascript
复制
double sampleRate = 44100;
double duration = ...;
long nSamples = (long)(sampleRate * duration);

// Format struct for 1 channel, 16 bit PCM audio
AudioStreamBasicDescription asbd;
memset(&asbd, 0, sizeof(asbd));
asbd.mSampleRate = sampleRate;
asbd.mFormatID = kAudioFormatLinearPCM;
asbd.mFormatFlags = kAudioFormatFlagIsBigEndian | kAudioFormatFlagIsSignedInteger;
asbd.mBitsPerChannel = 16;
asbd.mChannelsPerFrame = 1;
asbd.mFramesPerPacket = 1;
asbd.mBytesPerFrame = 2;
asbd.mBytesPerPacket = 2;

CFURLRef url = makeUrl("hello.aiff");

AudioFileID audioFile;
OSStatus res;
res = AudioFileCreateWithURL(url, kAudioFileAIFFType, &asbd, 
                             kAudioFileFlags_EraseFile, &audioFile);
checkError(res);

UInt32 numBytes = 2;
for (int i=0; i<nSamples; i++) {
    SInt16 sample = ... // something between SHRT_MIN and SHRT_MAX;
    sample = OSSwapHostToBigInt16(sample);       
    res = AudioFileWriteBytes(audioFile, false, i*2, &numBytes, &sample);
    checkError(res);
}

res = AudioFileClose(audioFile);
checkError(res);

checkError断言res == noErr。makeUrl看起来像这样:

代码语言:javascript
复制
CFURLRef makeUrl(const char *cstr) {
    CFStringRef path = CFStringCreateWithCString(0, cstr, kCFStringEncodingUTF8);
    CFURLRef url = CFURLCreateWithFileSystemPath(NULL, path, 0, false);
    CFRelease(path);
    return url;
}
票数 2
EN

Stack Overflow用户

发布于 2013-01-21 09:11:36

尽管我讨厌轮子改造,但我怀疑你最好的选择可能是运行你自己的AIFF保存例程。

AIFF是旧的电子艺界EA-IFF格式的扩展,用于Amiga;它是一系列4字节的标识符(类似于FOURCC)、块长度和数据有效负载。维基百科的文章信息量很大,并提供了指向其他站点的链接,这些站点包含有关该格式的详细信息。

http://en.wikipedia.org/wiki/Audio_Interchange_File_Format

票数 0
EN

Stack Overflow用户

发布于 2013-01-26 08:54:02

我能够写一个合适的AIFF文件。最后一点让我感到困惑的是,我使用sizeof()来表示结构的大小,其中size省略了前八个字节。我确实使用了苹果公司废弃的AIFF.h头来获取结构,似乎QuickTime X和7都不能读取我在其中设置的元数据。

您可以在PlayerPRO的PlayerPRO 6分支中看到我的工作,它位于函数-createAIFFDataFromSettings:data:中名为PPApp_AppDelegate.m的文件中

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14430718

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档