首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Expo音频录制webm

Expo音频录制webm
EN

Stack Overflow用户
提问于 2018-02-02 20:33:01
回答 2查看 2K关注 0票数 12

我正在使用expo,我正在尝试使用webm输出格式( Expo.Audio.RECORDING_OPTION_ANDROID_OUTPUT_FORMAT_WEBM )在安卓上进行记录。我的问题是,我尝试了所有不同的编码器,但它们似乎都不起作用。我期望vorbis编码器能够工作( Expo.Audio.RECORDING_OPTION_ANDROID_AUDIO_ENCODER_VORBIS ),但我总是得到一个异常

代码语言:javascript
复制
    {
        "tryLoc": "root",
        "completion": {
            "type": "throw",
            "arg": {
                "framesToPop": 1,
                "code": "E_AUDIO_RECORDING",
                "message": "Start encountered an error: recording not started",
                "stack": "Error: Start encountered an error: recording not started\n    at createErrorFromErrorData (blob:http://172.16.6.80:19001/96c6e3c7-f483-40d9-a3ad-7a7114468a07:2297:17)\n    at blob:http://172.16.6.80:19001/96c6e3c7-f483-40d9-a3ad-7a7114468a07:2249:27\n    at MessageQueue.__invokeCallback (blob:http://172.16.6.80:19001/96c6e3c7-f483-40d9-a3ad-7a7114468a07:2691:18)\n    at blob:http://172.16.6.80:19001/96c6e3c7-f483-40d9-a3ad-7a7114468a07:2436:18\n    at MessageQueue.__guardSafe (blob:http://172.16.6.80:19001/96c6e3c7-f483-40d9-a3ad-7a7114468a07:2604:11)\n    at MessageQueue.invokeCallbackAndReturnFlushedQueue (blob:http://172.16.6.80:19001/96c6e3c7-f483-40d9-a3ad-7a7114468a07:2435:14)\n    at http://172.16.6.80:19001/debugger-ui/debuggerWorker.js:72:58"
            }
        }
    }

这是我正在尝试的配置:

代码语言:javascript
复制
const recording = new Audio.Recording();
debugger;
await recording.prepareToRecordAsync({
  android: {
    extension: '.webm',
    outputFormat: Audio.RECORDING_OPTION_ANDROID_OUTPUT_FORMAT_WEBM,
    audioEncoder: Audio.RECORDING_OPTION_ANDROID_AUDIO_ENCODER_VORBIS,
    sampleRate: 44100,
    numberOfChannels: 2,
    bitRate: 128000
  },
  ios: {
    extension: '.wav',
    audioQuality: Audio.RECORDING_OPTION_IOS_AUDIO_QUALITY_MAX,
    sampleRate: 44100,
    numberOfChannels: 2,
    bitRate: 128000,
    linearPCMBitDepth: 16,
    linearPCMIsBigEndian: false,
    linearPCMIsFloat: false,
  },
});

有什么想法是为什么会发生这种情况,以及我必须使用什么适当的编码器?

EN

回答 2

Stack Overflow用户

发布于 2018-02-13 14:44:04

我是在黑暗中拍摄,希望这能有所帮助。

启用音频和自定义音频模式

默认情况下,

Expo.Audio.setIsEnabledAsync(value)音频处于启用状态,但如果您希望在独立的应用程序中编写自己的音频接口,则可能需要禁用Expo音频接口。

参数值(布尔值)- true启用Expo音频,false禁用它。

如果无法为设备启用音频播放,则返回将拒绝的承诺。

Expo.Audio.setAudioModeAsync(模式)我们提供此接口来定制iOS和Android的音频体验。

这些键值对也可能有帮助。

  • prepareToRecordAsync()
  • stopAndUnloadAsync()

音频编码器列表:(*我建议使用默认设置进行调试)

audioEncoder

  • Expo.Audio.RECORDING_OPTION_ANDROID_AUDIO_ENCODER_DEFAULT
  • Expo.Audio.RECORDING_OPTION_ANDROID_AUDIO_ENCODER_AMR_NB
  • Expo.Audio.RECORDING_OPTION_ANDROID_AUDIO_ENCODER_AMR_WB
  • Expo.Audio.RECORDING_OPTION_ANDROID_AUDIO_ENCODER_AAC
  • Expo.Audio.RECORDING_OPTION_ANDROID_AUDIO_ENCODER_HE_AAC
  • Expo.Audio.RECORDING_OPTION_ANDROID_AUDIO_ENCODER_AAC_ELD
  • Expo.Audio.RECORDING_OPTION_ANDROID_AUDIO_ENCODER_VORBIS

Referenceexpo.io (2018年2月13日)。

注意*.webm (只能在Android4.0或更高版本中流媒体)

Referencedeveloper.android.com (2018年2月13日)。

尝试使用下面的代码,高质量和低质量以及android和ios:

代码语言:javascript
复制
  export const RECORDING_OPTIONS_PRESET_HIGH_QUALITY: RecordingOptions = {
  android: {
    extension: '.m4a',
    outputFormat: RECORDING_OPTION_ANDROID_OUTPUT_FORMAT_MPEG_4,
    audioEncoder: RECORDING_OPTION_ANDROID_AUDIO_ENCODER_AAC,
    sampleRate: 44100,
    numberOfChannels: 2,
    bitRate: 128000,
  },
  ios: {
    extension: '.caf',
    audioQuality: RECORDING_OPTION_IOS_AUDIO_QUALITY_MAX,
    sampleRate: 44100,
    numberOfChannels: 2,
    bitRate: 128000,
    linearPCMBitDepth: 16,
    linearPCMIsBigEndian: false,
    linearPCMIsFloat: false,
  },
};

export const RECORDING_OPTIONS_PRESET_LOW_QUALITY: RecordingOptions = {
  android: {
    extension: '.3gp',
    outputFormat: RECORDING_OPTION_ANDROID_OUTPUT_FORMAT_THREE_GPP,
    audioEncoder: RECORDING_OPTION_ANDROID_AUDIO_ENCODER_AMR_NB,
    sampleRate: 44100,
    numberOfChannels: 2,
    bitRate: 128000,
  },
  ios: {
    extension: '.caf',
    audioQuality: RECORDING_OPTION_IOS_AUDIO_QUALITY_MIN,
    sampleRate: 44100,
    numberOfChannels: 2,
    bitRate: 128000,
    linearPCMBitDepth: 16,
    linearPCMIsBigEndian: false,
    linearPCMIsFloat: false,
  },
};

Referenceexpo.io (2018年2月13日)。

票数 0
EN

Stack Overflow用户

发布于 2021-02-17 01:56:40

我发现了两个问题。其中之一是世博会的一个神秘问题,如果我复制文档(源代码)中的高清晰度并在本地使用它,它将无法注册。我最终回到了他们的一个例子,只做了一个简单的开始/停止记录,并继续工作,没有任何问题。我深入研究了一段时间,我的结论是,必须严格遵循初始化序列,才能接受这些设置的初始化。

一旦通过前面的问题,我发现下面的工作与谷歌语音到文本。AWS表示他们也接受AMR音频。

代码语言:javascript
复制
    android: {
      extension: '.amr',
      outputFormat: Audio.RECORDING_OPTION_ANDROID_OUTPUT_FORMAT_AMR_WB,
      audioEncoder: Audio.RECORDING_OPTION_ANDROID_AUDIO_ENCODER_AMR_WB,
      sampleRate: 16000,
      numberOfChannels: 1,
      bitRate: 128000,
    },
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48582785

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档