Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/blackberry/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift 为什么可以';播放AVAudioRecorder录制的声音文件吗?_Swift_Swift2_Avaudioplayer_Avaudiorecorder - Fatal编程技术网

Swift 为什么可以';播放AVAudioRecorder录制的声音文件吗?

Swift 为什么可以';播放AVAudioRecorder录制的声音文件吗?,swift,swift2,avaudioplayer,avaudiorecorder,Swift,Swift2,Avaudioplayer,Avaudiorecorder,这就是我定义myrecorder和myplayer的方式 var myrecorder:AVAudioRecorder! var myplayer : AVAudioPlayer! 这是在viewDidLoad()中设置myrecorder的代码 我有控制记录和停止的按钮,我得到了文件001.caf。我可以播放声音文件,但我认为该文件不够好 @IBAction func Play() { try! myplayer = AVAudioPlayer(contentsOfURL: NSUR

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

var myrecorder:AVAudioRecorder!
var myplayer : AVAudioPlayer!
这是在viewDidLoad()中设置myrecorder的代码

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

@IBAction func Play() {
    try! myplayer = AVAudioPlayer(contentsOfURL: NSURL(fileURLWithPath: filepath))
    myplayer.volume = 0.5
    myplayer.play()
    print("Playing...")
}
播放成功,没有任何错误或崩溃。只有一个问题,它在播放时没有任何声音


我想我在录音阶段错过了什么,但我找不到它。请提供帮助。

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

try! myplayer = AVAudioPlayer(contentsOfURL: NSURL(fileURLWithPath: filepath))
此实例myplayer将在play函数完成后立即解除分配


在另一个函数(如Viewdidload)中实例化AVAudio播放器,使其即使在控件离开播放函数后仍保持不变。

好的,最后我发现了问题

您不能使用AudioSessionCategoryPlay和Record

录制时,必须使用AVAudioSessionCategoryRecord,播放时使用AVAudioSessionCategoryPlayback。播放和录制时,可以来回设置会话


AvaudioSessionCategoryPlay和Record在同时需要播放和录制时使用,例如在进行语音聊天时…

不,它不起作用。我在外面定义了我的播放器。让我适当地解决这个问题,顺便说一句,如果在Viewdidload中启动实例,它不会使实例永久化。要使实例保持不变,您必须在任何特定方法之外对其进行定义,从而有效地使其保持不变。当自我在那里时,客体就在那里。当你定义它时,你也不能把它放在弱的地方。初始化实例的位置或时间无关紧要。我认为我不必显示define代码,因为在我的实例名之前我没有LET,这意味着我已经在外部定义了它。这都是关于变量的范围,不是这样。
AVAudioSessionCategoryPlayAndRecord
上的文档说:“该类别适用于同时录制和播放,也适用于录制和播放但不同时[我的斜体]的应用程序。”。我想我们不能完全按照文件上说的去做。在我的例子中,如果我使用的是AVAudioSessionCategoryPlayAndRecord,那么我就不能播放我录制的CAF文件。当我在播放时将类型切换为播放,在录制时将类型切换为录制时,一切正常。我注意到在您的代码中,您设置了会话类别,但从未激活会话。这更有可能成为问题所在。
try! myplayer = AVAudioPlayer(contentsOfURL: NSURL(fileURLWithPath: filepath))