调整音量ios

时间:2014-11-25 03:24:13

标签: ios objective-c audio swift avplayer

我将两个音频文件合并为一个。我设置了两个滑块来改变每个音频文件的音量。当我尝试为AVAssetTrack做首选体积时,我得到这个(@lvalue Float) - > $ T5与float不同。有没有其他方法可以实现这一目标?代码很快,但我不介意答案是否在客观c。

编辑:如何使用滑块或浮动来更改每个音频文件的音量?

代码:

let type = AVMediaTypeAudio
let asset1 = AVURLAsset(URL: beatLocationURL, options: nil)
let arr2 = asset1.tracksWithMediaType(type)
let track2 = arr2.last as AVAssetTrack

track2.preferredVolume(beatVolume.value) <--where error occurs


let duration : CMTime = track2.timeRange.duration

let comp = AVMutableComposition()
let comptrack = comp.addMutableTrackWithMediaType(type,
    preferredTrackID: Int32(kCMPersistentTrackID_Invalid))
comptrack.insertTimeRange(CMTimeRangeMake(CMTimeMakeWithSeconds(0,600), CMTimeMakeWithSeconds(5,600)), ofTrack:track2, atTime:CMTimeMakeWithSeconds(0,600), error:nil)
comptrack.insertTimeRange(CMTimeRangeMake(CMTimeSubtract(duration, CMTimeMakeWithSeconds(5,600)), CMTimeMakeWithSeconds(5,600)), ofTrack:track2, atTime:CMTimeMakeWithSeconds(5,600), error:nil)


let type3 = AVMediaTypeAudio
let asset = AVURLAsset(URL: vocalURL, options:nil)
let arr3 = asset.tracksWithMediaType(type3)
let track3 = arr3.last as AVAssetTrack


let comptrack3 = comp.addMutableTrackWithMediaType(type3, preferredTrackID:Int32(kCMPersistentTrackID_Invalid))
comptrack3.insertTimeRange(CMTimeRangeMake(CMTimeMakeWithSeconds(0,600), CMTimeMakeWithSeconds(10,600)), ofTrack:track3, atTime:CMTimeMakeWithSeconds(0,600), error:nil)


let params = AVMutableAudioMixInputParameters(track:comptrack3)
params.setVolume(1, atTime:CMTimeMakeWithSeconds(0,600))
params.setVolumeRampFromStartVolume(1, toEndVolume:0, timeRange:CMTimeRangeMake(CMTimeMakeWithSeconds(7,600), CMTimeMakeWithSeconds(3,600)))
let mix = AVMutableAudioMix()
mix.inputParameters = [params]

let item = AVPlayerItem(asset:comp)
item.audioMix = mix

1 个答案:

答案 0 :(得分:0)

你的代码毫无意义。你不能这样说:

track2.preferredVolume(beatVolume.value)

那是胡说八道。你想做什么?如果您要设置 track2.preferredVolume,请将其设置为:

track2.preferredVolume = beatVolume.value

当然,只有当beatVolume.value是Float时才会有效。如果不是这样的话,你将不得不以某种方式使它浮出来。

此外,您无法设置preferredVolume的{​​{1}},因为它是AVAssetTrack。 AVAssetTrack的track2不可设置。你想要做的就是等到你设置AVMutableComposition并在 轨道上设置音量。例如:

preferredVolume

那将编译,现在你可以弄清楚如何替换其他一些Float作为真正的价值。 (但是,它不会改变一个轨道相对于另一个轨道的音量。如果这是你的目标,请使用AVMutableAudioMix。例如,请参阅Apple的示例代码:https://developer.apple.com/library/ios/qa/qa1716/_index.html。 )