我正在将两个音频文件合二为一。我设置了两个 slider 来更改每个音频文件的音量。当我尝试为 AVAssetTrack 执行 preferredVolume 时,我得到这个 (@lvalue Float) -> $T5 与 float 不同。还有其他方法可以做到这一点吗?代码很快,但我不介意答案是否在 objective-c 中。
编辑:如何使用 slider 或 float 更改每个音频文件的音量?
代码:
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
最佳答案
你不能这样说:
track2.preferredVolume(beatVolume.value)
如果你想设置 track2.preferredVolume
,那么说:
track2.preferredVolume = beatVolume.value
当然,这只有在 beatVolume.value
是 Float 时才有效。如果不是,您将不得不以某种方式从中创建一个 Float。
此外,您将无法设置track2
的preferredVolume
,因为它是一个AVAssetTrack。 AVAssetTrack 的 preferredVolume
不可设置。您要做的是等到您设置 AVMutableComposition 并在它的轨道上设置卷。例如:
comptrack3.preferredVolume = 0.5
这将编译,现在您可以弄清楚如何用其他 Float 代替实际值。 (但是,它不会改变一个轨道相对于另一个轨道的音量。如果这是你的目标,请使用 AVMutableAudioMix。例如,请参见此处的 Apple 示例代码:https://developer.apple.com/library/ios/qa/qa1716/_index.html.)
关于ios - 调整音量 ios,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27118297/