Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

493
Views
Cómo cambiar la frecuencia de muestreo del micrófono de un iPhone

Estoy trabajando para agregar una función a una aplicación existente, para tomar la entrada de audio del micrófono del dispositivo, convertirla al dominio de frecuencia a través de una FFT y enviarla a un modelo coreML. Estoy usando un AVCaptureDevice estándar:

 guard let microphone = AVCaptureDevice.default(.builtInMicrophone, for: .audio, position: .unspecified), let microphoneInput = try? AVCaptureDeviceInput(device: microphone) else { fatalError("Can't create microphone.") }

El problema es que necesito que se defina una frecuencia de muestreo personalizada para el micrófono. Siguiendo la documentación de Apple, setPreferredSampleRate (enlace) debería poder hacerlo en un rango entre 8000-48000 Hz. Sin embargo, independientemente del valor que elija, la frecuencia de muestreo no cambiará y no arrojará ningún error:

 print("Microphone sample rate: ", AVAudioSession.sharedInstance().sampleRate) do { var flag = try AVAudioSession.sharedInstance().setPreferredSampleRate(20000) } catch { print("Unable to set microphone sampling rate!") } print("Microphone sample rate: ", AVAudioSession.sharedInstance().sampleRate)

Producción:

 Microphone sample rate: 48000.0 Microphone sample rate: 48000.0

¿Cómo podría definir la frecuencia de muestreo para dispositivos iOS?

EDITAR:

Siguiendo la sugerencia de usar AVAudioConverter para volver a muestrear la entrada del micrófono, cuál es la forma más eficiente de hacerlo, considerando que estoy usando AVCaptureAudioDataOutputSampleBufferDelegate y el método captureOutput correspondiente para recopilar la entrada de audio sin procesar del micrófono:

 extension AudioSpectrogram: AVCaptureAudioDataOutputSampleBufferDelegate { public func captureOutput(_ output: AVCaptureOutput, didOutput sampleBuffer: CMSampleBuffer, from connection: AVCaptureConnection) { var audioBufferList = AudioBufferList() var blockBuffer: CMBlockBuffer? CMSampleBufferGetAudioBufferListWithRetainedBlockBuffer( sampleBuffer, bufferListSizeNeededOut: nil, bufferListOut: &audioBufferList, bufferListSize: MemoryLayout.stride(ofValue: audioBufferList), blockBufferAllocator: nil, blockBufferMemoryAllocator: nil, flags: kCMSampleBufferFlag_AudioBufferList_Assure16ByteAlignment, blockBufferOut: &blockBuffer) guard let data = audioBufferList.mBuffers.mData else { return } if self.rawAudioData.count < self.sampleCount * 2 { let actualSampleCount = CMSampleBufferGetNumSamples(sampleBuffer) let ptr = data.bindMemory(to: Int16.self, capacity: actualSampleCount) let buf = UnsafeBufferPointer(start: ptr, count: actualSampleCount) rawAudioData.append(contentsOf: Array(buf)) } while self.rawAudioData.count >= self.sampleCount { let dataToProcess = Array(self.rawAudioData[0 ..< self.sampleCount]) self.rawAudioData.removeFirst(self.hopCount) self.processData(values: dataToProcess) } }
over 4 years ago · Santiago Trujillo
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!