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
どんな助けも大歓迎です!
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>
strong「AVAudioPlayer」への参照を保存する必要があります
@property (strong) AVAudioPlayer *audioPlayer;
オーディオファイルが次のバンドルリソースにあることが確実な場合は、再生する必要があります。
プロジェクト>ビルドフェーズ>コピー
拡張子が.caf、.m4a、.mp4、.mp3、.wav、.aifのファイルを再生するには
次の2つのファイルを GitHub からダウンロードします
SoundManager.h
SoundManager.m
これらのファイルをプロジェクトに追加します
また、オーディオファイルをリソースフォルダーに追加します( sample files )
mysound.mp3, song.mp3
目的のファイルにヘッダーファイルをインポートする
#import "SoundManager.h"
void)viewDidLoadに次の2行を追加します
[SoundManager sharedManager].allowsBackgroundMusic = YES;
[[SoundManager sharedManager] prepareToPlay];
次の行を使用してサウンドを再生します(mysound.mp3)
[[SoundManager sharedManager] playSound:@"mysound" looping:NO];
次の行を使用してサウンドを停止します(mysound.mp3)
[[SoundManager sharedManager] stopSound:@"mysound"];
また、次のように音楽(song.mp3)を再生できます。
[[SoundManager sharedManager] playMusic:@"song" looping:YES];
として音楽を停止することができます
[[SoundManager sharedManager] stopMusic];
完全---(ドキュメントはGitHubにあります
最初にこのフレームワークをファイルにインポートします
#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];
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()
システムサウンド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
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)
}