如何使用Ionic File,Media和Media Object获取文件持续时间?

时间:2018-06-13 23:22:57

标签: file ionic-framework ionic3 media

我使用的是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>&nbsp;&nbsp;Stop Record</button>
        <button ion-button primary (click)="startRecord()" *ngIf="!recording"><ion-icon name="mic"></ion-icon>&nbsp;&nbsp;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

这里有什么想法吗?

感谢有人可以提供帮助。 提前谢谢。

2 个答案:

答案 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);
    });
  }