I'm getting this back error message back from openai's transcription endpoint
message: "Invalid file format. Supported formats: ['m4a', 'mp3', 'webm', 'mp4', 'mpga', 'wav', 'mpeg']"
Here is my code:
// needed for IoS
if (audioPermission) {
await Audio.setAudioModeAsync({
allowsRecordingIOS: true,
playsInSilentModeIOS: true,
});
}
Audio.IOSOutputFormat;
const newRecording = new Audio.Recording();
const recordingOptions = {
ios: {
extension: '.mp4', // Specify the audio file extension,
audioQuality: Audio.RECORDING_OPTION_IOS_AUDIO_QUALITY_HIGH, // Specify the audio quality
},
android: {
extension: '.mp4', // Specify the audio file extension,
},
};
console.log('Starting Recording');
await newRecording.prepareToRecordAsync(recordingOptions);
await newRecording.startAsync();
console.log('Stopping recording..');
await recording.stopAndUnloadAsync();
const recordingUri = recording.getURI();
console.log('Recording stopped and stored at URI', recordingUri);
console.log('OPENAI_API_KEY', OPENAI_API_KEY);
// Create a file name for the new MP4 recording
const fileName = `recording-${Date.now()}.mp4`;
// Calls openai translations endpoint
try {
const url = 'https://api.openai.com/v1/audio/transcriptions';
const headers = {
Authorization: `Bearer ${OPENAI_API_KEY}`,
'Content-Type': 'multipart/form-data',
};
const fileData = await FileSystem.readAsStringAsync(recordingUri, {
encoding: FileSystem.EncodingType.Base64,
});
const fileObject = new File([fileData], fileName, {
type: 'audio/mp4',
});
const formData = new FormData();
formData.append('file', fileObject, fileName);
formData.append('model', 'whisper-1');
axios
.post(url, formData, { headers })
.then((response) => {
console.log('Transcription response:', response.data);
})
.catch((error) => {
console.error('Error:', error);
});
} catch (error) {
console.error(error);
}
My situation is very similar to this stackoverflow question, however that implementation crashes without even calling the api endpoint. Tried using chatgpt and still couldn't find a solution yet.