ios - 减少合并音频文件?

标签 ios swift audio avaudioplayer

我在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 _
    {

    }

    }

最佳答案

您必须向您的作者提供音频设置字典。 您可以查看以下格式

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( Assets :组合,预设名称:AVAssetExportPresetAppleM4A)

你可以试试这个吗

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

关于ios - 减少合并音频文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40655341/

相关文章:

java - OpenAL 仅渲染一个 "bump",但没有错误。到底是怎么回事?

swift - NSDate:获取明天或昨天的值

Java 多种声音

ios - 应用程序在没有协议(protocol)功能的情况下编译 - 为什么?

ios - 使用里拉数据,如何在 objective-c 中编写条件分支

json - 如何解决错误 : "Invalid type in JSON write (NSConcreteData)"

swift - 向 UICollectionView 添加单元格时出现问题

php - 在jplayer中嵌入PHP

iOS - 无法显示下载的图像

ios - 选择文本字段时,调整键盘的 View 高度