.WAV в любую сжатую форму от AVAssetWritter IOS - PullRequest
3 голосов
/ 05 февраля 2012

Что ж, проблема, с которой я сталкиваюсь сейчас, - это проблема размера.Я разрешаю пользователю выбирать песню из своей библиотеки, а затем разбивать ее на части, а затем использовать файл .wav или .mp3 на своем компьютере с включенным общим доступом к файлам.В основном я использую следующие параметры AVAssetWritter и продолжаю получать гигантский огромный аудиофайл.Например, 5 минут музыки около 50 МБ.Я пытаюсь сократить это до отраслевого размера.У меня есть ощущение, что это связано с тем фактом, что я использую LinearPCM в качестве одного из моих вариантов, но когда я изменяю этот или любой из параметров звука, пишущий не может писать.Я также изменяю параметр FileType на AVAssetWritter.Вот мой код, который работает совершенно нормально, мне просто нужно найти, чтобы сжать или сжать файлы.

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, это был бы идеальный подход, который я хотел бы использовать!

Спасибо, Ник

ОТВЕТ

Thisэто правильные параметры звука для .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 ]

2 голосов
/ 22 февраля 2012

ОТВЕТ

Это правильные параметры звука для .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];    
0 голосов
/ 05 февраля 2012

Как насчет этого (извините, что не пробовал сам, но это должно приблизить вас):

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];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...