gpt4 book ai didi

ios - AudioKit:AKPlayer 根本不加载 AKAudioFile

转载 作者:行者123 更新时间:2023-11-28 05:48:46 28 4
gpt4 key购买 nike

我一直在尝试用 AKPlayer 替换我的代码中的 AKAudioPlayer,这是由于一个单独的问题,即 AKAudioPlayer 的播放头在暂停后给出负数并且不更新。然而,在这个切换之后,我遇到了一个单独的问题,即 AKPlayer 根本不加载我的 AKAudioFIle。这是我的代码的一个简单版本:

import UIKit
import AudioKit
import AudioKitUI

class ViewController: UIViewController
{
var microphone : AKMicrophone!
var mixer : AKMixer!
var waveformBooster: AKBooster!
var outputBooster : AKBooster!
var exportTape : AKAudioFile!
var recorder : AKNodeRecorder!
var player : AKPlayer!
var recordingTimer : Timer!
var playTimer : Timer!

@IBOutlet var startRecordingButton: CircularButton!
@IBOutlet var playAndPauseRecordingButton: UIButton!

override func viewDidLoad()
{
super.viewDidLoad()

microphone = AKMicrophone()
mixer = AKMixer(microphone)

AudioKit.output = mixer
try!AudioKit.start()

// Initialise file to store recorder output and set recorder to route mixer
// output to file

exportTape = try! AKAudioFile(name: "ExportTape")
recorder = try! AKNodeRecorder(node: mixer, file: exportTape)

// Create player with blank tape so that we have a reference player object

player = AKPlayer(audioFile: exportTape)
}

@IBAction func startRecording(_ sender: UIButton)
{
if player.isPlaying == false
{
// Delete contents of output file so it can be rewritten

try! recorder.reset()

microphone.start()

do
{
try recorder?.record()
} catch
{
AKLog("Couldn't record")
}
}
}

@IBAction func stopRecording(_ sender: UIButton)
{
microphone.stop()
recorder.stop()
}

@IBAction func playAndPauseRecording(_ sender: UIButton)
{
// Replace the empty or previous tape with the newly recorded one

//player.load(audioFile: exportTape) <-- This doesn't work either
var player = AKPlayer(audioFile: exportTape)

// TEST

print("CurrentTime \(player.currentTime)")
print("StartTime \(player.startTime)")
print("EndTime \(player.endTime)")
print("Duration \(player.duration)")
print("isPlaying \(player.isPlaying)")

// END TEST

// If something has been recorded...

if player.duration > 0
{
// If the player is currently playing...

if player.isPlaying == true
{
// ...and pause the tape

player.pause()
} else
{
AudioKit.output = player
player.play()
print("Playing...")

//player.resume()
}
}
}
}

无论是使用 .load() 方法还是创建一个新的播放器实例都不适合我——输出如下:

CurrentTime nan
StartTime 0.0
EndTime 0.0
Duration 0.0
isPlaying false

奇怪地跟着

AKPlayer.swift:deinit:918:* deinit AKPlayer

这是否意味着 AKPlayer 正在测试打印语句后取消初始化?

需要明确的是,当文件是 AKAudioPlayer 时,它正确地加载到播放器中,只是现在我将它更改为 AKPlayer,文件才不会加载。有人知道为什么吗?任何帮助将不胜感激。

编辑:

这是一段更短更简单的代码,但仍然显示错误:

import UIKit
import AudioKit

class ViewController: UIViewController
{
var file : AKAudioFile!
var player : AKPlayer!
var audioPlayer : AKAudioPlayer!
var microphone : AKMicrophone!
var mixer : AKMixer!
var recorder : AKNodeRecorder!
var booster : AKBooster!

@IBOutlet var startRecordingButton: UIButton!
@IBOutlet var stopRecordingButton: UIButton!
@IBOutlet var playRecordingButton: UIButton!

override func viewDidLoad()
{
super.viewDidLoad()

microphone = AKMicrophone()
mixer = AKMixer(microphone)

booster = AKBooster(mixer)
booster.gain = 0

AudioKit.output = booster
try!AudioKit.start()

file = try! AKAudioFile(name: "file")
recorder = try! AKNodeRecorder(node: mixer, file: file)
}

@IBAction func startRecording(_ sender: UIButton)
{
microphone.start()
print("Recording...")

do
{
try recorder?.record()
} catch
{
AKLog("Couldn't record")
}
}

@IBAction func stopRecording(_ sender: UIButton)
{
microphone.stop()
recorder.stop()
print("Recording Stopped")
}

@IBAction func playRecording(_ sender: UIButton)
{
audioPlayer = try! AKAudioPlayer(file: file)
player = AKPlayer(audioFile: file)

AudioKit.output = player
player.play()

// v this works! v

// AudioKit.output = audioPlayer
// audioPlayer.play()
}
}

最佳答案

这已在即将发布的错误修复中得到解决。问题是 AKPlayer 假设传入的 AKAudioFile 是为读取打开的,而 AKMicrophone 的关联文件是为写入打开的。

AKAudioPlayer 创建了一个重复的文件对象,这就是它在那里工作的原因。应该很快更新!

关于ios - AudioKit:AKPlayer 根本不加载 AKAudioFile,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53730646/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com