2010-11-18 2 views
10

Любая помощь мне для записи и воспроизведения звука Одновременно в Iphone.Запись и воспроизведение звука Одновременно

+1

Отправить мне больше описание. Запись должна выполняться микрофоном? Насколько точны должны быть синхронизация и т. Д. Возможно, вам стоит проверить код примера Apple aurioTouch. – Vanya

ответ

9

Вы можете воспользоваться интерфейсом AVFoundation. У него есть AVAudioPlayer для воспроизведения аудиофайлов и AVAudioRecorder для записи. Вы должны помнить, что Recorder будет записываться с использованием только микрофона. Таким образом, при одновременном воспроизведении аудиофайла и записи это зависит от того, как микрофон будет воспринимать воспроизводимый звук.

15

Вы можете играть и записывать одновременно на устройствах iOS (кроме 1-го поколения Touch), используя либо Audio Unit RemoteIO, либо Audio Queue API. Это API-интерфейсы более низкого уровня, где вам приходится обрабатывать входящие буферы исходящих и входящих образцов PCM самостоятельно.

См. Пример приложения Apple aurioTouch, например, код.

+0

Доступен любой объект C или быстрый код? –

2

Пожалуйста Проверьте aurioTouch яблочный пример кода для аудио звукозаписывающих и играть одновременно

Вы также можете проверить Recording Audio on an iPhone

0

Надеются, что это помогает некоторым людям ... Я сделал приложение, которое записывает аудио, скажем, из приложение, подобное Pandora, и может воспроизводить аудио. Запуск/Воспроизведение аудио приложения, запуск AudioMic, запись, отключение звука звукового приложения, возврат и воспроизведение записанного звука с AudioMic. Ура!

https://github.com/casspangell/AudioMic

0

Для записи воспроизведения аудио файлов в прошивке, вы можете использовать рамки AVFoundation. Используйте ниже быстрый код для записи и воспроизведения аудио. Помните, что рекордер записывает звук с помощью микрофона, поэтому, пожалуйста, проверьте этот код на устройстве.

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 
} 
} 

Я испытал этот код на Xcode 7.0 & IOS 9.

Смежные вопросы