Tôi đã xem xét tài liệu Swift để lưu đầu ra âm thanh từ AVAudioEngine nhưng tôi không thể tìm thấy bất kỳ mẹo hữu ích nào.
Bất kỳ đề xuất nào?SWIFT - Có thể lưu âm thanh từ AVAudioEngine hoặc từ AudioPlayerNode không? Nếu có, làm thế nào?
Giải pháp Tôi tìm thấy một cách để giải quyết câu trả lời của Matt. Dưới đây là một số mẫu mã như thế nào để lưu một âm thanh sau khi đi qua nó thông qua một AVAudioEngine (tôi nghĩ rằng về mặt kỹ thuật nó trước)
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")
}
}
Hope this helps!
Một vấn đề để giải quyết:
Đôi khi, outputNode của bạn là ngắn hơn so với đầu vào: nếu bạn đẩy nhanh tốc độ thời gian bằng 2, âm thanh của bạn sẽ ngắn hơn 2 lần. Đây là vấn đề mà tôi đang gặp phải vì điều kiện lưu tệp của tôi là (dòng 10)
if(newAudio.length) < (self.audioFile.length)//audiofile being the original(long) audio and newAudio being the new changed (shorter) audio.
Mọi trợ giúp ở đây?
Ở đây: [Tài liệu của Apple xuất từ AV] (https://developer.apple.com/library/prerelease/ios/documentation/AudioVideo/Conceptual/AVFoundationPG/Articles/05_Export.html#//apple_ref/doc/uid/TP40010188-CH9-SW2) – Moritz
Cảm ơn @eric D., tôi đang xem xét mã. Có vẻ như nó sẽ thực hiện công việc. Tuy nhiên, có rất nhiều điều tôi đang khám phá và nhiều dòng tôi phải hiểu. Có ổn không nếu tôi nêu lên câu hỏi? Ví dụ, làm thế nào tôi có thể tải một tài sản không phải là một AudioFile với URL nhưng một audioEngine hoặc AudioNode? Bạn đã bao giờ trải qua mã này chưa? – mlk
Cá nhân, không thực sự, tôi chỉ nghĩ rằng bạn có thể đã bỏ lỡ tài liệu này, vì vậy tôi đã dán liên kết. Nhưng đó không phải là vấn đề: vấn đề là bạn không thể hỏi những câu hỏi quá rộng về SO. Và bình luận không phải là nơi cho điều này anyway. Tôi đề nghị bạn tạo một câu hỏi mới bao gồm mã hiện tại của bạn, cho thấy những gì bạn cố gắng đạt được và nơi bạn đấu tranh, hoặc bất cứ điều gì như thế. Oh, và * one * chủ đề cho mỗi bài đăng. Chào mừng bạn đến với SO, nhân tiện. :) – Moritz