iphone - .wav 从 AVAssetWritter ios 转换为任何压缩形式

标签 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,这将是我想要采取的理想方法!

谢谢, 尼克

回答

这是 .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];    

最佳答案

回答

这是 .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];    

关于iphone - .wav 从 AVAssetWritter ios 转换为任何压缩形式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9152075/

相关文章:

c++ - Xcode:C++ 头文件中的断点似乎被忽略了

iphone - 如何在 iPhone 中将 CVPixelBufferPool 与 AVAssetWriterInputPixelBufferAdaptor 结合使用?

ios - 尝试以预期帧速率将 CVPixelBuffers 附加到 AVAssetWriterInputPixelBufferAdaptor

avfoundation - 如何使用 AVAssetWriter 将 h264 流写入视频?

iphone - 在 iPhone 应用程序上使用 PhoneGap 发送电子邮件

ios - Today Extension on Universal 应用程序

iphone - 如何像在 Messages.app 中一样向下移动 iPhone 键盘?

iphone - OpenGL ES 不会删除我在内存中的纹理

ios - 如何在 UIwebview 上播放 vimeo 视频而不是全屏 ios swift 2.0

ios - 具有自动调整单元格大小的 UITableViewCell 最小高度