网站搜索

typescript - react-native-audio-recorder-player 中录音机无法工作


我正在尝试使用所提到的包,这是我的代码,不确定为什么似乎已经录制了,但当我点击播放时,听不到声音,即使我将文件拖到另一个音乐播放器,也无法播放该文件。我只做了一些基本设置,完全按照该包在 Git 上的示例。

const RecordingScreen = () => {

  const [audio, setAudio] =useState({
    recordSecs:0,
    recordTime:'00:00:00',
    currentPositionSec: 0,
    currentDurationSec: 0,
    playTime: '00:00:00',
    duration:'00:00:00',
  })

  const audioRecorderPlayer = new AudioRecorderPlayer();

  const meteringEnabled = false; 


  const SetRecording = () => {
    onStartRecord();
  };

  const SetPauseRecording = () => {
    onStopRecord();
  };
  const SetStartPlaying = () => {
    onStartPlay();
  };
  const onStartRecord =  async() => {
    if (Platform.OS === 'android') {
      try {
        const granted = await PermissionsAndroid.request(
          PermissionsAndroid.PERMISSIONS.WRITE_EXTERNAL_STORAGE,
          {
            title: 'Permissions for write access',
            message: 'Give permission to your storage to write a file',
            buttonPositive: 'ok',
          },
        );
        if (granted === PermissionsAndroid.RESULTS.GRANTED) {
          console.log('You can use the storage');
        } else {
          console.log('permission denied');
          return;
        }
      } catch (err) {
        console.warn(err);
        return;
      }
    }
    if (Platform.OS === 'android') {
      try {
        const granted = await PermissionsAndroid.request(
          PermissionsAndroid.PERMISSIONS.RECORD_AUDIO,
          {
            title: 'Permissions for write access',
            message: 'Give permission to your storage to write a file',
            buttonPositive: 'ok',
          },
        );
        if (granted === PermissionsAndroid.RESULTS.GRANTED) {
          console.log('You can use the camera');
        } else {
          console.log('permission denied');
          return;
        }
      } catch (err) {
        console.warn(err);
        return;
      }
    }
    const path = Platform.select({
      ios: 'file:////XXXXXXsomepathname/audio/helloworld.m4a',
      android: 'file:////XXXXXXsomepathname/audio/helloworld.m4a',
    });
    const audioSet: AudioSet = {
      AudioEncoderAndroid: AudioEncoderAndroidType.AAC,
      AudioSourceAndroid: AudioSourceAndroidType.MIC,
      AVEncoderAudioQualityKeyIOS: AVEncoderAudioQualityIOSType.high,
      AVNumberOfChannelsKeyIOS: 2,
      AVFormatIDKeyIOS: AVEncodingOption.aac,
    };
    console.log('audioSet', audioSet);
    const uri = await audioRecorderPlayer.startRecorder(path, audioSet);
    audioRecorderPlayer.addRecordBackListener((e: any) => {
      setAudio({...audio,
        recordSecs: e.current_position,
        recordTime: audioRecorderPlayer.mmssss(
          Math.floor(e.current_position),
        ),
      });
      return;
    });
    console.log(`uri: ${uri}`);
  };

  const onStopRecord =  async() => {
    const result = await audioRecorderPlayer.stopRecorder();
    audioRecorderPlayer.removeRecordBackListener();
    setAudio({...audio,
      recordSecs: 0,
    });
    console.log(`this is the stop result: ${result}`);
  };
  
  const onStartPlay = async () => {
    console.log('onStartPlay');
    const path = Platform.select({
      ios: 'file:////XXXXXXsomepathname/audio/helloworld.m4a',
      android: 'file:////XXXXXXsomepathname/audio/helloworld.m4a',
    });
    const msg = await audioRecorderPlayer.startPlayer(path);
    audioRecorderPlayer.setVolume(1.0);
    console.log(msg);
    audioRecorderPlayer.addPlayBackListener((e: any) => {
      if (e.current_position === e.duration) {
        console.log('finished');
        audioRecorderPlayer.stopPlayer();
      }
      setAudio({...audio,
        currentPositionSec: e.current_position,
        currentDurationSec: e.duration,
        playTime: audioRecorderPlayer.mmssss(
          Math.floor(e.current_position),
        ),
        duration: audioRecorderPlayer.mmssss(Math.floor(e.duration)),
      });
      return
    });
  };

所有的 console.log 都在工作,但我不确定为什么它似乎无法录音,我需要使用本地路径,因为我有多个音频文件需要录制。