使用 AudioKit
选项 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
}
只需将gain 的值设置为booster 以使其更响亮。
选项 B:您也可以尝试 normalizing 音频文件,它实质上在整个录音中应用了一个倍数常数(相对于录音中的最高信号电平),因此它达到了一个新的您定义的目标最大值。在这里,我将其设置为 -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...
}
}
此方法将所有内容的幅度增加到 dB 级别 - 因此它不会影响文件的动态 (SNR),它只会增加达到新最大值所需的量(所以你可以安全地将其应用于您的所有文件以使它们统一)。
使用 AVAudioPlayer
选项 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
选项 B:如果您的声音文件太安静,它可能会从手机的接收器中发出。在这种情况下,您可以尝试覆盖输出端口以使用扬声器:
do {
try AVAudioSession.sharedInstance().overrideOutputAudioPort(AVAudioSession.PortOverride.speaker)
} catch let error {
print("Override failed: \(error)")
}
您也可以使用此代码永久设置(但我不能保证您的应用会进入 AppStore):
try? audioSession.setCategory(AVAudioSessionCategoryPlayAndRecord, with: AVAudioSessionCategoryOptions.defaultToSpeaker)
选项 C: 如果选项 B 不适合您,那么您可能在“如何让 AVAudioPlayer 播放得更响亮”方面不走运。您最好自己使用一些外部软件编辑源文件 - 我可以推荐 Audacity 作为一个不错的选择。
选项 D:我只听说过的最后一个选项。您还可以查看MPVolumeView,它具有用于控制系统输出和音量的 UI。不过我对它不太熟悉——此时可能正在接近遗产。