как играть с EZAudio Library - PullRequest
0 голосов
/ 01 марта 2020

Я использую библиотеку EZAudio для записи голоса и его воспроизведения. Я хочу получать каждые 20 мс записанных данных в виде NsData или [UInt8] и отправлять их на сервер, а затем воспроизводить. Я не знаю, как играть с EZAudio.

var microphone : EZMicrophone!
var output : EZOutput!
let inputDevices = EZAudioDevice.inputDevices()
let currentInputDevice = EZAudioDevice.currentInput()//this will default to the headset device or bottom microphone
let outputDevices = EZAudioDevice.outputDevices()
let currentOutputDevice = EZAudioDevice.currentOutput()//this will default to the
let streamFormat = AudioStreamBasicDescription(
            mSampleRate: 12000.0,
            mFormatID: kAudioFormatLinearPCM,
            mFormatFlags: kAudioFormatFlagIsSignedInteger,
            mBytesPerPacket: 2,
            mFramesPerPacket: 1,
            mBytesPerFrame: 2,
            mChannelsPerFrame: 1,
            mBitsPerChannel: 16,
            mReserved: 0)//microphone format.
microphone = EZMicrophone(delegate: self, with: streamFormat)
output = EZOutput(dataSource: self)

Первый вопрос: я не знаю, как установить эти 2 свойства: (mFormatID, mFormatFlags), и я предполагаю, что я установил эту AudioStreamBasicDescription для вывода. но я не уверен

  func record(){
        microphone.microphoneOn = true
        microphone.startFetchingAudio()
    }

    func play(){
        if(!output.isPlaying){
        output.startPlayback()
        }
    }

    func stopPlaying(){
        if(output.isPlaying){
            output.stopPlayback()
        }
    }

    func stop(){
        microphone.stopFetchingAudio()
        microphone.microphoneOn = false
    }
func microphone(_ microphone: EZMicrophone!,
                    hasBufferList bufferList: UnsafeMutablePointer<AudioBufferList>!,
                    withBufferSize bufferSize: UInt32,
                    withNumberOfChannels numberOfChannels: UInt32) {
        let audio =  NSData(bytes: bufferList.pointee.mBuffers.mData,
                            length: Int(bufferList.pointee.mBuffers.mDataByteSize))//NsData
        audioNSDataArray.append(audio)//NsData
}

Я знаю, что для воспроизведения голоса мне нужно заполнить этот метод, но я не могу найти как.

func output(_ output: EZOutput!,
                shouldFill audioBufferList: UnsafeMutablePointer<AudioBufferList>!,
                withNumberOfFrames frames: UInt32,
                timestamp: UnsafePointer<AudioTimeStamp>!) -> OSStatus {
        //how to playback recorded voice ???
        return noErr
}
...