Setting the file. One moment.
Subchapter 22.1
references/expo-av-to-audio.mdMarkdown4 KBView on GitHub
// Before
import { Audio } from 'expo-av';
// After
import { useAudioPlayer, useAudioRecorder, RecordingPresets, AudioModule, setAudioModeAsync } from 'expo-audio';const [sound, setSound] = useState<Audio.Sound>();
async function playSound() {
const { sound } = await Audio.Sound.createAsync(require('./audio.mp3'));
setSound(sound);
await sound.playAsync();
}
useEffect(() => {
return sound ? () => { sound.unloadAsync(); } : undefined;
}, [sound]);const player = useAudioPlayer(require('./audio.mp3'));
// Play
player.play();const [recording, setRecording] = useState<Audio.Recording>();
async function startRecording() {
await Audio.requestPermissionsAsync();
await Audio.setAudioModeAsync({ allowsRecordingIOS: true, playsInSilentModeIOS: true });
const { recording } = await Audio.Recording.createAsync(Audio.RecordingOptionsPresets.HIGH_QUALITY);
setRecording(recording);
}
async function stopRecording() {
await recording?.stopAndUnloadAsync();
const uri = recording?.getURI();
}const recorder = useAudioRecorder(RecordingPresets.HIGH_QUALITY);
async function startRecording() {
await AudioModule.requestRecordingPermissionsAsync();
await recorder.prepareToRecordAsync();
recorder.record();
}
async function stopRecording() {
await recorder.stop();
const uri = recorder.uri;
}await Audio.setAudioModeAsync({
allowsRecordingIOS: true,
playsInSilentModeIOS: true,
staysActiveInBackground: true,
interruptionModeIOS: InterruptionModeIOS.DoNotMix,
});await setAudioModeAsync({
playsInSilentMode: true,
shouldPlayInBackground: true,
interruptionMode: 'doNotMix',
});| expo-av | expo-audio |
|---|---|
Audio.Sound.createAsync() | useAudioPlayer(source) |
sound.playAsync() | player.play() |
sound.pauseAsync() | player.pause() |
sound.setPositionAsync(ms) | player.seekTo(seconds) |
sound.setVolumeAsync(vol) | player.volume = vol |
sound.setRateAsync(rate) | player.playbackRate = rate |
sound.setIsLoopingAsync(loop) | player.loop = loop |
sound.unloadAsync() | Automatic via hook |
playbackStatus.positionMillis | player.currentTime (seconds) |
playbackStatus.durationMillis | player.duration (seconds) |
playbackStatus.isPlaying | player.playing |
Audio.Recording.createAsync() | useAudioRecorder(preset) |
Audio.RecordingOptionsPresets.* | RecordingPresets.* |
recording.stopAndUnloadAsync() | recorder.stop() |
recording.getURI() | recorder.uri |
Audio.requestPermissionsAsync() | AudioModule.requestRecordingPermissionsAsync() |
play() completes, the player stays paused at the end. To replay, call player.seekTo(0) then play()unloadAsync(), hooks handle resource cleanup on unmountuseAudioPlayer instances and store them—all load immediatelyplayer.volume = 0.5)