Skip to content

Commit 26b2a65

Browse files
committed
update demo to show player volume
1 parent eed9d0e commit 26b2a65

File tree

3 files changed

+66
-71
lines changed

3 files changed

+66
-71
lines changed

demo/app/main-page.xml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
1-
<Page
2-
xmlns="http://schemas.nativescript.org/tns.xsd" loaded="pageLoaded">
1+
<Page xmlns="http://schemas.nativescript.org/tns.xsd" loaded="pageLoaded">
32
<Page.actionBar>
43
<ActionBar title="NativeScript Audio" backgroundColor="#3F51B5" color="#fff" />
54
</Page.actionBar>
@@ -42,6 +41,7 @@
4241
<Label row="9" col="2" text="{{ 'Remaining: ' + remainingDuration }}" textWrap="true" />
4342
<Label row="10" col="0" text="Volume Slider: " textWrap="true" class="m-t-20" />
4443
<Slider row="10" col="1" colSpan="2" id="volumeSlider" minValue="0" maxValue="100" value="100" class="m-t-20" />
44+
<Label text="{{ 'Current Volume for Player ' + currentVolume }}" textWrap="true" />
4545
</GridLayout>
4646
</ScrollView>
4747
</TabViewItem.view>

demo/app/main-view-model.ts

Lines changed: 60 additions & 62 deletions
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,20 @@
1-
import "./async-await";
2-
import * as app from "tns-core-modules/application";
3-
import * as color from "tns-core-modules/color";
4-
import * as platform from "tns-core-modules/platform";
5-
import * as dialogs from "tns-core-modules/ui/dialogs";
6-
import * as timer from "tns-core-modules/timer";
7-
import { Observable } from "tns-core-modules/data/observable";
8-
import { knownFolders, File } from "tns-core-modules/file-system";
9-
import { Page } from "tns-core-modules/ui/page";
10-
import { Slider } from "tns-core-modules/ui/slider";
11-
import {
12-
TNSRecorder,
13-
TNSPlayer,
14-
AudioPlayerOptions,
15-
AudioRecorderOptions
16-
} from "nativescript-audio";
1+
import { AudioPlayerOptions, AudioRecorderOptions, TNSPlayer, TNSRecorder } from 'nativescript-audio';
2+
import * as app from 'tns-core-modules/application';
3+
import { Observable } from 'tns-core-modules/data/observable';
4+
import { File, knownFolders } from 'tns-core-modules/file-system';
5+
import * as platform from 'tns-core-modules/platform';
6+
import * as timer from 'tns-core-modules/timer';
7+
import * as dialogs from 'tns-core-modules/ui/dialogs';
8+
import { Page } from 'tns-core-modules/ui/page';
9+
import { Slider } from 'tns-core-modules/ui/slider';
10+
import './async-await';
1711

1812
declare const android;
1913

2014
export class AudioDemo extends Observable {
2115
@ObservableProperty() public isPlaying: boolean;
2216
@ObservableProperty() public isRecording: boolean;
23-
@ObservableProperty() public audioMeter = "0";
17+
@ObservableProperty() public audioMeter = '0';
2418
@ObservableProperty() public recordedAudioFile: string;
2519
@ObservableProperty() public currentVolume;
2620
@ObservableProperty() public audioTrackDuration;
@@ -31,19 +25,19 @@ export class AudioDemo extends Observable {
3125
private _page;
3226
private _audioUrls: Array<any> = [
3327
{
34-
name: "Fight Club",
35-
pic: "~/pics/canoe_girl.jpeg",
36-
url: "http://www.noiseaddicts.com/samples_1w72b820/2514.mp3"
28+
name: 'Fight Club',
29+
pic: '~/pics/canoe_girl.jpeg',
30+
url: 'http://www.noiseaddicts.com/samples_1w72b820/2514.mp3'
3731
},
3832
{
39-
name: "To The Bat Cave!!!",
40-
pic: "~/pics/bears.jpeg",
41-
url: "http://www.noiseaddicts.com/samples_1w72b820/17.mp3"
33+
name: 'To The Bat Cave!!!',
34+
pic: '~/pics/bears.jpeg',
35+
url: 'http://www.noiseaddicts.com/samples_1w72b820/17.mp3'
4236
},
4337
{
44-
name: "Marlon Brando",
45-
pic: "~/pics/northern_lights.jpeg",
46-
url: "http://www.noiseaddicts.com/samples_1w72b820/47.mp3"
38+
name: 'Marlon Brando',
39+
pic: '~/pics/northern_lights.jpeg',
40+
url: 'http://www.noiseaddicts.com/samples_1w72b820/47.mp3'
4741
}
4842
];
4943
private _meterInterval: any;
@@ -58,11 +52,11 @@ export class AudioDemo extends Observable {
5852
this._recorder.debug = true; // set true for tns_recorder logs
5953

6054
this.currentVolume = 1;
61-
this._slider = page.getViewById("volumeSlider") as Slider;
55+
this._slider = page.getViewById('volumeSlider') as Slider;
6256

6357
// Set player volume
6458
if (this._slider) {
65-
this._slider.on("valueChange", (data: any) => {
59+
this._slider.on('valueChange', (data: any) => {
6660
this._player.volume = this._slider.value / 100;
6761
});
6862
}
@@ -71,10 +65,10 @@ export class AudioDemo extends Observable {
7165
public async startRecord(args) {
7266
try {
7367
if (!TNSRecorder.CAN_RECORD()) {
74-
dialogs.alert("This device cannot record audio.");
68+
dialogs.alert('This device cannot record audio.');
7569
return;
7670
}
77-
const audioFolder = knownFolders.currentApp().getFolder("audio");
71+
const audioFolder = knownFolders.currentApp().getFolder('audio');
7872
console.log(JSON.stringify(audioFolder));
7973

8074
let androidFormat;
@@ -88,9 +82,7 @@ export class AudioDemo extends Observable {
8882
androidEncoder = 3;
8983
}
9084

91-
const recordingPath = `${
92-
audioFolder.path
93-
}/recording.${this.platformExtension()}`;
85+
const recordingPath = `${audioFolder.path}/recording.${this.platformExtension()}`;
9486

9587
const recorderOptions: AudioRecorderOptions = {
9688
filename: recordingPath,
@@ -131,7 +123,7 @@ export class AudioDemo extends Observable {
131123
});
132124

133125
this.isRecording = false;
134-
alert("Recorder stopped.");
126+
alert('Recorder stopped.');
135127
this._resetMeter();
136128
}
137129

@@ -145,42 +137,38 @@ export class AudioDemo extends Observable {
145137

146138
private _resetMeter() {
147139
if (this._meterInterval) {
148-
this.audioMeter = "0";
140+
this.audioMeter = '0';
149141
clearInterval(this._meterInterval);
150142
this._meterInterval = undefined;
151143
}
152144
}
153145

154146
public getFile(args) {
155147
try {
156-
const audioFolder = knownFolders.currentApp().getFolder("audio");
157-
const recordedFile = audioFolder.getFile(
158-
`recording.${this.platformExtension()}`
159-
);
148+
const audioFolder = knownFolders.currentApp().getFolder('audio');
149+
const recordedFile = audioFolder.getFile(`recording.${this.platformExtension()}`);
160150
console.log(JSON.stringify(recordedFile));
161-
console.log("recording exists: " + File.exists(recordedFile.path));
151+
console.log('recording exists: ' + File.exists(recordedFile.path));
162152
this.recordedAudioFile = recordedFile.path;
163153
} catch (ex) {
164154
console.log(ex);
165155
}
166156
}
167157

168158
public async playRecordedFile(args) {
169-
const audioFolder = knownFolders.currentApp().getFolder("audio");
170-
const recordedFile = audioFolder.getFile(
171-
`recording.${this.platformExtension()}`
172-
);
173-
console.log("RECORDED FILE : " + JSON.stringify(recordedFile));
159+
const audioFolder = knownFolders.currentApp().getFolder('audio');
160+
const recordedFile = audioFolder.getFile(`recording.${this.platformExtension()}`);
161+
console.log('RECORDED FILE : ' + JSON.stringify(recordedFile));
174162

175163
const playerOptions: AudioPlayerOptions = {
176164
audioFile: `~/audio/recording.${this.platformExtension()}`,
177165
loop: false,
178166
completeCallback: async () => {
179-
alert("Audio file complete.");
167+
alert('Audio file complete.');
180168
this.isPlaying = false;
181169
if (!playerOptions.loop) {
182170
await this._player.dispose();
183-
console.log("player disposed");
171+
console.log('player disposed');
184172
}
185173
},
186174

@@ -191,12 +179,12 @@ export class AudioDemo extends Observable {
191179

192180
infoCallback: infoObject => {
193181
console.log(JSON.stringify(infoObject));
194-
dialogs.alert("Info callback");
182+
dialogs.alert('Info callback');
195183
}
196184
};
197185

198186
await this._player.playFromFile(playerOptions).catch(err => {
199-
console.log("error playFromFile");
187+
console.log('error playFromFile');
200188
this.isPlaying = false;
201189
});
202190

@@ -211,32 +199,33 @@ export class AudioDemo extends Observable {
211199
audioFile: filepath,
212200
loop: false,
213201
completeCallback: async () => {
214-
alert("Audio file complete.");
202+
alert('Audio file complete.');
215203
await this._player.dispose();
216204
this.isPlaying = false;
217-
console.log("player disposed");
205+
console.log('player disposed');
218206
},
219207
errorCallback: errorObject => {
220208
console.log(JSON.stringify(errorObject));
221209
this.isPlaying = false;
222210
},
223211
infoCallback: args => {
224-
dialogs.alert("Info callback: " + args.info);
212+
dialogs.alert('Info callback: ' + args.info);
225213
console.log(JSON.stringify(args));
226214
}
227215
};
228216

229217
this.isPlaying = true;
230218

231-
if (fileType === "localFile") {
219+
if (fileType === 'localFile') {
232220
await this._player.playFromFile(playerOptions).catch(() => {
233221
this.isPlaying = false;
234222
});
235223
this.isPlaying = true;
236224
this.audioTrackDuration = await this._player.getAudioTrackDuration();
237225
// start audio duration tracking
238226
this._startDurationTracking(this.audioTrackDuration);
239-
} else if (fileType === "remoteFile") {
227+
this._startVolumeTracking();
228+
} else if (fileType === 'remoteFile') {
240229
await this._player.playFromUrl(playerOptions).catch(() => {
241230
this.isPlaying = false;
242231
});
@@ -251,10 +240,10 @@ export class AudioDemo extends Observable {
251240
* PLAY REMOTE AUDIO FILE
252241
*/
253242
public playRemoteFile(args) {
254-
console.log("playRemoteFile");
255-
const filepath = "http://www.noiseaddicts.com/samples_1w72b820/2514.mp3";
243+
console.log('playRemoteFile');
244+
const filepath = 'http://www.noiseaddicts.com/samples_1w72b820/2514.mp3';
256245

257-
this.playAudio(filepath, "remoteFile");
246+
this.playAudio(filepath, 'remoteFile');
258247
}
259248

260249
public resumePlayer() {
@@ -266,8 +255,8 @@ export class AudioDemo extends Observable {
266255
* PLAY LOCAL AUDIO FILE from app folder
267256
*/
268257
public playLocalFile(args) {
269-
let filepath = "~/audio/angel.mp3";
270-
this.playAudio(filepath, "localFile");
258+
let filepath = '~/audio/angel.mp3';
259+
this.playAudio(filepath, 'localFile');
271260
}
272261

273262
/**
@@ -285,14 +274,14 @@ export class AudioDemo extends Observable {
285274

286275
public async stopPlaying(args) {
287276
await this._player.dispose();
288-
alert("Media Player Disposed.");
277+
alert('Media Player Disposed.');
289278
}
290279

291280
/**
292281
* RESUME PLAYING
293282
*/
294283
public resumePlaying(args) {
295-
console.log("START");
284+
console.log('START');
296285
this._player.play();
297286
}
298287

@@ -310,7 +299,7 @@ export class AudioDemo extends Observable {
310299

311300
private platformExtension() {
312301
// 'mp3'
313-
return `${app.android ? "m4a" : "caf"}`;
302+
return `${app.android ? 'm4a' : 'caf'}`;
314303
}
315304

316305
private async _startDurationTracking(duration) {
@@ -321,6 +310,15 @@ export class AudioDemo extends Observable {
321310
}, 1000);
322311
}
323312
}
313+
314+
private _startVolumeTracking() {
315+
if (this._player) {
316+
const timerId = timer.setInterval(() => {
317+
console.log('volume tracking', this._player.volume);
318+
this.currentVolume = this._player.volume;
319+
}, 2000);
320+
}
321+
}
324322
}
325323

326324
export function ObservableProperty() {

demo/package.json

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,14 @@
11
{
22
"nativescript": {
33
"id": "org.nativescript.audio",
4-
"tns-android": {
5-
"version": "3.3.1"
6-
},
74
"tns-ios": {
8-
"version": "3.3.0"
5+
"version": "4.1.0"
96
}
107
},
118
"dependencies": {
129
"nativescript-audio": "file:../src",
1310
"nativescript-theme-core": "^1.0.4",
14-
"tns-core-modules": "^3.3.0"
11+
"tns-core-modules": "^4.1.0"
1512
},
1613
"devDependencies": {
1714
"@types/chai": "^4.0.2",
@@ -40,9 +37,9 @@
4037
"nativescript-dev-webpack": "^0.8.0",
4138
"raw-loader": "~0.5.1",
4239
"resolve-url-loader": "~2.1.0",
43-
"tns-platform-declarations": "^3.0.0",
40+
"tns-platform-declarations": "^4.1.0",
4441
"tslint": "~5.4.3",
45-
"typescript": "~2.5.0",
42+
"typescript": "~2.8.4",
4643
"webpack": "~3.2.0",
4744
"webpack-bundle-analyzer": "^2.8.2",
4845
"nativescript-worker-loader": "~0.8.1",

0 commit comments

Comments
 (0)