减少合并音频文件?
我合并了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它是最小的a蒙所有。
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能试试这个,而不是
let exporter = AVAssetExportSession(asset: composition, presetName: AVAssetExportPresetLowQuality)
我的不好,你的代码没有加载到我的浏览器中,现在它有任何方法是的,我正在尝试 –
我编辑了答案,你可以尝试做我在最后一行提到的改变。 –
http://chat.stackoverflow.com/rooms/37266/discussion-between-grzegorz-krukowski-and-newbie 可能是一个参考 –
编码为MP3或AAC合并后? – Moritz
Iam不编码任何东西..我只是合并两个音频文件(一个文件是背景歌曲()MP3和另一个是语音(M4A)我已经记录)。我附上上面的代码..我只是检查合并的文件在文件夹..大小应该是7MB.soi想要减小尺寸。 – HariKarthick
这就是为什么我建议你在合并后编码你的音频到MP3或AAC ** ... – Moritz