如何使 UIButton 从 UITable 中的选择中播放相应的音频剪辑?
Posted
技术标签:
【中文标题】如何使 UIButton 从 UITable 中的选择中播放相应的音频剪辑?【英文标题】:How to make UIButton play corresponding audio clip from selection in UITable? 【发布时间】:2014-10-08 13:16:04 【问题描述】:我的故事板中有两个场景,第一个简单地包含一个由单词数组填充的 UItable。当一个单元格被选中时,我的应用程序会转到包含标签(给出其相应“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 中选择一个单元格时,都会正确更新第二个场景中的标签。如何设置按钮,以便在第二个场景中按下它时播放相应的音频文件?
【问题讨论】:
【参考方案1】:现在使用新的 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?
将audiplayernode附加到引擎
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 中的路径创建一个字符串,该字符串指向您希望加载该特定文件的文件名。我希望这有帮助。
【讨论】:
以上是关于如何使 UIButton 从 UITable 中的选择中播放相应的音频剪辑?的主要内容,如果未能解决你的问题,请参考以下文章
如何使单元格中的 UIButton 在被点击后立即保持特定状态?
如何在 UITableView Cell 中以编程方式创建 n 个 UIButton?