Então o que eu quero fazer é criar e tocar um som em swift que tocará quando eu pressionar um botão, eu sei como fazer em Objective-C, mas alguém sabe em Swift?
Seria assim para Objective-C:
NSURL *soundURL = [NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"mysoundname" ofType:@"wav"]];
AudioServicesCreateSystemSoundID((__bridge CFURLRef)soundURL, &mySound);
E então, para jogar, eu faria:
AudioServicesPlaySystemSound(Explosion);
Alguém sabe como eu poderia fazer isso?
ios
objective-c
audio
swift
Jacob Banks
fonte
fonte
var url :NSURL = NSURL(fileURLWithPath: NSBundle.mainBundle().pathForResource("mysoundname", ofType: "wav"))
Respostas:
Aqui está um código que adicionei ao FlappySwift que funciona:
fonte
coinSound
eaudioPlayer
com emlet
vez de,var
pois você não quer mude esses objetos em um momento posterior.do { (player object) } catch _ { }
ou você terá um bug! :)Isso é semelhante a algumas outras respostas, mas talvez um pouco mais "Swifty":
Observe que este é um exemplo trivial de reprodução do efeito do código na pergunta. Você precisará certificar-se de que
import AudioToolbox
, além do padrão geral para este tipo de código, carregar seus sons quando seu aplicativo for inicializado, salvando-os emSystemSoundID
variáveis de instância em algum lugar, usá-los em todo o aplicativo e, em seguida, chamarAudioServicesDisposeSystemSoundID
quando terminar com eles.fonte
AudioServicesDisposeSystemSoundID(mySound)
para liberar memória mais tarde? se você fizer isso imediatamente, o som basicamente não será reproduzido (é limpo instantaneamente), então eu fizdispatch_after
e limpei 10 segundos depois.Extensão Handy Swift:
Então, de qualquer lugar em seu aplicativo (lembre-se
import AudioToolbox
), você pode ligarpara tocar "sound.mp3"
fonte
DispatchQueue.global(qos: .userInitiated).async {}
.NSBundle
foi substituído porBundle
, use noBundle.main.url(forResource: fileName, withExtension: fileExtension)
lugarIsso cria um a
SystemSoundID
partir de um arquivo chamadoCha-Ching.aiff
.fonte
Com uma classe e AudioToolbox:
Uso:
fonte
fonte
Este código funciona para mim. Use Try and Catch para AVAudioPlayer
fonte
"Morse.aiff" é um sistema de som do OSX, mas se você apenas clicar em "nomeado" no XCode, poderá visualizar (no painel QuickHelp) onde esta função está pesquisando os sons. Ele pode estar na pasta "Arquivos de suporte"
fonte
De acordo com o novo Swift 2.0, devemos usar do try catch. O código ficaria assim:
fonte
isso está funcionando com o Swift 4:
fonte
fonte
Vamos ver uma abordagem mais atualizada para esta questão:
fonte
A solução de Matt Gibson funcionou para mim, aqui está a versão 3 do swift.
fonte
Swift 4
ou
fonte
trabalha em
Xcode 9.2
fonte
Exemplo de código Swift :
fonte
Você pode tentar isso no Swift 5.2:
fonte
swift 4 e iOS 12
}
fonte
Use esta função para fazer som em Swift (você pode usar esta função onde quiser fazer som.)
Primeiro, adicione SpriteKit e AVFoundation Framework.
fonte
Este código funciona para mim:
fonte
Para Swift 3 :
fonte
Swift 3 é assim que eu faço.
fonte
Você não poderia simplesmente
import AVFoundation
selecionar o reprodutor de áudio (var audioPlayer : AVAudioPlayer!
) e reproduzir o som? (let soundURL = Bundle.main.url(forResource: "sound", withExtension: "wav"
)fonte
fonte