ios - 调整音量 ios

标签 ios objective-c audio swift avplayer

我正在将两个音频文件合二为一。我设置了两个 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 是 Fl​​oat 时才有效。如果不是,您将不得不以某种方式从中创建一个 Float。

此外,您将无法设置track2preferredVolume,因为它是一个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/

相关文章:

ios - 如何将 View 固定到屏幕边缘?

iOS Webkit 忽略媒体查询

ios - NSPredicate 过滤器对多与子对象属性

objective-c - objective C 强调属性(property)与 self

java - 用JAVA控制声卡

ios - 如何在Superpowered音库中播放多种声音

ios - 将字符串转换为运算符 - swift

iphone - 如何在 Objective-C 中以编程方式检查目录是否存在于特定路径?

ios - ld : library not found for -lstdc++. 6 - Xcode 10

ios - swift 中的音频波形可视化