我使用的是Ionic 3,我使用了名为Ionic Native - Media的原生插件和Ionic File。我在Android中使用我的移动设备成功录制音频,播放按钮工作正常。但是我想获得音频文件的持续时间并显示持续时间的总长度。我还想显示单击按钮时的当前持续时间。
以下是我的 home.html
中的代码express-session
以下是 home.ts
中的代码<ion-header>
<ion-navbar>
<ion-title>
Sound Recorder & Player
</ion-title>
</ion-navbar>
</ion-header>
<ion-content padding>
<ion-card>
<ion-card-content>
<ion-card-title>
<button ion-button primary (click)="stopRecord()" *ngIf="recording"><ion-icon name="mic-off"></ion-icon> Stop Record</button>
<button ion-button primary (click)="startRecord()" *ngIf="!recording"><ion-icon name="mic"></ion-icon> Start Record</button>
</ion-card-title>
</ion-card-content>
</ion-card>
<ion-list>
<ion-item *ngFor="let audio of audioList; index as i;">
<p>{{audio.filename}}</p>
<button ion-button clear item-end large (click)="playAudio(audio.filename, i)"><ion-icon name="play"></ion-icon></button>
</ion-item>
</ion-list>
</ion-content>
我尝试import { Component } from '@angular/core';
import { NavController, Platform } from 'ionic-angular';
import { Media, MediaObject } from '@ionic-native/media';
import { File } from '@ionic-native/file';
@Component({
selector: 'page-home',
templateUrl: 'home.html'
})
export class HomePage {
recording: boolean = false;
filePath: string;
fileName: string;
audio: MediaObject;
audioList: any[] = [];
constructor(
public navCtrl: NavController,
private media: Media,
private file: File,
public platform: Platform
) {
}
ionViewWillEnter() {
this.getAudioList();
}
getAudioList() {
if(localStorage.getItem("audiolist")) {
this.audioList = JSON.parse(localStorage.getItem("audiolist"));
console.log(this.audioList);
}
}
startRecord() {
if (this.platform.is('ios')) {
this.fileName = 'record'+new Date().getDate()+new Date().getMonth()+new Date().getFullYear()+new Date().getHours()+new Date().getMinutes()+new Date().getSeconds()+'.3gp';
this.filePath = this.file.documentsDirectory.replace(/file:\/\//g, '') + this.fileName;
this.audio = this.media.create(this.filePath);
} else if (this.platform.is('android')) {
this.fileName = 'record'+new Date().getDate()+new Date().getMonth()+new Date().getFullYear()+new Date().getHours()+new Date().getMinutes()+new Date().getSeconds()+'.3gp';
this.filePath = this.file.externalDataDirectory.replace(/file:\/\//g, '') + this.fileName;
this.audio = this.media.create(this.filePath);
let duration = this.audio.getDuration();
console.log(duration)
}
this.audio.startRecord();
this.recording = true;
}
stopRecord() {
this.audio.stopRecord();
let duration = this.audio.getDuration()
console.log(duration)
let data = { filename: this.fileName };
this.audioList.push(data);
localStorage.setItem("audiolist", JSON.stringify(this.audioList));
this.recording = false;
this.getAudioList();
}
playAudio(file,idx) {
if (this.platform.is('ios')) {
this.filePath = this.file.documentsDirectory.replace(/file:\/\//g, '') + file;
this.audio = this.media.create(this.filePath);
} else if (this.platform.is('android')) {
this.filePath = this.file.externalDataDirectory.replace(/file:\/\//g, '') + file;
this.audio = this.media.create(this.filePath);
let duration = this.audio.getDuration()
console.log('Duration:', duration)
}
this.audio.play();
this.audio.setVolume(1.0);
}
}
在Media的文档中编写的console.log
函数。然而它总是让我回归-1
这里有什么想法吗?
感谢有人可以提供帮助。 提前谢谢。
答案 0 :(得分:1)
您正在使用:
let duration = this.audio.getDuration();
console.log(duration)
开始录制之前:
if (this.platform.is('ios')) {
this.fileName = 'record'+new Date().getDate()+new Date().getMonth()+new Date().getFullYear()+new Date().getHours()+new Date().getMinutes()+new Date().getSeconds()+'.3gp';
this.filePath = this.file.documentsDirectory.replace(/file:\/\//g, '') + this.fileName;
this.audio = this.media.create(this.filePath);
} else if (this.platform.is('android')) {
this.fileName = 'record'+new Date().getDate()+new Date().getMonth()+new Date().getFullYear()+new Date().getHours()+new Date().getMinutes()+new Date().getSeconds()+'.3gp';
this.filePath = this.file.externalDataDirectory.replace(/file:\/\//g, '') + this.fileName;
this.audio = this.media.create(this.filePath);
------>let duration = this.audio.getDuration();<-----
console.log(duration)
}
------>this.audio.startRecord();<-----
this.recording = true;
您确定要查找正确的console.log()
吗?请尝试删除第一个console.log()
。
答案 1 :(得分:0)
如果file.getDuration()给出-1,请使用videoEditor
import { VideoEditor } from '@ionic-native/video-editor/ngx';
getvideoinfo(fileUri) {
this.videoEditor.getVideoInfo({ fileUri: fileUri }).then((videoInfo) => {
alert(videoInfo.duration);
this.mediaduration = videoInfo.duration;
}).catch((error) => {
alert(error);
});
}