2011-11-08 17 views
2

.m4a形式の録音されたオーディオを.caf形式に変換しています。以下に示すよう録音されたオーディオの設定は次のとおりです。変換されたオーディオファイルのサイズを小さくする

/* Record settings for recording the audio*/ 
recordSetting = [[NSDictionary alloc] initWithObjectsAndKeys:[NSNumber numberWithInt:kAudioFormatMPEG4AAC],AVFormatIDKey, 
       [NSNumber numberWithInt:44100.0],AVSampleRateKey, 
       [NSNumber numberWithInt: 2],AVNumberOfChannelsKey, 
       [NSNumber numberWithInt:16],AVLinearPCMBitDepthKey, 
       [NSNumber numberWithBool:NO],AVLinearPCMIsBigEndianKey, 
       [NSNumber numberWithBool:NO],AVLinearPCMIsFloatKey, 
       nil]; 

私はこの機能を使用して.cafするオーディオを変換:

-(NSString *)handleConvertToPCM:(NSURL *)convertUrl 
{ 
    [self performSelectorOnMainThread:@selector(showActivity) withObject:nil waitUntilDone:NO]; 

    DEBUG_LOG(@"DEBUGGING"); 
    DEBUG_LOG(@"handleConvertToPCM"); 
    // open an ExtAudioFile 
    NSLog (@"opening %@", convertUrl); 
    ExtAudioFileRef inputFile; 
    CheckResult (ExtAudioFileOpenURL((CFURLRef)convertUrl, &inputFile), 
       "ExtAudioFileOpenURL failed"); 
    // prepare to convert to a plain ol' PCM format 
    AudioStreamBasicDescription requiredPCMFormat; 
    requiredPCMFormat.mSampleRate = 44100; // todo: or use source rate? 
    requiredPCMFormat.mFormatID = kAudioFormatLinearPCM ; 
    requiredPCMFormat.mFormatFlags = kAudioFormatFlagsCanonical; 
    requiredPCMFormat.mChannelsPerFrame = 2; 
    requiredPCMFormat.mFramesPerPacket = 1; 
    requiredPCMFormat.mBitsPerChannel = 16; 
    requiredPCMFormat.mBytesPerPacket = 4; 
    requiredPCMFormat.mBytesPerFrame = 4; 
    CheckResult (ExtAudioFileSetProperty(inputFile, kExtAudioFileProperty_ClientDataFormat, 
             sizeof (requiredPCMFormat), &requiredPCMFormat), 
       "ExtAudioFileSetProperty failed"); 
    // allocate a big buffer. size can be arbitrary for ExtAudioFile. 
    UInt32 outputBufferSize = 0x10000; 
    void* ioBuf = malloc (outputBufferSize); 
    UInt32 sizePerPacket = requiredPCMFormat.mBytesPerPacket; 
    UInt32 packetsPerBuffer = outputBufferSize/sizePerPacket; 
    // set up output file 
    self.outputPath = [NSString stringWithFormat:@"%@/export-pcm.caf",DOCUMENTS_FOLDER]; 
    self.outputURL = [NSURL fileURLWithPath:self.outputPath]; 
    DEBUG_LOG(@"creating output file %@", self.outputURL); 
    AudioFileID outputFile; 
    CheckResult(AudioFileCreateWithURL((CFURLRef)outputURL, 
             kAudioFileCAFType, 
             &requiredPCMFormat, 
             kAudioFileFlags_EraseFile, 
             &outputFile), 
       "AudioFileCreateWithURL failed"); 
    // start convertin' 
    UInt32 outputFilePacketPosition = 0; //in bytes 
    while (true) 
    { 
     // wrap the destination buffer in an AudioBufferList 
     AudioBufferList convertedData; 
     convertedData.mNumberBuffers = 1; 
     convertedData.mBuffers[0].mNumberChannels = requiredPCMFormat.mChannelsPerFrame; 
     convertedData.mBuffers[0].mDataByteSize = outputBufferSize; 
     convertedData.mBuffers[0].mData = ioBuf; 
     UInt32 frameCount = packetsPerBuffer; 
     // read from the extaudiofile 
     CheckResult (ExtAudioFileRead(inputFile, 
             &frameCount, 
             &convertedData), 
        "Couldn't read from input file"); 
     if (frameCount == 0) 
     { 
      printf ("done reading from file"); 
      break; 
     } 
     // write the converted data to the output file 
     CheckResult (AudioFileWritePackets(outputFile, 
              false, 
              frameCount, 
              NULL, 
              outputFilePacketPosition/requiredPCMFormat.mBytesPerPacket, 
              &frameCount, 
              convertedData.mBuffers[0].mData), 
        "Couldn't write packets to file"); 

     DEBUG_LOG(@"Converted %ld bytes", outputFilePacketPosition); 
     // advance the output file write location 
     outputFilePacketPosition += (frameCount * requiredPCMFormat.mBytesPerPacket); 
    } 
    // clean up 
    ExtAudioFileDispose(inputFile); 
    AudioFileClose(outputFile); 
    return(self.outputPath);  

} 

私の問題は、変換されたファイルのサイズは比べて非常に高いことですとにかく変換​​設定を変更してサイズを小さくしますか? 私は取得したファイルを圧縮しようとしましたが、圧縮に時間がかかります。変換に伴いサイズを小さくする方法を知りたいと思います。

+0

MP4ファイルをプレーンPCMにデコードしています。確かにサイズが大きくなります。なぜ最初にファイルを変換していますか? – Till

+0

そのような必要があります。サイズを小さくする方法はありますか?設定作業の変更は何ですか?私はいくつか試しましたが失敗しました。 – Siddharth

+0

私はiOsで音楽を書くことに慣れていませんが、私のゲーム用のツールでサウンドをステレオからモノに変換すると、サイズが半減しました。多分モノで十分ですか? – TheEye

答えて

0

非常に圧縮されたオーディオファイルを解凍すると、ほとんどの場合、結果がさらに大きくなります。

+0

時間のかかるオーディオを再圧縮する方法はありますか? – Siddharth

+0

私はカフェ形式でそれを必要とします – Siddharth

+1

カフェ形式の場合、ファイルサイズはサンプルレート(一般的には44.1kHz)とサンプルあたりのビット数(通常は16ビットまたは2バイト)にチャネル数(1,2,5 )、オーディオの長さに秒単位の時間をかけます。どちらを減らしたいですか? – hotpaw2

関連する問題