选项A:
您是否只想导入文件,然后播放比导入的文件大声的声音?您可以使用AKBooster。
import AudioKit
do {
let file = try AKAudioFile(readFileName: "yourfile.wav")
let player = try AKAudioPlayer(file: file)
// Define your gain below. >1 means amplifying it to be louder
let booster = AKBooster(player, gain: 1.3)
AudioKit.output = booster
try AudioKit.start()
// And then to play your file:
player.play()
} catch {
// Log your error
}
Run Code Online (Sandbox Code Playgroud)
只需设置gain的值booster,使之更响亮。
选项B:您还可以尝试对音频文件进行归一化,这实际上会在记录中应用多个常数(相对于记录中的最高信号电平),以便达到您定义的新目标最大值。在这里,我将其设置为-4dB。
let url = Bundle.main.url(forResource: "sound", withExtension: "wav")
if let file = try? AKAudioFile(forReading: url) {
// Set the new max level (in dB) for the gain here.
if let normalizedFile = try? file.normalized(newMaxLevel: -4) {
print(normalizedFile.maxLevel)
// Play your normalizedFile...
}
}
Run Code Online (Sandbox Code Playgroud)
这种方法将所有内容的幅度增加到dB的水平-因此它不会影响文件的动态(SNR),并且只会增加达到新最大值所需的数量(因此您可以放心地将其应用于您所有的文件都是统一的)。
选项A:如果您想调节/控制音量,AVAudioPlayer有一个volume成员,但是文档说:
音频播放器的播放音量,线性范围为0.0到1.0。
1.0原始文件的卷和默认文件的卷在哪里。因此,您只能通过它使其更安静。如果您有兴趣,请使用以下代码:
let soundFileURL = Bundle.main.url(forResource: "sound", withExtension: "mp3")!
let audioPlayer = try? AVAudioPlayer(contentsOf: soundFileURL, fileTypeHint: AVFileType.mp3.rawValue)
audioPlayer?.play()
// Only play once
audioPlayer?.numberOfLoops = 0
// Set the volume of playback here.
audioPlayer?.volume = 1.0
Run Code Online (Sandbox Code Playgroud)
选项B:如果您的声音文件太安静,则可能是电话听筒传出的声音。在这种情况下,您可以尝试覆盖输出端口以使用扬声器:
do {
try AVAudioSession.sharedInstance().overrideOutputAudioPort(AVAudioSession.PortOverride.speaker)
} catch let error {
print("Override failed: \(error)")
}
Run Code Online (Sandbox Code Playgroud)
您还可以使用以下代码对此进行永久设置(但我不能保证您的应用会进入AppStore):
try? audioSession.setCategory(AVAudioSessionCategoryPlayAndRecord, with: AVAudioSessionCategoryOptions.defaultToSpeaker)
Run Code Online (Sandbox Code Playgroud)
选项C:如果选项B不能满足您的要求,那么您可能对“如何使AVAudioPlayer比赛变得更响亮” 并不满意。您最好自己使用一些外部软件编辑源文件 -我可以推荐Audacity作为这样做的好选择。
选项D:我只听说过的最后一个选项。您也可以查看MPVolumeView,它具有用于控制系统输出和音量的UI。我对它不太熟悉-此时可能正在接近传统。