2016-11-17 2 views
0

Swift2.3에서 두 개의 오디오 파일을 병합합니다.병합 오디오 파일 줄이기?

괜찮습니다. 파일 크기는 7MB입니다. 그래서 서버에 보낼 수 없습니다.

오디오 파일 크기를 줄이는 방법은 무엇입니까? 그래서 나는 쉽게 서버에 보낼 수 있습니다. 아래 코드를 첨부했습니다. 병합하려는 사용자에게 유용합니다.

func mixAudio() 
{ 
    let currentTime = CFAbsoluteTimeGetCurrent() 
    let composition = AVMutableComposition() 
    let compositionAudioTrack = composition.addMutableTrackWithMediaType(AVMediaTypeAudio, preferredTrackID: kCMPersistentTrackID_Invalid) 
    compositionAudioTrack.preferredVolume = 0.8 
    let avAsset = AVURLAsset.init(URL: soundFileURL, options: nil) 
    print("\(avAsset)") 
    var tracks = avAsset.tracksWithMediaType(AVMediaTypeAudio) 
    let clipAudioTrack = tracks[0] 
    do { 
     try compositionAudioTrack.insertTimeRange(CMTimeRangeMake(kCMTimeZero, avAsset.duration), ofTrack: clipAudioTrack, atTime: kCMTimeZero) 
    } 
    catch _ { 
    } 
    let compositionAudioTrack1 = composition.addMutableTrackWithMediaType(AVMediaTypeAudio, preferredTrackID: kCMPersistentTrackID_Invalid) 
    compositionAudioTrack.preferredVolume = 0.8 

    let avAsset1 = AVURLAsset.init(URL: soundFileURL1) 
    print(avAsset1) 


    var tracks1 = avAsset1.tracksWithMediaType(AVMediaTypeAudio) 
    let clipAudioTrack1 = tracks1[0] 
    do { 
     try compositionAudioTrack1.insertTimeRange(CMTimeRangeMake(kCMTimeZero, avAsset1.duration), ofTrack: clipAudioTrack1, atTime: kCMTimeZero) 
    } 
    catch _ { 
    } 
    var paths = NSSearchPathForDirectoriesInDomains(.LibraryDirectory, .UserDomainMask, true) 
    let CachesDirectory = paths[0] 
    let strOutputFilePath = CachesDirectory.stringByAppendingString("/newone.mov") 
    print(" strOutputFilePath is \n \(strOutputFilePath)") 

    let requiredOutputPath = CachesDirectory.stringByAppendingString("/newone.m4a") 
    print(" requiredOutputPath is \n \(requiredOutputPath)") 

    let audioFileOutput = NSURL.fileURLWithPath(requiredOutputPath) 
    print(" OUtput path is \n \(audioFileOutput)") 
    do { 

     try NSFileManager.defaultManager().removeItemAtURL(audioFileOutput) 
    } 
    catch _ { 
    } 
    let exporter = AVAssetExportSession(asset: composition, presetName: AVAssetExportPresetAppleM4A) 
    exporter!.outputURL = audioFileOutput 
    exporter!.outputFileType = AVFileTypeAppleM4A 

    exporter!.exportAsynchronouslyWithCompletionHandler 
     {() -> Void in 
      print(" OUtput path is \n \(requiredOutputPath)") 
      print("export complete: \(CFAbsoluteTimeGetCurrent() - currentTime)") 

    do 
    { 
     print(audioFileOutput) 
     print(" OUtput path is \n \(requiredOutputPath)") 

     self.wasteplayer = try AVAudioPlayer(contentsOfURL: audioFileOutput) 
     self.wasteplayer.numberOfLoops = 0 
     self.wasteplayer.play() 

     } 
    } 

    catch _ 
    { 

    } 

    } 
+2

인코딩이 시도 할 수 있습니까? – Moritz

+0

Iam이 인코딩하지 않습니다. 그냥 두 개의 오디오 파일을 병합합니다 (하나의 파일은 배경 음악() mp3이고 다른 하나는 이미 녹음 된 음성 (m4a)입니다) .i 위 코드를 첨부했습니다 .i 병합 된 파일을 확인하십시오. 폴더. 크기가 7MB이어야합니다. 크기를 줄이려면. – HariKarthick

+1

그래서 내가 MP3 또는 AAC로 오디오를 인코딩하는 것이 좋습니다 ** ** 합병 후 ... – Moritz

답변

0

작성자에게 오디오 설정 사전을 제공해야합니다. 다음은

kAudioFormatMPEG4AAC로 볼 수 있습니다 다음과 같은 형식이다 : (164), (최저)

kAudioFormatAppleLossless : 430,

kAudioFormatAppleIMA4 : 475,

kAudioFormatULaw : 889,

kAudioFormatALaw : 889

kAudioFormatMPEG4AAC 사용 가장 작음 몽.

 let audioOutputSettings = [ 
      AVFormatIDKey : Int(kAudioFormatMPEG4AAC), 
      AVSampleRateKey :  //[ NSNumber numberWithInt: 16 ], AVEncoderBitDepthHintKey, 
       Int(44100.0), 
      AVNumberOfChannelsKey : Int(1), 
      AVChannelLayoutKey: NSData(bytes:&channelLayout, length:sizeof(AudioChannelLayout)), 
] 

이것은 위의 Swift 설정입니다. 이 라인

에서

수출 = AVAssetExportSession 내버려 (자산 : 조성, presetName : AVAssetExportPresetAppleM4A가)

u는 합병 후 MP3 나 AAC 대신

let exporter = AVAssetExportSession(asset: composition, presetName: AVAssetExportPresetLowQuality) 
+0

내 브라우저 코드가 내 브라우저에로드되지 않았습니다. 이제는 어떤 방법 으로든 시도해 볼 수 있습니다. –

+1

답변을 편집했으며 마지막 줄에서 언급 한 변경을 시도 할 수 있습니다. –

+0

http://chat.stackoverflow.com/rooms/37266/discussion-between-grzegorz-krukowski-and-newbie 참조 –