.wav到AVAssetWritter ios的任何压缩格式

时间:2012-02-05 19:04:19

标签: iphone ios avassetwriter

我现在面临的问题是尺寸问题。我允许用户从他们的库中选择一首歌然后将其切成碎片然后能够在他们的计算机上使用.wav或.mp3文件并启用文件共享。基本上我使用以下AVAssetWritter选项,我不断得到一个巨大的音频文件。例如。 5分钟的音乐大约是50MB。我希望尝试将其降低到标准尺寸的行业。我有一种感觉,这与我使用LinearPCM作为我的选择之一有关,但是当我改变它或任何音频选项时,作者无法写。我也在更改AVAssetWritter上的FileType参数。这是我的代码完全正常我只需要找到压缩或缩小文件。

AVAssetWriter *assetWriter = [[AVAssetWriter assetWriterWithURL:exportURL
                                                       fileType:AVFileTypeWAVE
                                                          error:&assetError]



NSDictionary *outputSettings = [NSDictionary dictionaryWithObjectsAndKeys:
                                [NSNumber numberWithInt:kAudioFormatLinearPCM], AVFormatIDKey, 
                                [NSNumber numberWithFloat:41000.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];
AVAssetWriterInput *assetWriterInput = [[AVAssetWriterInput assetWriterInputWithMediaType:AVMediaTypeAudio
                                                                           outputSettings:outputSettings]
                                        retain];

任何有关压缩或使用我的AVAssetWritter写入不同编解码器而不是WAVE或CoreAudioFormat的帮助都将非常感激。

编辑:如果有一种方法可以直接从音乐库转到.m4a而不是.wav,这将是我想要的理想方法!

谢谢, 尼克

ANSWER

这是.m4a的正确音频选项,如果您希望用户将其视为.mp3或.wav文件,只需将它们附加到文件名的末尾即可!

AudioChannelLayout channelLayout;
memset(&channelLayout, 0, sizeof(AudioChannelLayout));
channelLayout.mChannelLayoutTag = kAudioChannelLayoutTag_Stereo;
NSDictionary *outputSettings = [NSDictionary dictionaryWithObjectsAndKeys:
                                [NSNumber numberWithInt: kAudioFormatMPEG4AAC], AVFormatIDKey,
                                [NSNumber numberWithFloat:44100.0], AVSampleRateKey,
                                [NSNumber numberWithInt:2], AVNumberOfChannelsKey,
                                [NSNumber numberWithInt:128000], AVEncoderBitRateKey,
                                [NSData dataWithBytes:&channelLayout length:sizeof(AudioChannelLayout)], AVChannelLayoutKey,                  

                                nil];    

2 个答案:

答案 0 :(得分:2)

ANSWER

这是.m4a的正确音频选项,如果您希望用户将其视为.mp3或.wav文件,只需将它们附加到文件名的末尾即可!

AudioChannelLayout channelLayout;
memset(&channelLayout, 0, sizeof(AudioChannelLayout));
channelLayout.mChannelLayoutTag = kAudioChannelLayoutTag_Stereo;
NSDictionary *outputSettings = [NSDictionary dictionaryWithObjectsAndKeys:
                            [NSNumber numberWithInt: kAudioFormatMPEG4AAC], AVFormatIDKey,
                            [NSNumber numberWithFloat:44100.0], AVSampleRateKey,
                            [NSNumber numberWithInt:2], AVNumberOfChannelsKey,
                            [NSNumber numberWithInt:128000], AVEncoderBitRateKey,
                            [NSData dataWithBytes:&channelLayout    length:sizeof(AudioChannelLayout)], AVChannelLayoutKey,                  

                            nil];    

答案 1 :(得分:0)

这个怎么样(抱歉没有自己尝试,但它应该让你更近):

AVAssetWriter *assetWriter = [AVAssetWriter assetWriterWithURL:exportURL
                                                       fileType:AVFileTypeAppleM4A
                                                          error:&assetError];

NSDictionary *outputSettings = [NSDictionary dictionaryWithObjectsAndKeys:
       [NSNumber numberWithInt: kAudioFormatMPEG4AAC], AVFormatIDKey,
       [NSNumber numberWithFloat:44100.0], AVSampleRateKey,
       [NSNumber numberWithInt:2], AVNumberOfChannelsKey,
       [NSNumber numberWithInt:128000], AVEncoderBitRateKey,
       [NSNumber numberWithInt:16], AVLinearPCMBitDepthKey,
       [NSNumber numberWithInt: AVAudioQualityHigh],  AVEncoderAudioQualityKey,
       nil];