5

これは何度も質問されていることを知っており、SOに関連するほとんどの回答を確認しましたが、問題に対する正しい回答を見つけることができません。

ここに問題があります:

あるイベントがトリガーされたときにゲームでmp3ファイル(最大2秒)を再生しようとしましたが、AudioPlayerを使用して再生しました。以下は、コードブロックです。

NSError *error;
AVAudioPlayer *audioPlayer = [[[AVAudioPlayer alloc] initWithContentsOfURL:[[NSBundle mainBundle] URLForResource: @"ding" withExtension: @"mp3"] error:&error] autorelease];
if (error)  {
    NSLog(@"Error creating audio player: %@", [error userInfo]);
}
else {
    BOOL success = [audioPlayer play];
    // This always is "Play sound succeeded"
    NSLog(@"Play sound %@", success ? @"succeeded" : @"failed");
}

このコードをiPhone4s、iTouch 3/4で実行した場合、サウンドは常に良好でクリアに再生されましたが、iPad1またはiPad2ではスピーカーから音が出ません。でも、ヘッドホンを差し込むと、ヘッドホンから音がするという変なことが起こりました!iPadはミュートモードではなく、URLは正しいです。

なぜこれが起こったのか私は混乱しています。

PS:オーディオ出力ポートタイプを出力するために、次のコード(ここから取得)を試しました

CFDictionaryRef asCFType = nil;
UInt32 dataSize = sizeof(asCFType);
AudioSessionGetProperty(kAudioSessionProperty_AudioRouteDescription, &dataSize, &asCFType);
NSDictionary *easyPeasy = (NSDictionary *)asCFType;
NSDictionary *firstOutput = (NSDictionary *)[[easyPeasy valueForKey:@"RouteDetailedDescription_Outputs"] objectAtIndex:0];
NSString *portType = (NSString *)[firstOutput valueForKey:@"RouteDetailedDescription_PortType"];
NSLog(@"first output port type is: %@!", portType);

ヘッドホンを接続すると、「最初の出力ポートタイプはヘッドホンです!」という出力になりました。プラグを抜くと、「最初の出力ポートタイプはスピーカーです!」という出力になりました。

誰かが助けやアドバイスを提供できるのは素晴らしいことです。

4

3 に答える 3

5

これにはコード変更の解決策がありますが、エンドユーザーの解決策もあります。「リング/サイレントスイッチ」をオンにします。AVAudioSessionCategorySoloAmbient具体的には、問題は、電話がサイレントモードの場合、 AVAudioSessionsのデフォルト設定がサイレントになることです。

元の投稿者が述べたように、次のように呼び出すことでこの動作をオーバーライドできます。

[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback error:nil];

AVAudioSessionリファレンスAVAudioSessionCategoryPlaybackでは、カテゴリを設定することをお勧めします。

アプリの使用を成功させるための中心となる録音された音楽やその他のサウンドを再生するため。

于 2014-05-20T22:47:33.033 に答える
3

上記の@JonBrooksの回答をSwift2構文で更新するには、viewDidLoad()に次のように入力して、サイレントスイッチをオーバーライドし、サウンドを再生します。

do {

    try AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayback)

} catch let error as NSError {

    print(error)
}
于 2015-11-04T23:25:44.507 に答える
0

解決策が見つかりました!再生する前にこのコード行を追加した後、最終的にスピーカーからサウンドが再生されます

[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback error:nil];

私は今でもその理由を理解していません、そして私はそれを掘り下げます。:)

于 2012-12-11T01:58:39.277 に答える