N'importe qui m'aide à enregistrer et jouer de l'audio simultanément dans Iphone.Enregistrer et lire de l'audio simultanément
Répondre
Vous pouvez utiliser le framework AVFoundation. Il a AVAudioPlayer pour lire les fichiers audio et AVAudioRecorder pour enregistrer. Vous devez garder à l'esprit que Recorder enregistrera avec l'utilisation du micro seulement. La lecture simultanée d'un fichier audio et de l'enregistrement dépend de la façon dont le micro perçoit le son lu.
Vous pouvez lire et enregistrer simultanément sur des appareils iOS (à l'exception du Touch de 1ère génération) à l'aide de l'AudioIO RemoteIO ou de l'API Audio Queue. Il s'agit d'API de niveau inférieur dans lesquelles vous devez gérer vous-même les buffers entrants d'échantillons PCM entrants et sortants.
Consultez l'application exemple aurioTouch d'Apple pour un exemple de code.
N'importe quel objectif C ou code Swift disponible? –
S'il vous plaît Vérifiez aurioTouch exemple de code de pomme pour l'enregistrement et de lecture audio simultanément
Vous pouvez également consulter Recording Audio on an iPhone
Hope this helps certaines personnes ... J'ai fait une application qui enregistre l'audio, par exemple à partir d'un application comme Pandora et peut lire l'audio. Exécuter/lire une application audio, exécuter AudioMic, enregistrer, désactiver le son de l'application audio, revenir en arrière et lire l'audio enregistré depuis AudioMic. Yay!
Pour enregistrer un lire les fichiers audio dans iOS, vous pouvez utiliser le cadre AVFoundation. Utilisez ci-dessous code Swift pour enregistrer et lire les audios. Rappelez-vous que l'enregistreur va enregistrer l'audio avec l'utilisation de micro, donc s'il vous plaît tester ce code sur l'appareil.
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
}
}
J'avais testé ce code sur Xcode 7.0 & iOS 9.
Envoyez-moi une description plus. L'enregistrement devrait être fait par micro? Quelle précision doit être la synchronisation, etc. Peut-être que vous devriez vérifier le code d'échantillon de pomme aurioTouch. – Vanya