我正在用swift开发一个应用程序。我希望能够增加录制文件的音量。有没有办法在应用程序内直接执行? 我找到了Audiokit https://github.com/audiokit/AudioKit和这个问题(iOS: increase volume of recorded audio),但它对我帮助不大。
谢谢!
答案 0 :(得分:6)
选项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
的{{1}}值即可使其响亮。
选项B:您也可以尝试normalizing音频文件,该文件本质上在整个录音中应用了多个常数(相对于录音中的最高信号电平),以便达到您定义的新目标最大值。在这里,我将其设置为-4dB。
booster
此方法将所有内容的幅度增加到dB的水平-因此它不会影响文件的动态效果(SNR),并且只会增加达到新最大值所需的数量(因此您可以安全地将其应用于所有文件,以使文件统一)。
选项A::如果要调整/控制音量,AVAudioPlayer有一个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...
}
}
成员,但是文档说:
音频播放器的播放音量,线性范围为0.0到1.0。
volume
是原始文件的卷和默认文件的卷。因此,您只能通过它使其更安静。如果您有兴趣,请使用以下代码:
1.0
选项B::如果您的声音文件太安静,则可能是电话听筒发出的声音。在这种情况下,您可以尝试覆盖输出端口以改为使用扬声器:
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
您还可以使用以下代码对此进行永久设置(但我不能保证您的应用会进入AppStore):
do {
try AVAudioSession.sharedInstance().overrideOutputAudioPort(AVAudioSession.PortOverride.speaker)
} catch let error {
print("Override failed: \(error)")
}
选项C::如果选项B不能满足您的要求,那么您可能对“如何使try? audioSession.setCategory(AVAudioSessionCategoryPlayAndRecord, with: AVAudioSessionCategoryOptions.defaultToSpeaker)
发挥更大的效果很不满意”。最好是自己自己使用一些外部软件编辑源文件-我可以推荐使用Audacity。
选项D:我只听说过最后一个选项。您也可以查看MPVolumeView
,它具有用于控制系统输出和音量的UI。不过,我不太熟悉-在这一点上可能接近传统。
答案 1 :(得分:1)
我想在这里提及一些事情,因为我正在研究类似的问题。
与Apple文档的AVAudioPlayer.volume
属性(https://developer.apple.com/documentation/avfoundation/avaudioplayer/1389330-volume)相反,该卷的容量可以大于1.0 ...实际上这是可行的。我在应用程序上将音量提高到100.0,录制的音频更响亮,更容易听见。
帮助我的另一件事是像这样设置AVAudioSession的模式:
do {
let session = AVAudioSession.sharedInstance()
try session.setCategory(.playAndRecord, options: [.defaultToSpeaker, .allowBluetooh])
try session.setMode(.videoRecording)
try session.setActive(true)
} catch {
debugPrint("Problem with AVAudioSession")
}
session.setMode(.videoRecording)
是此处的关键行。这可以帮助您通过电话的扬声器而不是前面的面部摄像头旁边的电话扬声器发送音频。我对此有疑问,并在此处发布了对我有帮助的问题:
AVAudioPlayer NOT playing through speaker after recording with AVAudioRecorder
答案 2 :(得分:0)
有几种标准的AudioKit DSP组件可以增加音量。
例如,您可以使用诸如AKBooster之类的简单方法:http://audiokit.io/docs/Classes/AKBooster.html
OR
使用以下代码
AKSettings.defaultToSpeaker = true
查看此帖子中的更多详细信息: https://github.com/audiokit/AudioKit/issues/599 https://github.com/AudioKit/AudioKit/issues/586