Как записать аудиопоток для сохранения его в файл / swift 4.2

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

Declare

owner VARCHAR2(1000);
tbl VARCHAR2(1000);
cnt number;
ct number;
str_sql varchar2(1000);
reason varchar2(1000);
x varchar2(1000):='%string_to_be_searched%';

cursor csr is select owner,table_name 
from all_tables where table_name ='table_name';

type rec1 is record (
ct VARCHAR2(1000));

type rec is record (
owner VARCHAR2(1000):='',
table_name VARCHAR2(1000):='');

rec2 rec;
rec3 rec1;
begin

for rec2 in csr loop

--str_sql:= 'select count(*) from '||rec.owner||'.'||rec.table_name||' where CTV_REMARKS like '||chr(39)||x||chr(39);
--dbms_output.put_line(str_sql);
--execute immediate str_sql

execute immediate 'select count(*) from '||rec2.owner||'.'||rec2.table_name||' where column_name like '||chr(39)||x||chr(39)
into rec3;
if rec3.ct <> 0 then
dbms_output.put_line(rec2.owner||','||rec3.ct);
else null;
end if;
end loop;
end;
0
задан NicoCraft 16 January 2019 в 17:18
поделиться

2 ответа

Используйте AVAudioRecorder для записи:

private var audioRecorder: AVAudioRecorder!

После того, как вы объявили аудиорекордер, вы можете написать метод записи:

func startRecording() throws {
        guard let newFileURL = createURLForNewRecord() else {
            throw RecordingServiceError.canNotCreatePath
        }
        do {
            currentFileURL = newFileURL
            audioRecorder = try AVAudioRecorder(url: newFileURL,
                                                settings: [AVFormatIDKey:Int(kAudioFormatMPEG4AAC),
                                                           AVSampleRateKey: 8000,
                                                           AVNumberOfChannelsKey: 1,
                                                           AVEncoderAudioQualityKey: AVAudioQuality.min.rawValue])
            audioRecorder.delegate = self
            audioRecorder.prepareToRecord()
            audioRecorder.record(forDuration: TimeConstants.recordDuration)
        } catch let error {
            print(error)
        }
}

И использовать некоторые вспомогательные методы и структуры:

enum RecordingServiceError: String, Error {
    case canNotCreatePath = "Can not create path for new recording"
}

private func createURLForNewRecord() -> URL? {
        guard let appGroupFolderUrl = FileManager.getAppFolderURL() else {
            return nil
        }

        let fileNamePrefix = DateFormatter.stringFromDate(Date())
        let fullFileName = "Record_" + fileNamePrefix + ".m4a"
        let newRecordFileName = appGroupFolderUrl.appendingPathComponent(fullFileName)
        return newRecordFileName
}

extension FileManager {
    class func getAppFolderURL() -> URL? {
        return FileManager.default.containerURL(forSecurityApplicationGroupIdentifier: "you app bundle")
    }
}
0
ответ дан jMelvins 16 January 2019 в 17:18
поделиться

Мне было очень тяжело с этим, поэтому я отправляю ответ.

Не забудьте добавить эти строки в ваш список информации: предыдущему контроллеру:

import Foundation
import UIKit
import Speech

class SpeechToTextViewController: UIViewController {

@IBOutlet weak var animationView: UIView!
@IBOutlet weak var circleView: UIView!
@IBOutlet weak var micImage: UIImageView!
@IBOutlet weak var listeningLabel: UILabel!
@IBOutlet weak var buttonStartView: UIView!
@IBOutlet weak var cancelRecordingButton: UIButton!
@IBOutlet weak var stopRecordingButton: UIButton!
@IBOutlet weak var startRecordingButton: UIButton!

private let audioEngine = AVAudioEngine()
private let speechRecognizer = SFSpeechRecognizer(locale: Locale.init(identifier:"en-US"))
private var recognitionRequest: SFSpeechAudioBufferRecognitionRequest!
private var recognitionTask: SFSpeechRecognitionTask?
private var isRecording: Bool = false

var delegate: SpeechToTextViewDelegate?

override func viewDidLoad() {
    super.viewDidLoad()
    self.view.backgroundColor = UIColor(white: 1.0, alpha: 0.25)
    self.stopRecordingButton.isHidden = true
    self.listeningLabel.isHidden = true
}

@IBAction func startStopRecording(_ sender: Any) {
    isRecording = !isRecording
    if isRecording && !audioEngine.isRunning {
        self.cancelRecordingButton.isHidden = true
        self.startRecordingButton.isHidden = true
        self.stopRecordingButton.isHidden = false
        self.listeningLabel.isHidden = false
        UIView.animate(withDuration: 1, animations: {}) { _ in
            UIView.animate(withDuration: 1, delay: 0.25, options: [.autoreverse, .repeat], animations: {
                self.circleView.transform = CGAffineTransform(scaleX: 1.5, y: 1.5)
            })
        }
        do {
            try recordSpeech()
        } catch {
            print(error)
        }
    } else {
        self.listeningLabel.isHidden = true
        stopRecording()
    }
}

func recordSpeech() throws {
    recognitionRequest = SFSpeechAudioBufferRecognitionRequest()
    let node = audioEngine.inputNode
    let recordingFormat = node.outputFormat(forBus: 0)
    node.installTap(onBus: 0, bufferSize: 1024, format: recordingFormat) {buffer, _ in
        self.recognitionRequest.append(buffer)
    }
    audioEngine.prepare()
    try audioEngine.start()
    guard let myRecognizer = SFSpeechRecognizer() else {
        print("myRecognizer is unable to be created")
        return
    }
    if !myRecognizer.isAvailable
    {
        print("myRecognizer is not available")
        return
    }
    recognitionTask = speechRecognizer?.recognitionTask(with: recognitionRequest, resultHandler: { result, error in
        var isFinal = false
        if let result = result
        {
            isFinal = result.isFinal
            self.delegate?.appendMessage(result.bestTranscription.formattedString)
        }
        if error != nil || isFinal {
            if error != nil {
                print("error trying to capture speech to text")
                print(error!)
            }
            self.stopRecording()
        }
    })
}

func stopRecording() {
    if audioEngine.isRunning {
        self.audioEngine.stop()
        self.recognitionRequest.endAudio()
        // Cancel the previous task if it's running
        if let recognitionTask = recognitionTask {
            recognitionTask.cancel()
            self.recognitionTask = nil
        }
    }
    delegate?.doneTalking()
    self.dismiss(animated: true, completion: nil)
}

@IBAction func cancelRecording(_ sender: Any) {
    delegate?.doneTalking()
    self.dismiss(animated: true, completion: nil)
}

}

0
ответ дан Droid Chris 16 January 2019 в 17:18
поделиться