Ответ дан ранее: Остановка звука в 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;
И внутри вашей реализации "Action" или, в моем случае, в:
- (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)», потому чтоПриложение неожиданно завершает работу, когда пользователь покидает представление таблицы.
Весь этот код пропорционален Apple.В этой ссылке вы можете найти даже пример кода для тестирования непосредственно в симуляторе iPhone.
https://developer.apple.com/library/ios/samplecode/SysSound/Introduction/Intro.html#//apple_ref/doc/uid/DTS40008018-Intro-DontLinkElementID_2