2016-10-31 2 views
0

Я бил головой о проблему в течение последних нескольких дней. Вот что я пытаюсь выполнить:Как настроить ORKOrderedTask с несколькими ORKAudioSteps в ResearchKit?

Я хотел бы представить ORKOrderedTask, состоящий из нескольких AudioStep, каждый шаг показывает предложение, которое пользователь произнесет. Конечно, ORKOrderedTask.audioTask отлично, но эта предварительно сконфигурированная задача дает только одно звуковое приглашение. Я хочу, чтобы пользователь мог записать предложение, нажать следующий, записать следующий, нажать следующий и т. Д.

Проблема, с которой я столкнулся: Когда я пытаюсь реализовать свою собственную OrderedTask с несколькими ORKAudioSteps , шаг всегда сообщает «TOO LOUD» независимо от того, что я делаю, с формой волны, отображающей полные красные полосы.

Соответствующий код:

var steps = [ORKStep]() 

let instructionStep = ORKInstructionStep(identifier: "IntroStep") 
instructionStep.title = "Speech Task" 
instructionStep.text = "Placeholder" 
steps += [instructionStep] 

let countdownStep = ORKCountdownStep(identifier: "CountdownStep") 
countdownStep.stepDuration = 5 
steps += [countdownStep] 

let recordingSettings = [ 
    AVFormatIDKey : kAudioFormatAppleLossless, 
    AVNumberOfChannelsKey : 2, 
    AVSampleRateKey: 44100.0 
] as [String : Any] 


for (index, sentence) in sentences.enumerated() { 
    let audioStep = ORKAudioStep(identifier: "AudioStep\(index)") 
    audioStep.title = sentence 
    audioStep.stepDuration = 5 
    audioStep.shouldContinueOnFinish = true; 
    let config = ORKAudioRecorderConfiguration(identifier: "Recorder\(index)", recorderSettings: recordingSettings) 
    audioStep.recorderConfigurations?.append(config) 
    steps += [audioStep] 
} 

return ORKOrderedTask(identifier: "SpeechTask", steps: steps) 

// And the viewController creation function elsewhere in the application 
func presentTask(task: ORKOrderedTask) { 
    let taskViewController = ORKTaskViewController(task: task, taskRun: nil) 
    taskViewController.outputDirectory = URL(fileURLWithPath: NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)[0]) 
    taskViewController.delegate = self 
    self.present(taskViewController, animated: true, completion: nil) 
} 

(Приговоры это просто массив строк подсказок членов предложения)

Мои мысли: Я подозреваю, что эта ошибка связана с тем, как я работат ь записи или выходной каталог. Каталог вывода назначается в ViewController, которому задан этот OrderedTask. Я использовал ORKOrderedTask.audioTask в ORKOrderedTask.m как ссылку для создания ORKAudioStep, но, очевидно, я делаю то, что делает Recorder несчастным.

Спасибо за ваше время.

ответ

0

Я решил проблему, используя приведенный ниже код. Обратите внимание на преобразование UInt для задания AVFormatIDKey и записи.

let recordingSettings = [ 
    AVFormatIDKey : UInt(kAudioFormatAppleLossless), 
    AVNumberOfChannelsKey : 2, 
    AVSampleRateKey: 44100.0 
] as [String : Any] 


for (index, sentence) in sentences.enumerated() { 
    let countdownStep = ORKCountdownStep(identifier: "CountdownStep\(index)") 
    countdownStep.stepDuration = 5 
    steps += [countdownStep] 

    let audioStep = ORKAudioStep(identifier: "AudioStep\(index)") 
    audioStep.title = sentence 
    audioStep.stepDuration = 5 
    audioStep.shouldContinueOnFinish = false; 
    let config = ORKAudioRecorderConfiguration(identifier: "audio\(index)", recorderSettings: recordingSettings) 
    audioStep.recorderConfigurations = [config] 

    steps += [audioStep] 
} 

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

  • Нет связанных вопросов^_^