2

アセットカタログAssets.xcassetsのサウンドを再生するためにAVAudioPlayerNodeを使用しようとしていますが、その方法を理解できません。AVAudioPlayerNodeを使用してアセットカタログからサウンドを再生するにはどうすればよいですか?

私はこのようなNSDataAssetで初期化することができAVAudioPlayer、使用している:私は(ピッチシフトやその他の理由で)代わりにAVAudioPlayerNodeを使用したい

let sound = NSDataAsset(name: "beep")! 
do { 
    let player = try AVAudioPlayer(data: sound.data, fileTypeHint: AVFileTypeWAVE) 
    player.prepareToPlay() 
    player.play() 
} catch { 
    print("Failed to create AVAudioPlayer") 
} 

を。私はエンジンを作成して、ノードOKフックすることができます:それはplayerNode.scheduleFile()あるファイルを再生するために使用する方法のように見えます

var engine = AVAudioEngine() 
func playSound(named name: String) { 
    let mixer = engine.mainMixerNode 
    let playerNode = AVAudioPlayerNode() 
    engine.attach(playerNode) 
    engine.connect(playerNode, to: mixer, format: mixer.outputFormat(forBus: 0)) 

    // play the file (this is what I don't know how to do) 
} 

を。それはAVAudioFileを取るので、私は1つを作ろうと思った。しかし、AVAudioFileのイニシャライザではURLが必要です。私が知る限り、アセットカタログのアセットはURLで利用できません。私はNSDataAssetを使って直接データを得ることができますが、それを使用してAVAudioFileを設定する方法はないようです。

資産カタログの音をAVAudioPlayerNodeで再生することはできますか?そしてもしそうなら、どうですか?

答えて

0

よろしくお願いします。URLをあなたの資産カタログのファイルから取得したいのですか?

私はあなたがそれを

を言うようにそれは基本的には、資産から画像を取得し、ディスクにそのデータを保存し、ファイルのURLを返し

を周りを見回しただけthis answer

を見つけましたおそらくMP3ファイル(またはWAVなど)を探すために変更する必要があります。

だからあなたのようなもので終わる可能性:たぶん少し遠くにフェッチされたが、私は他のオプションを発見していない

enum SoundType: String { 
    case mp3 = "mp3" 
    case wav = "wav" 
} 

class AssetExtractor { 

    static func createLocalUrl(forSoundNamed name: String, ofType type: SoundType = .mp3) -> URL? { 

     let fileManager = FileManager.default 
     let cacheDirectory = fileManager.urls(for: .cachesDirectory, in: .userDomainMask)[0] 
     let url = cacheDirectory.appendingPathComponent("\(name).\(type)") 

     guard fileManager.fileExists(atPath: url.path) else { 
      guard 
       let image = UIImage(named: name), 
       let data = UIImagePNGRepresentation(image) 
      else { return nil } 

      fileManager.createFile(atPath: url.path, contents: data, attributes: nil) 
      return url 
     } 
     return url 
    } 
} 

希望はあなたを助けます。

関連する問題