Quelqu'un aidez-moi à inscrire et à jouer audio simultanément sur iPhone. p>
3 Réponses :
Vous pouvez utiliser l'utilisation du cadre d'aviverse. Il a Avadiaplayer de jouer audio et Avaudorecorder à enregistrer. Vous devez garder à l'esprit que l'enregistreur enregistrera uniquement l'utilisation de micro. Donc, avec le simultant qui jouant un fichier audio et l'enregistrement dépend de la manière dont le MIC perçoit le son joué. p>
Veuillez vérifier AurioTouch Code d'exemple Apple pour l'enregistrement audio-and-play simultanément p>
Vous pouvez également vérifier Enregistrement de l'audio sur un iPhone P >
Pour enregistrer une lecture des fichiers audio dans iOS, vous pouvez utiliser un cadre d'avivervance. Utilisez le code SWIFT ci-dessous pour enregistrer et lire les audios. N'oubliez pas que l'enregistreur enregistrera l'audio avec l'utilisation de micro, veuillez donc tester ce code sur le périphérique.
import UIKit import AVFoundation extension String { func stringByAppendingPathComponent(path: String) -> String { let nsSt = self as NSString return nsSt.stringByAppendingPathComponent(path) } } class ViewController: UIViewController, AVAudioPlayerDelegate, AVAudioRecorderDelegate{ var audioPlayer : AVAudioPlayer! var audioRecorder : AVAudioRecorder! @IBOutlet var recordButton : UIButton! @IBOutlet var playButton : UIButton! @IBOutlet var stopButton : UIButton! override func viewDidLoad() { super.viewDidLoad() self.recordButton.enabled = true self.playButton.enabled = false self.stopButton.enabled = false } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() } //MARK: UIButton action methods @IBAction func playButtonClicked(sender : AnyObject){ let dispatchQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0) dispatch_async(dispatchQueue, { if let data = NSData(contentsOfFile: self.audioFilePath()) { do{ self.audioPlayer = try AVAudioPlayer(data: data) self.audioPlayer.delegate = self self.audioPlayer.prepareToPlay() self.audioPlayer.play() } catch{ print("\(error)") } } }); } @IBAction func stopButtonClicked(sender : AnyObject){ if let player = self.audioPlayer{ player.stop() } if let record = self.audioRecorder{ record.stop() let session = AVAudioSession.sharedInstance() do{ try session.setActive(false) } catch{ print("\(error)") } } } @IBAction func recordButtonClicked(sender : AnyObject){ let session = AVAudioSession.sharedInstance() do{ try session.setCategory(AVAudioSessionCategoryPlayAndRecord) try session.setActive(true) session.requestRecordPermission({ (allowed : Bool) -> Void in if allowed { self.startRecording() } else{ print("We don't have request permission for recording.") } }) } catch{ print("\(error)") } } func startRecording(){ self.playButton.enabled = false self.recordButton.enabled = false self.stopButton.enabled = true do{ let fileURL = NSURL(string: self.audioFilePath())! self.audioRecorder = try AVAudioRecorder(URL: fileURL, settings: self.audioRecorderSettings() as! [String : AnyObject]) if let recorder = self.audioRecorder{ recorder.delegate = self if recorder.record() && recorder.prepareToRecord(){ print("Audio recording started successfully") } } } catch{ print("\(error)") } } func audioFilePath() -> String{ let path = NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory.DocumentDirectory, NSSearchPathDomainMask.UserDomainMask, true)[0] let filePath = path.stringByAppendingPathComponent("test.caf") as String return filePath } func audioRecorderSettings() -> NSDictionary{ let settings = [AVFormatIDKey : NSNumber(int: Int32(kAudioFormatMPEG4AAC)), AVSampleRateKey : NSNumber(float: Float(16000.0)), AVNumberOfChannelsKey : NSNumber(int: 1), AVEncoderAudioQualityKey : NSNumber(int: Int32(AVAudioQuality.Medium.rawValue))] return settings } //MARK: AVAudioPlayerDelegate methods func audioPlayerDidFinishPlaying(player: AVAudioPlayer, successfully flag: Bool) { if flag == true{ print("Player stops playing successfully") } else{ print("Player interrupted") } self.recordButton.enabled = true self.playButton.enabled = false self.stopButton.enabled = false } //MARK: AVAudioRecorderDelegate methods func audioRecorderDidFinishRecording(recorder: AVAudioRecorder, successfully flag: Bool) { if flag == true{ print("Recording stops successfully") } else{ print("Stopping recording failed") } self.playButton.enabled = true self.recordButton.enabled = false self.stopButton.enabled = false } }
Je souhaite enregistrer l'audio de sortie (je veux dire audio audio en streaming en direct)
Dans iOS 12.4.1 B> Cette solution ne démarre pas Enregistrement lorsque l'audio joue en arrière-plan (donc lorsque l'application n'est pas au premier plan)
Envoyez-moi plus de description. L'enregistrement doit être fait par micro? La synchronisation est-elle précise, etc. Peut-être que vous devriez peut-être consulter le code d'exemple Apple AurioTouch.
Vous pouvez jouer et enregistrer simultanément sur des périphériques iOS (à l'exception de la 1ère Touch Gen) à l'aide de la télédommande audio ou de l'API de la file d'attente audio. Ce sont des API de niveau inférieur où vous devez gérer les tampons entrants des échantillons PCM sortants et entrants vous-même. Voir l'application d'exemple d'AurioTouch d'Apple par exemple du code.