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.