kAudioFormat 用于.aif 音频文件转换?

Posted

技术标签:

【中文标题】kAudioFormat 用于.aif 音频文件转换?【英文标题】:kAudioFormat for .aif audio file conversion? 【发布时间】:2014-02-18 13:59:46 【问题描述】:

我想将音频文件从 AAC 格式转换/保存为 AIFF 音频格式。默认我正在尝试 LineraPCM 。 .但音频格式保存为 AAC 格式。 .我想将音频文件保存为 AIFF 格式。这是我的代码

NSDictionary *outputSettings = [NSDictionary dictionaryWithObjectsAndKeys:
                                  [NSNumber numberWithInt:kAudioFormatLinearPCM], AVFormatIDKey, 
                                  [NSNumber numberWithFloat:44100.0], AVSampleRateKey,
                                  [NSNumber numberWithInt:2], AVNumberOfChannelsKey,
                                  [NSData dataWithBytes:&channelLayout length:sizeof(AudioChannelLayout)], AVChannelLayoutKey,
                                  [NSNumber numberWithInt:16], AVLinearPCMBitDepthKey,
                                  [NSNumber numberWithBool:NO], AVLinearPCMIsNonInterleaved,
                                  [NSNumber numberWithBool:NO],AVLinearPCMIsFloatKey,
                                  [NSNumber numberWithBool:NO], AVLinearPCMIsBigEndianKey,
                                  nil];

谁能就 kAudioFormat 或音频设置提出建议,以使用 AVAssetWriterInput 写入文件以将其保存为 AIFF 音频格式?

【问题讨论】:

AIFF 可以浮动,我不是办公室,明天可以仔细看看。这些设置会发生什么? @Volker 使用这些音频设置,音频以 AAC 格式保存。 .但我想以 AIFF 格式保存。 .请告诉我如何修改音频设置以转换为 AIFF 格式? 【参考方案1】:

到目前为止,我还没有使用过 AVAssetWriter,但我认为它基本上是一种格式描述,就像 Core Audio with ASBDs 中一样。

为 AIFF 定义的 AudioBasicStreamDescription 示例请参见此处:

aiffFormat.mSampleRate = sampleRate;
aiffFormat.mFormatID = kAudioFormatLinearPCM;
aiffFormat.mBytesPerPacket = 2;
aiffFormat.mFramesPerPacket = 1;
aiffFormat.mBytesPerFrame = 2;
aiffFormat.mChannelsPerFrame = 2; // for STEREO
aiffFormat.mBitsPerChannel = 16;
aiffFormat.mFormatFlags = (kLinearPCMFormatFlagIsBigEndian | kAudioFormatFlagIsPacked | kLinearPCMFormatFlagIsSignedInteger) ;
aiffFormat.mBitsPerChannel = sizeof(float) * 8;
aiffFormat.mBytesPerFrame = aiffFormat.mChannelsPerFrame * sizeof(Float32);
aiffFormat.mBytesPerPacket = aiffFormat.mFramesPerPacket * aiffFormat.mBytesPerFrame;

在您上面的代码中,必须将大字节序设置为 YES。如前所述,我从未使用过 AVAssetWriter,因此我不确定必须设置哪些进一步的参数或不设置哪些参数,但是根据上面的示例流描述,运行起来应该不会太难。

【讨论】:

感谢沃尔克。 .我修改了 AVLinearPCMIsBigEndianKey = YES。但是还是有问题。您能否分享您在回答中提到的“AudioBasicStreamDescription”的完整代码sn-p(输入音频文件)。 .这对我会有帮助。 . 这是一个大型类的一部分,它打开各种音频文件以通过 OS X 上的 CoreAudio 进行处理,并且对 AVAssetWriter 没有帮助 感谢沃尔克。 .我不是 Core Audio OSX 方面的专家。 .所以令人困惑的是,如何以 AIFF 格式编写音频。 .无论音频设置如何,它都采用 AAC 音频格式。 .我正在尝试更新音频设置,但它无济于事 :(。点击您的 AVAssetWriter subfurther.com/blog/2010/12/13/… 链接。如果有任何想法,请告诉我...... 我现在可以将格式转换为 AIFF(未压缩 PCM)。 .但我有一个问题“保存的音频文件的帧数为零”你能建议一下吗?你有什么想法吗? 不知道,最好开始一个新问题,也许其他人知道这个错误

以上是关于kAudioFormat 用于.aif 音频文件转换?的主要内容,如果未能解决你的问题,请参考以下文章

音频文件有哪些后缀名?

无法在网页上获取 m4a 音频文件的长度

MP3文件是什么

cmd文件后缀名是这个的是啥意思啊?

音频队列录制错误:AudioQueueNew 中的 AudioConverterNew 返回了“fmt?”

加载和选择音频文件到音频单元