为什么我不能播放AVAudioRecorder录制的声音文件?

时间:2015-11-27 12:53:14

标签: swift swift2 avaudioplayer avaudiorecorder

这就是我定义myrecorder和myplayer的方式

var myrecorder:AVAudioRecorder!
var myplayer : AVAudioPlayer!

这是在viewDidLoad()

中设置myrecorder的代码
override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib.

    filepath = "\(getDocumentsDirectory())/001.caf"
    print(filepath)

    try! session.setCategory(AVAudioSessionCategoryPlayAndRecord)
    //define settings
    let recordSettings: [String: AnyObject] = [
        AVFormatIDKey: NSNumber(unsignedInt: kAudioFormatMPEG4AAC),
        AVEncoderAudioQualityKey : AVAudioQuality.Medium.rawValue,
        AVSampleRateKey: 44100.0,
        AVNumberOfChannelsKey: 2,
    ]
    myrecorder = try! AVAudioRecorder(URL: NSURL(fileURLWithPath: filepath), settings: recordSettings)
    myrecorder.delegate = self
    myrecorder.prepareToRecord()
}

我有按钮来控制记录和停止,我得到了文件001.caf。我可以播放声音文件,但我认为文件不够好。

@IBAction func Play() {
    try! myplayer = AVAudioPlayer(contentsOfURL: NSURL(fileURLWithPath: filepath))
    myplayer.volume = 0.5
    myplayer.play()
    print("Playing...")
}

播放成功,没有任何错误或崩溃。只有一个问题,播放时没有任何声音。

我认为我在录制阶段错过了一些东西,但我无法找到它。请帮忙。

2 个答案:

答案 0 :(得分:0)

问题在于在此行中实例化的AVAudioPlayer。

gem install nokogiri -v 1.6.2.1 -- --use-system-libraries

一旦播放功能完成,此实例myplayer将被解除分配。

在另一个函数(例如Viewdidload)中实例化AVAudio播放器,以便即使在控件离开播放功能后它仍然存在。

答案 1 :(得分:-1)

好的,最后我发现了问题。

您可以使用AVAudioSessionCategoryPlayAndRecord。

录制时,您必须使用AVAudioSessionCategoryRecord,并在播放时使用AVAudioSessionCategoryPlayback。并且在播放和录制时来回设置会话。

AVAudioSessionCategoryPlayAndRecord用于同时播放和录制时,例如进行语音聊天时...