1f6603c60Sopenharmony_ci/* 2f6603c60Sopenharmony_ci * Copyright (C) 2022 Huawei Device Co., Ltd. 3f6603c60Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 4f6603c60Sopenharmony_ci * you may not use this file except in compliance with the License. 5f6603c60Sopenharmony_ci * You may obtain a copy of the License at 6f6603c60Sopenharmony_ci * 7f6603c60Sopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 8f6603c60Sopenharmony_ci * 9f6603c60Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software 10f6603c60Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 11f6603c60Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12f6603c60Sopenharmony_ci * See the License for the specific language governing permissions and 13f6603c60Sopenharmony_ci * limitations under the License. 14f6603c60Sopenharmony_ci */ 15f6603c60Sopenharmony_ci 16f6603c60Sopenharmony_ciimport media from '@ohos.multimedia.media' 17f6603c60Sopenharmony_ciimport * as mediaTestBase from './MediaTestBase.js'; 18f6603c60Sopenharmony_ci 19f6603c60Sopenharmony_ciexport function playAudioSource(src, duration, playTime, checkSeekTime, done) { 20f6603c60Sopenharmony_ci console.info(`case media source url: ${src}`) 21f6603c60Sopenharmony_ci let volumeChanged = false; 22f6603c60Sopenharmony_ci let playCount = 0; 23f6603c60Sopenharmony_ci let pauseCount = 0; 24f6603c60Sopenharmony_ci let stopCount = 0; 25f6603c60Sopenharmony_ci let seekCount = 0; 26f6603c60Sopenharmony_ci let seekEOS = false; 27f6603c60Sopenharmony_ci let audioPlayer = media.createAudioPlayer(); 28f6603c60Sopenharmony_ci if (audioPlayer == null) { 29f6603c60Sopenharmony_ci console.error('case createAudioPlayer failed'); 30f6603c60Sopenharmony_ci expect().assertFail(); 31f6603c60Sopenharmony_ci done(); 32f6603c60Sopenharmony_ci } 33f6603c60Sopenharmony_ci if (typeof (src) == 'string') { 34f6603c60Sopenharmony_ci console.error('case src test'); 35f6603c60Sopenharmony_ci audioPlayer.src = src; 36f6603c60Sopenharmony_ci } else { 37f6603c60Sopenharmony_ci console.error('case fdsrc test'); 38f6603c60Sopenharmony_ci audioPlayer.fdSrc = src; 39f6603c60Sopenharmony_ci } 40f6603c60Sopenharmony_ci audioPlayer.on('dataLoad', () => { 41f6603c60Sopenharmony_ci console.info('case set source success'); 42f6603c60Sopenharmony_ci expect(audioPlayer.state).assertEqual('idle'); 43f6603c60Sopenharmony_ci expect(audioPlayer.currentTime).assertEqual(0); 44f6603c60Sopenharmony_ci expect(Math.abs(audioPlayer.duration - duration)).assertLess(500); 45f6603c60Sopenharmony_ci // step 0: dataLoad -> play 46f6603c60Sopenharmony_ci audioPlayer.play(); 47f6603c60Sopenharmony_ci }); 48f6603c60Sopenharmony_ci audioPlayer.on('play', () => { 49f6603c60Sopenharmony_ci console.info('case start to play'); 50f6603c60Sopenharmony_ci expect(audioPlayer.state).assertEqual('playing'); 51f6603c60Sopenharmony_ci playCount++; 52f6603c60Sopenharmony_ci if (playCount == 1) { 53f6603c60Sopenharmony_ci // step 1: play -> seek duration/3 54f6603c60Sopenharmony_ci audioPlayer.seek(audioPlayer.duration / 3); 55f6603c60Sopenharmony_ci // step 2: seek duration/3 -> pause 56f6603c60Sopenharmony_ci audioPlayer.pause(); 57f6603c60Sopenharmony_ci } else if (playCount == 2) { 58f6603c60Sopenharmony_ci // step 5: play -> seek duration when loop is true 59f6603c60Sopenharmony_ci audioPlayer.loop = true; 60f6603c60Sopenharmony_ci audioPlayer.seek(audioPlayer.duration); 61f6603c60Sopenharmony_ci // step 6: seek duration -> setVolume + seek duration when loop is false 62f6603c60Sopenharmony_ci console.info('case state 2 is :' + audioPlayer.state); 63f6603c60Sopenharmony_ci expect(audioPlayer.state).assertEqual('playing'); 64f6603c60Sopenharmony_ci audioPlayer.loop = false; 65f6603c60Sopenharmony_ci audioPlayer.setVolume(0.5); 66f6603c60Sopenharmony_ci audioPlayer.seek(audioPlayer.duration); 67f6603c60Sopenharmony_ci seekEOS = true; 68f6603c60Sopenharmony_ci // step 7: wait for finish 69f6603c60Sopenharmony_ci } else if (playCount == 3) { 70f6603c60Sopenharmony_ci // step 9: play -> stop 71f6603c60Sopenharmony_ci audioPlayer.stop(); 72f6603c60Sopenharmony_ci } else { 73f6603c60Sopenharmony_ci // step 12: play -> pause 74f6603c60Sopenharmony_ci audioPlayer.pause(); 75f6603c60Sopenharmony_ci } 76f6603c60Sopenharmony_ci }); 77f6603c60Sopenharmony_ci audioPlayer.on('pause', () => { 78f6603c60Sopenharmony_ci console.info('case now is paused'); 79f6603c60Sopenharmony_ci expect(audioPlayer.state).assertEqual('paused'); 80f6603c60Sopenharmony_ci pauseCount++; 81f6603c60Sopenharmony_ci if (pauseCount == 1) { 82f6603c60Sopenharmony_ci // step 3: pause -> seek 0 83f6603c60Sopenharmony_ci audioPlayer.seek(0); 84f6603c60Sopenharmony_ci // step 4: seek 0 -> play 85f6603c60Sopenharmony_ci audioPlayer.play(); 86f6603c60Sopenharmony_ci } else { 87f6603c60Sopenharmony_ci // step 13: pause -> stop 88f6603c60Sopenharmony_ci audioPlayer.stop(); 89f6603c60Sopenharmony_ci } 90f6603c60Sopenharmony_ci }); 91f6603c60Sopenharmony_ci audioPlayer.on('stop', () => { 92f6603c60Sopenharmony_ci console.info('case stop success'); 93f6603c60Sopenharmony_ci expect(audioPlayer.state).assertEqual('stopped'); 94f6603c60Sopenharmony_ci stopCount++; 95f6603c60Sopenharmony_ci if (stopCount == 1) { 96f6603c60Sopenharmony_ci // step 10: stop -> reset 97f6603c60Sopenharmony_ci audioPlayer.reset(); 98f6603c60Sopenharmony_ci } else { 99f6603c60Sopenharmony_ci // step 14: stop -> release 100f6603c60Sopenharmony_ci expect(volumeChanged).assertEqual(true); 101f6603c60Sopenharmony_ci audioPlayer.release(); 102f6603c60Sopenharmony_ci done(); 103f6603c60Sopenharmony_ci } 104f6603c60Sopenharmony_ci }); 105f6603c60Sopenharmony_ci audioPlayer.on('reset', () => { 106f6603c60Sopenharmony_ci console.info('case reset success'); 107f6603c60Sopenharmony_ci expect(audioPlayer.state).assertEqual('idle'); 108f6603c60Sopenharmony_ci // step 11: reset -> dataLoad 109f6603c60Sopenharmony_ci if (typeof (src) == 'string') { 110f6603c60Sopenharmony_ci console.error('case src test'); 111f6603c60Sopenharmony_ci audioPlayer.src = src; 112f6603c60Sopenharmony_ci } else { 113f6603c60Sopenharmony_ci console.error('case fdsrc test'); 114f6603c60Sopenharmony_ci audioPlayer.fdSrc = src; 115f6603c60Sopenharmony_ci } 116f6603c60Sopenharmony_ci }); 117f6603c60Sopenharmony_ci audioPlayer.on('volumeChange', () => { 118f6603c60Sopenharmony_ci console.info('case set volume success '); 119f6603c60Sopenharmony_ci volumeChanged = true; 120f6603c60Sopenharmony_ci }); 121f6603c60Sopenharmony_ci audioPlayer.on('finish', () => { 122f6603c60Sopenharmony_ci console.info('case play end'); 123f6603c60Sopenharmony_ci expect(audioPlayer.state).assertEqual('stopped'); 124f6603c60Sopenharmony_ci expect(seekEOS).assertTrue(); 125f6603c60Sopenharmony_ci // step 8: play when stream is end 126f6603c60Sopenharmony_ci audioPlayer.play(); 127f6603c60Sopenharmony_ci }); 128f6603c60Sopenharmony_ci audioPlayer.on('error', (err) => { 129f6603c60Sopenharmony_ci console.error(`case error called,errMessage is ${err.message}`); 130f6603c60Sopenharmony_ci audioPlayer.release(); 131f6603c60Sopenharmony_ci expect().assertFail(); 132f6603c60Sopenharmony_ci done(); 133f6603c60Sopenharmony_ci }); 134f6603c60Sopenharmony_ci}