sta*_*kas 9 audio android audio-recording react-native expo
我正在使用expo,我试图通过使用webm输出格式(Expo.Audio.RECORDING_OPTION_ANDROID_OUTPUT_FORMAT_WEBM)来记录android .我的问题是我已经尝试了所有不同的编码器,但它们似乎都没有用.我期待vorbis编码器工作(Expo.Audio.RECORDING_OPTION_ANDROID_AUDIO_ENCODER_VORBIS)但我总是得到一个例外
{
"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"
}
}
}
Run Code Online (Sandbox Code Playgroud)
这是我正在尝试的配置:
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,
},
});
Run Code Online (Sandbox Code Playgroud)
关于为什么会发生这种情况的想法以及我必须使用的适当编码器是什么?
我在黑暗中拍摄,希望这可能有所帮助。
\n\n启用音频并自定义音频模式
\n\n\n\n\nExpo.Audio.setIsEnabledAsync(value) 默认情况下启用音频,但如果您想在独立的应用程序中编写自己的音频 API,则可能需要禁用 Expo 音频 API。
\n\n参数值(布尔值) \xe2\x80\x94 true 启用 Expo Audio, false\n 禁用它。
\n\n返回一个 Promise,如果无法为设备启用音频播放,该 Promise 将被拒绝。
\n\nExpo.Audio.setAudioModeAsync(mode) 我们提供此 API 来自定义 iOS 和 Android 上的音频体验。
\n
这些键值对也可能有帮助。
\n\n音频编码器列表:(*我建议使用默认值只是为了调试它)
\n\n音频编码器:
\n\nExpo.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
参考:expo.io(2018 年 2 月 13 日)。
\n\n注意 *.webm(仅在 Android 4.0 及更高版本中可流式传输)
\n\n参考:developer.android.com(2018 年 2 月 13 日)。
\n\n尝试使用下面的代码,高低质量以及 android 和 ios:
\n\n export const RECORDING_OPTIONS_PRESET_HIGH_QUALITY: RecordingOptions = {\n android: {\n extension: \'.m4a\',\n outputFormat: RECORDING_OPTION_ANDROID_OUTPUT_FORMAT_MPEG_4,\n audioEncoder: RECORDING_OPTION_ANDROID_AUDIO_ENCODER_AAC,\n sampleRate: 44100,\n numberOfChannels: 2,\n bitRate: 128000,\n },\n ios: {\n extension: \'.caf\',\n audioQuality: RECORDING_OPTION_IOS_AUDIO_QUALITY_MAX,\n sampleRate: 44100,\n numberOfChannels: 2,\n bitRate: 128000,\n linearPCMBitDepth: 16,\n linearPCMIsBigEndian: false,\n linearPCMIsFloat: false,\n },\n};\n\nexport const RECORDING_OPTIONS_PRESET_LOW_QUALITY: RecordingOptions = {\n android: {\n extension: \'.3gp\',\n outputFormat: RECORDING_OPTION_ANDROID_OUTPUT_FORMAT_THREE_GPP,\n audioEncoder: RECORDING_OPTION_ANDROID_AUDIO_ENCODER_AMR_NB,\n sampleRate: 44100,\n numberOfChannels: 2,\n bitRate: 128000,\n },\n ios: {\n extension: \'.caf\',\n audioQuality: RECORDING_OPTION_IOS_AUDIO_QUALITY_MIN,\n sampleRate: 44100,\n numberOfChannels: 2,\n bitRate: 128000,\n linearPCMBitDepth: 16,\n linearPCMIsBigEndian: false,\n linearPCMIsFloat: false,\n },\n};\nRun Code Online (Sandbox Code Playgroud)\n\n参考:expo.io(2018 年 2 月 13 日)。
\n