我的故事板中有两个场景,第一个只是包含一个由单词数组填充的UI表。当一个单元格被选中时,我的应用程序会转到第二个场景,该场景包含一个标签(给出了相应"wordTitle"的内容,请参见下文)和一个按钮。在我的支持文件文件夹中,我有一个音频文件,代表UITable中的每个条目。我有一个名为Word的自定义类,它具有"wordTitle"属性。我在视图控制器中创建了许多Word对象。
words = [[NSMutableArray alloc] init];
//custom Word class object
Word * wrd = [[Word alloc]] init];
wrd.wordTitle = @"One";
[words addObject:wrd];
wrd = [[Word alloc]] init];
wrd.wordTitle = @"two";
[words addObject:wrd];
// and so on.
每次在UITable中选择单元格时,第二个场景中的标签都会正确更新。如何设置按钮,以便在第二个场景中按下按钮时播放相应的音频文件?
现在使用新的AVFoundation AVAudioEngine,这一切都变得容易多了。基本上,您将创建一个音频引擎和一个AVAudioPlayerNode,并将音频文件加载到播放器中播放。
var error: NSError?
let engine = AVAudioEngine()
let playerNode = AVAudioPlayerNode()
//set up the audiofile
var audioFileUrl : NSURL?
var audioFile : AVAudioFile?
var audioFormat :AVAudioFormat?
将audiplayer节点连接到发动机
let mainMixer = engine.main
MixerNode
engine.attachNode(playerNode)
//wire it up
engine.connect(playerNode, to: mainMixer, format: audioFormat)
//Gentlemen start your engine
engine.startAndReturnError(&error)
通常要将音频文件加载到播放器中,您会使用以下内容:
func loadAudioFileInotPlayer(){
audioFileUrl = NSURL(fileURLWithPath:"/somepath/filename")
audioFile = AVAudioFile(forReading: audioFileUrl, commonFormat: .PCMFormatFloat32, interleaved: true, error: &error)
audioFormat = audioFile!.processingFormat
}
func Play (){
//Load the audio file into the player node
playerNode.scheduleFile(audioFile, atTime: nil, completionHandler: nil)
playerNode.play()
println("Play was pressed")
}
您需要为audioFileUrl中的路径创建一个字符串,该字符串指向要加载该特定文件的文件名。我希望这能有所帮助。