5

AVAudioEngine numaralı telefondan bir ses çıktısını almak için Swift belgelerine göz atıyorum ama cihazına baktım ama kullanışlı bir ipucu bulamadım.
Herhangi bir öneriniz var mı?
SWIFT - AVAudioEngine'den veya AudioPlayerNode'dan ses kaydetmek mümkün mü? Evet ise nasıl?

Çözüm Matt'in yanıtı sayesinde bir yol buldum. İşte bir AVAudioEngine içinden geçtikten sonra bir ses kaydetmek için nasıl bir örnek kod

newAudio = AVAudioFile(forWriting: newAudio.url, settings: nil, error: NSErrorPointer()) 
//Your new file on which you want to save some changed audio, and prepared to be bufferd in some new data... 

var audioPlayerNode = AVAudioPlayerNode() //or your Time pitch unit if pitch changed 

//Now install a Tap on the output bus to "record" the transformed file on a our newAudio file. 
audioPlayerNode.installTapOnBus(0, bufferSize: (AVAudioFrameCount(audioPlayer.duration)), format: opffb){ 
     (buffer: AVAudioPCMBuffer!, time: AVAudioTime!) in 

     if (self.newAudio.length) < (self.audioFile.length){//Let us know when to stop saving the file, otherwise saving infinitely 

     self.newAudio.writeFromBuffer(buffer, error: NSErrorPointer())//let's write the buffer result into our file 

     }else{ 
      audioPlayerNode.removeTapOnBus(0)//if we dont remove it, will keep on tapping infinitely 
      println("Did you like it? Please, vote up for my question") 
     } 

    } 

Umut bu yardımcı olur: (i teknik olarak daha önce olduğunu düşünüyorum)!

Bir sorun çözmek için:

Bazen, outputNode girişi daha kısadır: Eğer 2 oranında zaman hızını hızlandırmak eğer ses 2 kez daha kısa olacaktır. Bu sorun im şimdi dosyayı kaydetmek için benim durumum (hat 10)

if(newAudio.length) < (self.audioFile.length)//audiofile being the original(long) audio and newAudio being the new changed (shorter) audio. 

burada Herhangi bir yardım olduğu için bakan mı?

+0

İşte: [Apple doc, AV'den dışa aktarılacak] (https://developer.apple.com/library/prerelease/ios/documentation/AudioVideo/Conceptual/AVFoundationPG/Articles/05_Export.html#//apple_ref/doc/uid/TP40010188-CH9-SW2) – Moritz

+0

Teşekkürler @eric D., koddan geçiyorum. İşi yapacak gibi görünüyor. Yine de, keşfettiğim birçok şey var ve anlaması gereken birçok satır var. Soru sorsam sorun olur mu? Örneğin, URL ile bir AudioFile olmayan bir Audio, ancak bir audioEngine veya AudioNode nasıl yükleyebilirim? Bu kodu hiç incelediniz mi? – mlk

+0

Şahsen, pek değil, sadece bu dokümanı kaçırmış olabileceğinizi düşündüm, bu yüzden bağlantıyı yapıştırdım. Ama sorun bu değil: Şey, SO hakkında çok geniş sorular soramazsın. Ve yorumlar zaten bunun için yer değil. Mevcut kodunuzu içeren, neyi başarmaya çalıştığınızı ve nerede mücadele ettiğinizi gösteren yeni bir soru oluşturmanızı öneririm. Gönderi başına * bir * konu. Bu arada, SO'ya hoş geldiniz. :) – Moritz

cevap

5

Evet, oldukça kolaydır. Sadece bir düğüme hafifçe vurun ve arabelleği bir dosyaya kaydedin.

Maalesef bu, düğümü aracılığıyla oyununu oynamak zorunda olduğunuz anlamına gelir. AVAudioEngine'in bir ses dosyasını doğrudan diğerine aktarmama izin vereceğini umuyordum, ama görünüşe göre bu imkansız - gerçek zamanda oynamak ve işlemek zorundasınız.

+0

Teşekkürler, bu bana çok yardımcı oldu. Bir şey, eğer audioNode üzerinde musluğu kurarsanız oynamanız gerektiğini düşünmüyorum. Henüz bunu denemedim ama aslında onu kaydetmeden önce sesini oynattığım için buna ihtiyacım yok. tıpkı bir sağlık kontrolü gibi. – mlk

+0

Eh, tekrar deneyeceğim ama testlerimde aslında arabellekleri oynatmadan dosyayı kaydedemedim. – matt

1

Çevrimdışı oluşturma GenericOutput AudioUnit kullanarak benim için çalıştım. Lütfen bu bağlantıyı kontrol edin, iki, üç sesi çevrimdışı olarak yaptım ve tek bir dosyada birleştirdim. Aynı senaryodan değil, biraz fikir almanız için size yardımcı olabilir. core audio offline rendering GenericOutput

İlgili konular