Riproduci un breve suono in iOS



Answers

Per brevi clip audio (meno di 30 secondi), c'è una libreria SystemSounds che è davvero bella.

Pro: non è necessario gestire le impostazioni del volume separatamente. L'audio viene riprodotto in un thread separato e il caricamento e la riproduzione della clip audio sono v veloci. In breve, tratti questa clip come un altro suono di sistema.

Contro: non è possibile fornire un'impostazione di controllo audio separata. È legato alle impostazioni dei suoni di sistema. Non puoi giocare più di 30 secondi. Probabilmente non puoi applicare alcun filtro audio per migliorare l'effetto audio.

Ci sono sicuramente più pro e contro, ma questi sono alcuni che potrei pensare, in cima alla mia testa.

usa questa importazione: <AudioToolbox/AudioToolbox.h> Aggiungi l'AudioToolbox Framework quindi chiama il metodo seguente come [self playSound], ovunque tu voglia riprodurre la clip.

-(void) playSound {
    NSString *soundPath = [[NSBundle mainBundle] pathForResource:@"changeTrack" ofType:@"aif"];
    SystemSoundID soundID;
    AudioServicesCreateSystemSoundID((CFURLRef)[NSURL fileURLWithPath: soundPath], &soundID);
    AudioServicesPlaySystemSound (soundID);
    [soundPath release];
}
Question

Suppongo che potrei usare AVAudioPlayer per riprodurre un suono, tuttavia, quello di cui ho bisogno è solo suonare un breve suono e non ho bisogno di loop o controllo a grana fine sul volume, ecc.

C'è un modo semplice per farlo?




Ecco un metodo rapido che puoi copiare e utilizzare nella tua app:

-(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;
}

Quindi usare solo:

[self playSoundFXnamed:@"someAudio.mp3" Loop: NO];

Se AVAudioPlayer *audioPlayer il ciclo, devi portare il tuo AVAudioPlayer *audioPlayer nella tua classe per essere in grado di interrompere il suono .. Quale non lo faresti se desideri solo un breve suono.

Usa ARC ... e non ho mai fatto niente con NSError, quindi usalo se ti piace ...




Recentemente, ho usato questo codice per riprodurre un breve audio mp3 che ha funzionato bene: -

Dichiaralo sotto l'implementazione @

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



Utilizzando Swift 4

import AudioToolbox
func playSoundEasy(note : String) {

var soundURL: NSURL?
var soundID: SystemSoundID = 0

let filePath = Bundle.main.path(forResource: note, ofType: "wav")
soundURL = NSURL(fileURLWithPath: filePath!)
if let url = soundURL {
    AudioServicesCreateSystemSoundID(url, &soundID)
    AudioServicesPlaySystemSound(soundID)
}

}




VERSIONE SWIFT 3 SEMPLICE SEMPLICE

Mi piace più controllo sui miei suoni, quindi sto usando AVFoundation.

import AVFoundation

class TodayViewController: UIViewController {

  var clink: AVAudioPlayer?
  var shatter: AVAudioPlayer?

  override func viewDidLoad() {
    super.viewDidLoad()

    // initialize the sound
    shatter = setupAudioPlayer(withFile: "shatter", type: "wav")
    clink = setupAudioPlayer(withFile: "clink", type: "wav")
  }

  func setupAudioPlayer(withFile file: String, type: String) -> AVAudioPlayer? {
    let path = Bundle.main.path(forResource: file, ofType: type)
    let url = NSURL.fileURL(withPath: path!)
    return try? AVAudioPlayer(contentsOf: url)
  }

  func onClick() {
    clink?.play()
  }
}

Assicurati di aver aggiunto il file al progetto e di importare AVFoundation.




Si prega di fare riferimento alla semplice riproduzione audio 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);
}



Links