如何使UIButton从UITable中的选择中播放相应的音频片段



我的故事板中有两个场景,第一个只是包含一个由单词数组填充的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中的路径创建一个字符串,该字符串指向要加载该特定文件的文件名。我希望这能有所帮助。

最新更新