0

.mp3 ファイル タイプを使用しているアプリケーションでサウンドを再生したいと考えています。シミュレーターでは正常に動作していますが、デバイスにランチングしているときに動作せず、サウンドが生成されないため、デバイスで動作しない理由や、iPhone および iPad でオーディオファイルを再生するのに適したファイル形式を教えてください。 ?

NSURL *tapSound   = [[NSBundle mainBundle] URLForResource: [NSString stringWithFormat:@"%@",SoundFileName] withExtension: @""];

// Store the URL as a CFURLRef instance
 self.soundFileURLRef = (CFURLRef) [tapSound retain];

 // Create a system sound object representing the sound file.
 AudioServicesCreateSystemSoundID (
                     soundFileURLRef,
                    &soundFileObject
                    );

AudioServicesPlaySystemSound (soundFileObject);

上記は、サウンドを再生するための私のコードです

ありがとうございました。

4

2 に答える 2

0

デバイスがミュートされているとシステム サウンド ID が再生されないため、これが原因である可能性があります。(これらは、公式ドキュメントによると、アラートなどのユーザー インターフェイス効果を目的としているだけです。)

そのため、AVAudioPlayerスタイルのアプローチを使用したくなるでしょう。サンプル(しゃれた意図なし)の実装として:

// *** In your interface... ***
#import <AVFoundation/AVFoundation.h>

...

AVAudioPlayer *testAudioPlayer;

// *** Implementation... ***

// Load the audio data
NSString *soundFilePath = [[NSBundle mainBundle] pathForResource:@"sample_name" ofType:@"wav"];
NSData *sampleData = [[NSData alloc] initWithContentsOfFile:soundFilePath];
NSError *audioError = nil;

// Set up the audio player
testAudioPlayer = [[AVAudioPlayer alloc] initWithData:sampleData error:&audioError];
[sampleData release];

if(audioError != nil) {
    NSLog(@"An audio error occurred: \"%@\"", audioError);
}
else {
    [testAudioPlayer setNumberOfLoops: -1];
    [testAudioPlayer play];
}



// *** In your dealloc... ***
[testAudioPlayer release];

また、適切なオーディオ カテゴリを設定することも忘れないでください。( AVAudioSession setCategory:error:メソッドを参照してください。)

最後に、AVFoundation ライブラリをプロジェクトに追加する必要があります。これを行うには、Xcode の [グループとファイル] 列でプロジェクトのターゲットを Alt クリックし、[情報を見る] を選択します。次に、[全般] タブを選択し、下部の [リンクされたライブラリ] ペインで [+] をクリックして、[AVFoundation.framework] を選択します。

于 2011-04-16T13:35:15.730 に答える
0

正直なところ、これの代わりに使用することをお勧めしAVAudioPlayerますが、代わりにこの代替コードを使用してみてください。あなたの例では、拡張機能を含めるのを忘れたように見えますが、これも問題になる可能性があります。シミュレーターは命名に関してより寛大であるため、拡張子を忘れた場合、デバイスではなくシミュレーターで再生される可能性があります。

SystemSoundID   soundFileObject;
CFURLRef soundFileURLRef = CFBundleCopyResourceURL (CFBundleGetMainBundle (),CFSTR ("sound"),CFSTR ("mp3"),NULL );
AudioServicesCreateSystemSoundID (soundFileURLRef,&soundFileObject );
AudioServicesPlaySystemSound (soundFileObject);
于 2011-04-16T13:38:35.840 に答える