web-dev-qa-db-ja.com

Play Audio iOS Objective-C

IOSアプリでオーディオファイルを再生しようとしています。これは私の現在のコードです

NSString *soundFilePath = [NSString stringWithFormat:@"%@/test.m4a", [[NSBundle mainBundle] resourcePath]];

NSLog(@"%@",soundFilePath);
NSURL *fileURL = [[NSURL alloc] initFileURLWithPath: soundFilePath];

audioPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:fileURL error:nil];
[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback error:nil];
[[AVAudioSession sharedInstance] setActive: YES error: nil];
[[UIApplication sharedApplication] beginReceivingRemoteControlEvents];

[audioPlayer setVolume:1.0];

audioPlayer.delegate = self;

[audioPlayer stop];
[audioPlayer setCurrentTime:0];
[audioPlayer play];

私は他のたくさんの投稿をチェックしていますが、それらはすべて同じことをしています。エラーは発生しませんが、シミュレーターまたはデバイスでオーディオが再生されません。

これは、シミュレータ上のオーディオファイルのパスです

/Users/username/Library/Application Support/iPhone Simulator/5.1/Applications/long-numbered-thing/BookAdventure.app/test.m4a

どんな助けも大歓迎です!

23
Lagoo87

NSBundleメソッドpathForResource:ofType:メソッドを使用して、ファイルへのパスを作成してみてください。

次のコードは、オーディオファイルを正常に再生する必要があります。 mp3でのみ使用しましたが、m4aでも動作するはずです。このコードが機能しない場合は、オーディオファイルの形式を変更してみてください。このコードでは、オーディオファイルはメインプロジェクトディレクトリにあります。

/* Use this code to play an audio file */
NSString *soundFilePath = [[NSBundle mainBundle] pathForResource:@"test"  ofType:@"m4a"];
NSURL *soundFileURL = [NSURL fileURLWithPath:soundFilePath];

AVAudioPlayer *player = [[AVAudioPlayer alloc] initWithContentsOfURL:soundFileURL error:nil];
player.numberOfLoops = -1; //Infinite

[player play];

編集

わかりましたので、これを試してください:

NSString *soundFilePath = [NSString stringWithFormat:@"%@/test.m4a",[[NSBundle mainBundle] resourcePath]];
NSURL *soundFileURL = [NSURL fileURLWithPath:soundFilePath];

AVAudioPlayer *player = [[AVAudioPlayer alloc] initWithContentsOfURL:soundFileURL error:nil];
player.numberOfLoops = -1; //Infinite

[player play];

また、適切なインポートを行うようにしてください:

#import <AudioToolbox/AudioToolbox.h>
#import <AVFoundation/AVFoundation.h>
53
bddicken

strong「AVAudioPlayer」への参照を保存する必要があります

@property (strong) AVAudioPlayer *audioPlayer;

オーディオファイルが次のバンドルリソースにあることが確実な場合は、再生する必要があります。

プロジェクト>ビルドフェーズ>コピー

29
20
Salim

最初にこのフレームワークをファイルにインポートします

#import <AVFoundation/AVFoundation.h>

次に、AVAudioPlayerのインスタンスを宣言します。

AVAudioPlayer *audioPlayer;

NSString *soundFilePath = [[NSBundle mainBundle] pathForResource:@"Name of your audio file" 
                                                          ofType:@"type of your audio file example: mp3"];
NSURL *soundFileURL = [NSURL fileURLWithPath:soundFilePath];
audioPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:soundFileURL error:nil];
audioPlayer.numberOfLoops = -1;
[audioPlayer play];
3
Anooj VM

Swift 4.2

var soundFilePath = "\(Bundle.main.resourcePath ?? "")/test.m4a"
var soundFileURL = URL(fileURLWithPath: soundFilePath)

var player = try? AVAudioPlayer(contentsOf: soundFileURL)
player?.numberOfLoops = -1 //Infinite

player?.play()
0
mohammad shahid

システムサウンドIDを生成する場合、以下のコードを使用してバンドルオーディオファイルを再生するには

for(int i = 0 ;i< 5;i++)
{
    SystemSoundID   soundFileObject;
    NSString *audioFileName = [NSString stringWithFormat:@"Alarm%d",i+1];

    NSURL *tapSound   = [[NSBundle mainBundle] URLForResource: audioFileName
                                            withExtension: @"caf"];

    // Store the URL as a CFURLRef instance
    CFURLRef soundFileURLRef = (__bridge CFURLRef) tapSound;

    // Create a system sound object representing the sound file.
    AudioServicesCreateSystemSoundID (

                                  soundFileURLRef,
                                  &soundFileObject
                                  );
    [alarmToneIdList addObject:[NSNumber numberWithUnsignedLong:soundFileObject]];
}

以下のコードを使用してサウンドを再生できます

AudioServicesPlaySystemSound([[alarmToneIdList objectAtIndex:row]unsignedLongValue]);

これを実現するには、フレームワークでXcodeを追加する必要があります

AudioToolbox

最後に、ヘッダーファイルはコントローラーにインポートする必要があります

#import AudioToolbox/AudioToolbox.h
#import AudioToolbox/AudioServices.h
0
appsign

Swift 4メインバンドルからの再生-iOS 11のみ)

import AVFoundation

var player: AVAudioPlayer?

次のコードは、サウンドファイルをロードして再生し、必要に応じてエラーを返します。

guard let url = Bundle.main.url(forResource: "test", withExtension: "m4a") else { return }

    do {
        try AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayback)
        try AVAudioSession.sharedInstance().setActive(true)

    guard let player = player else { return }

    player.play()

    } catch let error {
        // Prints a readable error
        print(error.localizedDescription)
    }
0
Niall Kiddle