# RecorderManager.start(object options)

开始录音

## 支持说明

应用能力 | Android | iOS | PC | Harmony | 预览效果
---|---|---|---|---|---
小程序 | **✓** | **✓** | **X** | V7.43.0+ | 预览
网页应用 | **✓** | **✓** | **X** | V7.43.0+ | 预览

## 输入

名称 | 数据类型 | 必填 | 默认值 | 描述 | 最低版本
---|---|---|---|---|---
options | object | 否 | \- | 录音参数 | \-
&emsp;<br>∟<br>&nbsp;<br>duration | number | 否 | 60000 | 录音的时长，单位 ms，最大值 600000（10 分钟） | \-
&emsp;<br>∟<br>&nbsp;<br>sampleRate | number | 否 | 8000 | 采样率<br>**可选值**：<br>- `8000`：8000 采样率<br>- `16000`：16000 采样率<br>- `44100`：44100 采样率 | \-
&emsp;<br>∟<br>&nbsp;<br>numberOfChannels | number | 否 | 2 | 录音通道数<br>**可选值**：<br>- `1`：一个通道<br>- `2`：两个通道 | \-
&emsp;<br>∟<br>&nbsp;<br>frameSize | number | 否 | \- | 帧大小，单位 KB。如果设置了值，那么每当录音内容达到帧大小时会通过 onFrameRecorded 返回内容<br>**注意事项**：**注意**：由于iOS系统机制，iOS设备onFrameRecorded 返回内容大小会波动，不完全与frameSize大小相同 | \-
&emsp;<br>∟<br>&nbsp;<br>format | string | 否 | - Android、Harmony: `wav`<br>- iOS: `aac` | 录制文件格式。Android、Harmony 与 iOS 支持的格式有所不同<br>- Android、Harmony：仅支持 `wav`（文件后缀 .wav）<br>- iOS：支持以下取值<br>- `aac`（文件后缀 .m4a）<br>- `wav`（文件后缀 .wav） | 7.13
&emsp;<br>∟<br>&nbsp;<br>audioSource | string | 否 | - Android: `mic`<br>- iOS: `auto` | 指定录音的音频输入源。<br>**可选值**：             <br>- `auto`：自动设置，默认使用手机麦克风，插上耳麦后自动切换使用耳机麦克风，Android和iOS均支持<br>- `buildInMic`：手机麦克风，仅限 iOS  <br>- `headsetMic`：耳机麦克风，仅限 iOS   <br>- `mic`：默认为手机麦克风， 仅限 Android，具体可参考 [AudioSource](https://developer.android.com/reference/kotlin/android/media/MediaRecorder.AudioSource)。<br>- `camcorder`：适用于录制音视频内容，仅限 Android<br>- `voice_communication`：适用于实时沟通，仅限 Android<br>- `voice_recognition`：适用于语音识别，仅限 Android <br>**注意事项**：**注意**：Harmony暂不支持指定录音的音频输入源。仅支持mic | 7.42

## 输出
无

## 示例代码

```js
const recorderManager = tt.getRecorderManager();
const options = {
  duration: 100000,
  sampleRate: 44100,
  numberOfChannels: 2,
  frameSize: 50
};

recorderManager.start(options);
```

## 注意事项

在iOS设备上 start 有可能会遇到系统报错，在实现时候可以监听错误回调，进行重试逻辑。

```js

/// 假定，最多重试 3 次
  var leftRetryTimes = 3

recorderManager.onError((error) => {
     this.onRecordError(error)
  });

onRecordError(error) {
    console.log('onError:', error);
    /// 如果是start失败报错
    const _this = this
    if (error.errno === 1305003 && error.errString.includes('OperateRecorder start failed')) {
      if (this.data.leftRetryTimes > 0) {
        _this.recorderManager.stop();
        setTimeout( () => {
          console.log('retry start record, left times: ', _this.data.leftRetryTimes)
          _this.data.leftRetryTimes -= 1;
          _this.startRecord()
        }, 500)
      } else {
        console.log('retry start record failed')
      }
    }
  },

```

