React Native Audio отправляет голосовую заметку на сервер - PullRequest
0 голосов
/ 03 декабря 2018

У меня есть экран чата, с которого я хочу отправить голосовую заметку на сервер с помощью react-native-audio и воспроизвести ее с помощью react-native-sound.

У меня проблема с записью голосовой заметки.Readme в react-native-audio не так понятен, поэтому я думаю, что с моей реализацией что-то не так.

Вот мой метод рендеринга

render() {

    return (

        <TouchableOpacity onPress={ this.start_timer }>
                <Icon name="microphone-outline" type="MaterialCommunityIcons" style={ styles.microphone_icon } />
        </TouchableOpacity>

        {
             this.state.is_recording

             ? <View style={ styles.recorder_container }>

                  <TouchableOpacity onPress={ this.clear_time }>
                      <Icon name="ios-trash" type="Ionicons" style={ styles.trash_icon } />
                  </TouchableOpacity>

                  <Text style={ styles.timer }>{ this.state.count_up.format('mm:ss') }</Text>

                  <TouchableOpacity onPress={ this.send }>
                      <Icon name="md-send" type="Ionicons" style={ styles.send_icon } />
                  </TouchableOpacity>
               </View>

            : null
        }
    )
}

, а вот функции длязапись и отправка

start_timer = () => {

this.setState({ is_recording: true })

let audioPath = AudioUtils.DocumentDirectoryPath + '/test.aac';

this.audio = AudioRecorder.prepareRecordingAtPath(audioPath, {
  SampleRate: 22050,
  Channels: 1,
  AudioQuality: "Low",
  AudioEncoding: "aac"
});

this.setState({ audio: audioPath })

this.interval = setInterval(() => this.setState(prev => ({ count_up: prev.count_up.add(1, 'second') })), 1000)

}

send = async () => {

await AudioRecorder.stopRecording();

this.setState({ is_recording: false })

AudioRecorder.onFinished = async (data) => {

  let fd = new FormData();

  await fd.append('file', data.audioFileURL)

  let sound = await Api.post('api/chats/upload-vc', fd)

 }

}

clear_time = () => {

this.setState({ is_recording: false, count_up: moment().minute(0).second(0) })

clearInterval(this.interval)

}

Я зарегистрировал файл в бэкэнд-функции, но продолжаю получать пустой массив, так что я тут не так делаю?

Ответы [ 2 ]

0 голосов
/ 26 апреля 2019

Я исправил свой аудио проигрыватель, следуя этому совету с 2016 года: https://github.com/zmxv/react-native-sound/issues/20#issuecomment-205683378
И к POST вашему файлу на сервере не забудьте добавить file:// перед вашим путем, например "file:///data/user/0/bla.bla/files/1695695e-aaaa-4e0b-9b57-998cb6b50608.aac".Размер по-прежнему составляет 0 кб на Android Finished recording, но он работает!
Я сохраняю в AudioUtils.DocumentDirectoryPath атм

0 голосов
/ 03 декабря 2018

В данных вашей формы вы передаете:

AudioUtils.DocumentDirectoryPath + '/test.aac'

как путь к файлу?это немного неясно с вашим текущим фрагментом.

Также, посмотрите этот пример https://github.com/jsierles/react-native-audio/blob/master/AudioExample/AudioExample.js

...