サウンドを再生するために使用できると思いますAVAudioPlayer
が、必要なのは短いサウンドを再生することだけであり、ループやボリュームなどのきめ細かい制御は必要ありません。
これを行う簡単な方法はありますか?
他の回答のすべてがメモリをリークします (回答の1 つでARC が有効になっている場合を除きます)...奇妙なことに、最初に正しいとマークされた回答には、retainCount
明らかな理由もなく への呼び出しがあります。
何かあればalloc/init
、リリースする必要があります (ARC を使用していない場合)。
呼び出すAudioServicesCreateSystemSoundID()
場合は、結果のサウンドを破棄する必要があります。
オーディオ UI サウンドの例を参照してください。
基本的:
@interface MyClass:UI*ViewController // fixed
{
SystemSoundID mySound;
}
@implementation MyClass
- (void) viewDidLoad {
[super viewDidLoad];
AudioServicesCreateSystemSoundID(.... URL ...., &mySound);
}
- (void) playMySoundLikeRightNowReally {
AudioServicesPlaySystemSound(mySound);
}
- (void) dealloc {
AudioServicesDisposeSystemSoundID(mySound);
[super dealloc]; // only in manual retain/release, delete for ARC
}
@end
完全を期すために:
AudioToolbox.framework を追加します。
#import <AudioToolbox/AudioToolbox.h>
短いサウンド クリップ (30 秒未満) の場合は、本当に便利な SystemSounds ライブラリがあります。
長所: 音量設定を個別に管理する必要はありません。サウンドは別のスレッドで再生され、オーディオ クリップの読み込みと再生は非常に高速です。つまり、このクリップを別のシステム サウンドとして扱います。
短所: 個別のオーディオ コントロール設定を提供することはできません。これは、システム サウンドの設定に関連付けられています。30 秒を超えてプレイすることはできません。おそらく、オーディオ効果を高めるためにサウンド フィルタを適用することはできません。
確かにもっと長所と短所がありますが、これらは私が頭の中で考えることができるものです.
このインポートを使用します: <AudioToolbox/AudioToolbox.h>
AudioToolbox フレームワークを追加し、[self playSound] のような以下のメソッドを、クリップを再生したい場所で呼び出します。
-(void) playSound {
NSString *soundPath = [[NSBundle mainBundle] pathForResource:@"changeTrack" ofType:@"aif"];
SystemSoundID soundID;
AudioServicesCreateSystemSoundID((CFURLRef)[NSURL fileURLWithPath: soundPath], &soundID);
AudioServicesPlaySystemSound (soundID);
[soundPath release];
}
最近、このコードを使用して短い mp3 オーディオを再生しましたが、問題なく動作しました:-
これを @implementation の下で宣言します
NSString *path;
NSURL *url;
//where you are about to add sound
path =[[NSBundle mainBundle] pathForResource:[NSString stringWithFormat:@"quotes_%d",soundTags] ofType:@"mp3"];
url = [NSURL fileURLWithPath:path];
player = [[AVAudioPlayer alloc] initWithContentsOfURL:url error:NULL];
[player setVolume:1.0];
[player play];
//just add AVFoundation framework
このコードを使用して、iOS で短い aiff サウンドを再生しました
#import <AudioToolbox/AudioServices.h>
SystemSoundID completeSound;
NSURL *audioPath = [[NSBundle mainBundle] URLForResource:@"downloadCompleted" withExtension:@"aiff"];
AudioServicesCreateSystemSoundID((CFURLRef)audioPath, &completeSound);
AudioServicesPlaySystemSound (completeSound);
お役に立てれば。
私の答えはビルの答えですが、init または dealloc なしで使用し、再生後にサウンドを解放します。
- (void)playSound:(NSURL *)url
SystemSoundID ssID = 0;
AudioServicesCreateSystemSoundID((CFURLRef)url, &ssID);
AudioServicesAddSystemSoundCompletion(ssID, NULL, NULL, (AudioServicesSystemSoundCompletionProc)MyAudioServicesSystemSoundCompletionProc, NULL);
AudioServicesPlaySystemSound(ssID);
//AudioServicesDisposeSystemSoundID(ssID);
}
void MyAudioServicesSystemSoundCompletionProc (SystemSoundID ssID, void *clientData) {
AudioServicesDisposeSystemSoundID(ssID);
}
コピーしてアプリで使用できる簡単なクリーンな方法は次のとおりです。
-(BOOL) playSoundFXnamed: (NSString*) vSFXName Loop: (BOOL) vLoop
{
NSError *error;
NSBundle* bundle = [NSBundle mainBundle];
NSString* bundleDirectory = (NSString*)[bundle bundlePath];
NSURL *url = [NSURL fileURLWithPath:[bundleDirectory stringByAppendingPathComponent:vSFXName]];
AVAudioPlayer *audioPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:url error:&error];
if(vLoop)
audioPlayer.numberOfLoops = -1;
else
audioPlayer.numberOfLoops = 0;
BOOL success = YES;
if (audioPlayer == nil)
{
success = NO;
}
else
{
success = [audioPlayer play];
}
return success;
}
次に、ちょうど使用するには:
[self playSoundFXnamed:@"someAudio.mp3" Loop: NO];
あなたがループするつもりなら、あなたAVAudioPlayer *audioPlayer
は音を止めることができるようにあなたをあなたのクラスに連れて行く必要があります..あなたがただ短い音が欲しいならあなたはそれをしません。
ARCを使用してください...そして私はNSErrorで何もしなかったので、もし好きならそれを使ってください...
From Sound はデバイスでのみ機能し、シミュレーターでは機能しません
Nickは、iOS および Mac アプリでサウンドを再生するために使用できるライブラリを作成しました。
シンプルな iOS オーディオ再生を参照してください。
- (void)playSound
{
SystemSoundID soundId;
// NSURL *soundURL = [[NSBundle mainBundle] URLForResource:@"sample"
// withExtension:@"caf"];
// AudioServicesCreateSystemSoundID((__bridge CFURLRef)soundURL, &soundId);
NSString *path = [[NSBundle mainBundle] pathForResource:@"sample" ofType:@"mp3"];
AudioServicesCreateSystemSoundID((__bridge CFURLRef)[NSURL fileURLWithPath:path], &soundId);
AudioServicesAddSystemSoundCompletion(soundId,
NULL,
NULL,
systemAudioCallback,
NULL);
AudioServicesPlaySystemSound(soundId);
//AudioServicesPlayAlertSound(soundId);
}
- (void) systemAudioCallback(SystemSoundID soundId, void *clientData)
{
AudioServicesRemoveSystemSoundCompletion(soundId);
AudioServicesDisposeSystemSoundID(soundId);
}
短いオーディオ ファイルを再生するには、systemsound をチェックアウトします
audiotoolbox フレームワークを含める
そして作成する
systemsoundid オブジェクト
NSString *soundPath = [[NSBundle mainBundle] pathForResource:file ofType:@"aiff"];
AudioServicesCreateSystemSoundID((CFURLRef)[NSURL fileURLWithPath: soundPath], &soundID);
AudioServicesPlaySystemSound (soundID);