回答
這是打一個簡單的聲音在iOS中(不超過30秒)的最佳方式:
//Retrieve audio file
NSString *path = [[NSBundle mainBundle] pathForResource:@"soundeffect" ofType:@"m4a"];
NSURL *pathURL = [NSURL fileURLWithPath : path];
SystemSoundID audioEffect;
AudioServicesCreateSystemSoundID((__bridge CFURLRef) pathURL, &audioEffect);
AudioServicesPlaySystemSound(audioEffect);
// call the following function when the sound is no longer used
// (must be done AFTER the sound is done playing)
AudioServicesDisposeSystemSoundID(audioEffect);
我用這個:
頭文件:
#import <AudioToolbox/AudioServices.h>
@interface SoundEffect : NSObject
{
SystemSoundID soundID;
}
- (id)initWithSoundNamed:(NSString *)filename;
- (void)play;
@end
源文件:
#import "SoundEffect.h"
@implementation SoundEffect
- (id)initWithSoundNamed:(NSString *)filename
{
if ((self = [super init]))
{
NSURL *fileURL = [[NSBundle mainBundle] URLForResource:filename withExtension:nil];
if (fileURL != nil)
{
SystemSoundID theSoundID;
OSStatus error = AudioServicesCreateSystemSoundID((__bridge CFURLRef)fileURL, &theSoundID);
if (error == kAudioServicesNoError)
soundID = theSoundID;
}
}
return self;
}
- (void)dealloc
{
AudioServicesDisposeSystemSoundID(soundID);
}
- (void)play
{
AudioServicesPlaySystemSound(soundID);
}
@end
您將需要創建一個SoundEffect實例並直接調用該方法。
這太好了。我使用的是SystemSoundID的C數組,但是我只是碰到了schlepp需要處理的一點。切換到基於此的東西。謝謝! – 2012-10-19 23:46:42
雖然這不適用於ARC。爲了在ARC中使用它,你必須添加一個完成回調函數,你可以在這裏處理systemsound。如果你在dealloc中這樣做,聲音立即死亡: 'AudioServicesAddSystemSoundCompletion(soundID,NULL,NULL,completionCallback,(__bridge_retained void *)self);' 像這樣的例子 – Maverick1st 2013-04-08 15:07:32
@ Maverick1st這與ARC非常吻合,必須確保你的'SoundEffect'對象不會立即被釋放,比如將它分配給一個屬性。 – shawkinaw 2013-07-26 22:15:03
(小修改正確的答案照顧音頻的處置)
NSString *path = [[NSBundle mainBundle] pathForResource:@"soundeffect" ofType:@"m4a"];
NSURL *pathURL = [NSURL fileURLWithPath : path];
SystemSoundID audioEffect;
AudioServicesCreateSystemSoundID((__bridge CFURLRef) pathURL, &audioEffect);
AudioServicesPlaySystemSound(audioEffect);
// Using GCD, we can use a block to dispose of the audio effect without using a NSTimer or something else to figure out when it'll be finished playing.
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(30 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
AudioServicesDisposeSystemSoundID(audioEffect);
});
這是異步播放聲音的最佳方式。 – alones 2014-12-11 02:19:46
- 1. 簡單播放iOS中的聲音
- 2. 在瀏覽器中循環播放音頻的最佳方式?
- 3. 在Android中播放音頻RTMP流最簡單的方法
- 4. 單擊按鈕時播放聲音的最有效方式
- 5. 在iOS中播放來自Url的視頻的最佳方式
- 6. 播放單音音頻文件的最佳方法是什麼?
- 7. 在iPad上實現音頻播放的最佳方式
- 8. 在iPhone上播放聲音的最簡單方法是什麼?
- 9. 在iOS上播放音符或簡單的聲音?
- 10. 在iOS遊戲中播放聲音的最方便方法?
- 11. 最佳流式播放方式
- 12. 使用HTML5和Javascript播放聲音的最佳方式
- 13. 實現音頻播放的最佳方式
- 14. 什麼是通過Qt播放音頻的最佳方式?
- 15. 聲音播放完畢後執行代碼的最佳方式
- 16. Objective-c/IOS:向後播放音頻文件最簡單的方法是什麼
- 17. 同時播放兩個聲音的最簡單方法(C++ winapi)
- 18. 播放循環聲音最簡單的方法是什麼?
- 19. 從C/C++播放聲音最簡單的方法
- 20. FMOD中的簡單聲音播放
- 21. 在iOS中以更高音調播放音樂的最簡單方法是什麼?
- 22. 播放音效在Java中
- 23. 在簡單的iOS遊戲中,音頻的最佳方法是什麼?
- 24. 在java中每x秒播放聲音的簡單方法
- 25. iOS中的簡單低延遲音頻播放Swift
- 26. 在Haskell中播放聲音樣本的最簡單方法是什麼?
- 27. 在Qt中播放通知(頻率x)聲音 - 最簡單的方法?
- 28. 在UWP中播放背景音頻最簡單的方法是什麼?
- 29. WP7:在XNA中播放系統聲音的最簡單方法是什麼
- 30. 在定時間隔播放聲音的最佳方法?
我只是做這個自己。 – 2012-03-20 21:18:29
謝謝!有效! – noloman 2013-08-22 10:15:27
謝謝兄弟!其作品.. – 2015-01-05 05:54:51