1
- import React , { useCallback , useEffect , useRef , useState , FC } from 'react' ;
1
+ import React , { useCallback , useEffect , useRef , useState , useMemo , FC } from 'react' ;
2
2
import { ActivityIndicator } from 'react-native' ;
3
3
import {
4
4
AudioBuffer ,
@@ -22,7 +22,6 @@ const AudioFile: FC = () => {
22
22
const [ isPlaying , setIsPlaying ] = useState ( false ) ;
23
23
const [ isLoading , setIsLoading ] = useState ( false ) ;
24
24
25
- const [ offset , setOffset ] = useState ( 0 ) ;
26
25
const [ playbackRate , setPlaybackRate ] = useState ( INITIAL_RATE ) ;
27
26
const [ elapsedTime , setElapsedTime ] = useState ( 0 ) ;
28
27
@@ -96,7 +95,7 @@ const AudioFile: FC = () => {
96
95
const buffer = await fetch ( URL )
97
96
. then ( ( response ) => response . arrayBuffer ( ) )
98
97
. then ( ( arrayBuffer ) =>
99
- audioContextRef . current ! . decodeAudioData ( arrayBuffer )
98
+ audioContext . decodeAudioData ( arrayBuffer )
100
99
)
101
100
. catch ( ( error ) => {
102
101
console . error ( 'Error decoding audio data source:' , error ) ;
@@ -109,8 +108,8 @@ const AudioFile: FC = () => {
109
108
} , [ ] ) ;
110
109
111
110
useEffect ( ( ) => {
112
- if ( ! audioContextRef . current ) {
113
- audioContextRef . current = new AudioContext ( ) ;
111
+ if ( ! audioBuffer ) {
112
+ fetchAudioBuffer ( ) ;
114
113
}
115
114
116
115
AudioManager . setLockScreenInfo ( {
@@ -120,18 +119,16 @@ const AudioFile: FC = () => {
120
119
duration : TRACK_LENGTH ,
121
120
} ) ;
122
121
122
+ } , [ fetchAudioBuffer ] )
123
+
124
+ useEffect ( ( ) => {
125
+
123
126
const remotePlaySubscription = AudioManager . enableSystemEvent (
124
- 'remotePlay' ,
125
- ( event ) => {
126
- console . log ( 'remotePlay event:' , event ) ;
127
- }
127
+ 'remotePlay' , ( ) => handlePress ( )
128
128
) ;
129
129
130
130
const remotePauseSubscription = AudioManager . enableSystemEvent (
131
- 'remotePause' ,
132
- ( event ) => {
133
- console . log ( 'remotePause event:' , event ) ;
134
- }
131
+ 'remotePause' , ( ) => handlePress ( )
135
132
) ;
136
133
137
134
const remoteChangePlaybackPositionSubscription =
@@ -157,25 +154,20 @@ const AudioFile: FC = () => {
157
154
}
158
155
) ;
159
156
160
- AudioManager . observeAudioInterruptions ( true ) ;
161
-
162
- fetchAudioBuffer ( ) ;
163
-
164
157
return ( ) => {
165
158
remotePlaySubscription ?. remove ( ) ;
166
159
remotePauseSubscription ?. remove ( ) ;
167
160
remoteChangePlaybackPositionSubscription ?. remove ( ) ;
168
161
interruptionSubscription ?. remove ( ) ;
169
- audioContextRef . current ?. close ( ) ;
170
162
} ;
171
- } , [ fetchAudioBuffer ] ) ;
163
+ } , [ handlePress ] ) ;
172
164
173
165
return (
174
166
< Container centered >
175
167
{ isLoading && < ActivityIndicator color = "#FFFFFF" /> }
176
168
< Button
177
169
title = { isPlaying ? 'Stop' : 'Play' }
178
- onPress = { handlePress }
170
+ onPress = { ( ) => handlePress ( ) }
179
171
disabled = { ! audioBuffer }
180
172
/>
181
173
< Spacer . Vertical size = { 49 } />
0 commit comments