| 
 | 
 
基本录音代码实现: 
- import com.arthenica.ffmpegkit.FFmpegKit
 
 - import com.arthenica.ffmpegkit.ReturnCode
 
  
- class AudioRecorder {
 
 -     private var isRecording = false
 
 -     
 
 -     fun startRecording(outputPath: String) {
 
 -         if (isRecording) return
 
 -         
 
 -         // FFmpeg 命令录制音频
 
 -         val command = "-f android_camera -i 0 -acodec aac $outputPath"
 
 -         
 
 -         FFmpegKit.executeAsync(command) { session ->
 
 -             val returnCode = session.returnCode
 
 -             
 
 -             if (ReturnCode.isSuccess(returnCode)) {
 
 -                 // 录制成功
 
 -                 isRecording = false
 
 -             } else if (ReturnCode.isCancel(returnCode)) {
 
 -                 // 录制被取消
 
 -                 isRecording = false
 
 -             } else {
 
 -                 // 录制失败
 
 -                 isRecording = false
 
 -             }
 
 -         }
 
 -         
 
 -         isRecording = true
 
 -     }
 
 -     
 
 -     fun stopRecording() {
 
 -         if (isRecording) {
 
 -             FFmpegKit.cancel()
 
 -         }
 
 -     }
 
 - }
 
 
  复制代码 更完整的录音实现: 
- import android.Manifest
 
 - import android.content.pm.PackageManager
 
 - import android.os.Build
 
 - import androidx.appcompat.app.AppCompatActivity
 
 - import androidx.core.app.ActivityCompat
 
 - import com.arthenica.ffmpegkit.FFmpegKit
 
 - import com.arthenica.ffmpegkit.FFmpegSession
 
 - import com.arthenica.ffmpegkit.ReturnCode
 
 - import java.io.File
 
  
- class MainActivity : AppCompatActivity() {
 
 -     private var recordingSession: FFmpegSession? = null
 
 -     private val PERMISSION_REQUEST_CODE = 1001
 
 -     
 
 -     private fun checkAndRequestPermissions() {
 
 -         val permissions = mutableListOf(Manifest.permission.RECORD_AUDIO)
 
 -         
 
 -         if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.P) {
 
 -             permissions.add(Manifest.permission.WRITE_EXTERNAL_STORAGE)
 
 -         }
 
 -         
 
 -         if (permissions.any { 
 
 -             ActivityCompat.checkSelfPermission(this, it) != PackageManager.PERMISSION_GRANTED 
 
 -         }) {
 
 -             ActivityCompat.requestPermissions(this, permissions.toTypedArray(), PERMISSION_REQUEST_CODE)
 
 -         } else {
 
 -             startAudioRecording()
 
 -         }
 
 -     }
 
 -     
 
 -     private fun startAudioRecording() {
 
 -         val outputFile = File(getExternalFilesDir(null), "recording.aac").absolutePath
 
 -         
 
 -         // 使用 FFmpeg 录制音频命令
 
 -         val command = buildString {
 
 -             append("-f avfoundation ")  // iOS/macOS
 
 -             append("-i :0 ")            // 默认音频输入设备
 
 -             append("-acodec aac ")      // 音频编码器
 
 -             append("-ar 44100 ")        // 采样率
 
 -             append("-ac 2 ")            // 双声道
 
 -             append("-b:a 128k ")        // 音频比特率
 
 -             append(outputFile)
 
 -         }
 
 -         
 
 -         // Android 平台可能需要不同的命令格式
 
 -         val androidCommand = "-f android_camera -i 0 -acodec aac -ar 44100 -ac 1 $outputFile"
 
 -         
 
 -         recordingSession = FFmpegKit.executeAsync(androidCommand) { session ->
 
 -             if (ReturnCode.isSuccess(session.returnCode)) {
 
 -                 // 录制完成
 
 -                 runOnUiThread {
 
 -                     // 处理录制完成的逻辑
 
 -                 }
 
 -             } else {
 
 -                 // 录制出错
 
 -                 runOnUiThread {
 
 -                     // 处理错误
 
 -                 }
 
 -             }
 
 -         }
 
 -     }
 
 -     
 
 -     private fun stopAudioRecording() {
 
 -         recordingSession?.let {
 
 -             FFmpegKit.cancel(it.sessionId)
 
 -         }
 
 -     }
 
 -     
 
 -     override fun onRequestPermissionsResult(
 
 -         requestCode: Int,
 
 -         permissions: Array<out String>,
 
 -         grantResults: IntArray
 
 -     ) {
 
 -         super.onRequestPermissionsResult(requestCode, permissions, grantResults)
 
 -         
 
 -         if (requestCode == PERMISSION_REQUEST_CODE) {
 
 -             if (grantResults.isNotEmpty() && grantResults.all { it == PackageManager.PERMISSION_GRANTED }) {
 
 -                 startAudioRecording()
 
 -             }
 
 -         }
 
 -     }
 
 - }
 
 
  复制代码 自定义录音参数: 
- class AudioRecorderConfig {
 
 -     // 不同质量的录音配置
 
 -     fun getRecordingCommand(
 
 -         outputPath: String,
 
 -         quality: RecordingQuality = RecordingQuality.MEDIUM
 
 -     ): String {
 
 -         return when (quality) {
 
 -             RecordingQuality.HIGH -> {
 
 -                 "-f android_camera -i 0 -acodec aac -ar 48000 -ac 2 -b:a 192k $outputPath"
 
 -             }
 
 -             RecordingQuality.MEDIUM -> {
 
 -                 "-f android_camera -i 0 -acodec aac -ar 44100 -ac 2 -b:a 128k $outputPath"
 
 -             }
 
 -             RecordingQuality.LOW -> {
 
 -                 "-f android_camera -i 0 -acodec aac -ar 22050 -ac 1 -b:a 64k $outputPath"
 
 -             }
 
 -         }
 
 -     }
 
 -     
 
 -     enum class RecordingQuality {
 
 -         HIGH, MEDIUM, LOW
 
 -     }
 
 - }
 
 
  复制代码 
 
注意事项 
1、平台差异: Android 和 iOS 平台的 FFmpeg 命令参数可能不同 
2、权限处理: 确保获取了必要的录音权限 
3、设备兼容性: 不同设备的音频输入格式可能不同 
4、性能考虑: 长时间录音可能影响设备性能 
5、存储管理: 注意录音文件的存储位置和大小管理 
通过以上代码,您可以使用 ffmpeg-kit 实现麦克风录音功能,并根据需要调整录音质量和格式。 
 
 |   
 
 
 
 |