它面前回答: Stopping sound in Xcode
但我可以重複我的答案。
彙總,停止聲音文件的一句話是:
AudioServicesDisposeSystemSoundID (soundFileObject);
解釋(重要的是理解):
我有18個不同的聲音文件表視圖。當用戶選擇一行時,必須發出相應的文件,並在選擇另一行時,必須停止前一個聲音並播放其他聲音。
所有這些東西是必要的:
1)添加到您的項目「AudioToolbox.framework」裏面的「構建階段」,裏面的「二進制鏈接與圖書館」
2)在頭文件(以我的項目是稱爲 「GenericTableView.h」)添加這些句子:
#include <AudioToolbox/AudioToolbox.h>
CFURLRef soundFileURLRef;
SystemSoundID soundFileObject;
@property (readwrite) CFURLRef soundFileURLRef;
@property (readonly) SystemSoundID soundFileObject;
3)在實現文件(在我的項目是稱爲 「GenericTableView.m」)添加這些句子:
@synthesize soundFileURLRef;
@synthesize soundFileObject;
而且裏面你的 「行動」 的實施或在我的情況,在:
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
// -----------------------------------------------------------------------
// -----------------------------------------------------------------------
// -----------------------------------------------------------------------
//
// That is the question: a way to STOP sound file
//
// -----------------------------------------------------------------------
// Very important to STOP the sound file
AudioServicesDisposeSystemSoundID (soundFileObject);
// -----------------------------------------------------------------------
// -----------------------------------------------------------------------
// -----------------------------------------------------------------------
// In my project "rowText" is a field that save the name of the
// corresponding sound (depending on row selected)
// It can be a string, @"Alarm Clock Bell" in example
// Create the URL for the source audio file.
// URLForResource:withExtension: method is new in iOS 4.0.
NSURL *soundURL = [[NSBundle mainBundle] URLForResource:rowText withExtension:@"caf"];
// Store the URL as a CFURLRef instance
self.soundFileURLRef = (CFURLRef) [soundURL retain];
// Create a system sound object representing the sound file.
AudioServicesCreateSystemSoundID (soundFileURLRef,&soundFileObject);
AudioServicesPlaySystemSound (soundFileObject);
[soundURL release];
}
4)最後,在相同的實現文件(在我的項目是稱爲 「GenericTableView.m」):
- (void)dealloc {
[super dealloc];
AudioServicesDisposeSystemSoundID (soundFileObject);
//CFRelease (soundFileURLRef);
}
我必須評論「CFRelease(soundFileURLRef)」,因爲應用程序在用戶離開表視圖時意外結束。
所有這些代碼是由蘋果比例。在這個鏈接中,你甚至可以找到一個示例代碼,直接在你的iPhone模擬器中測試。
https://developer.apple.com/library/ios/samplecode/SysSound/Introduction/Intro.html#//apple_ref/doc/uid/DTS40008018-Intro-DontLinkElementID_2
你的方法名是不知道的用戶界面看起來像什麼不可理解的。爲什麼你的IBAction方法被命名爲「beyond」和「Years」? – bneely 2012-02-11 21:18:32
Beyond和Years是播放聲音和按鈕的名稱。 – user1176046 2012-02-11 21:30:44