NativeScript 音频
用于 Android 和 iOS 播放和录制音频文件的 NativeScript 插件。
您在项目中或插件上需要帮助吗?随时联系 nStudio 团队,以了解移动和 Web 应用程序开发的最佳实践。[email protected]
安装
tns plugin add nativescript-audio
Android 原生类
iOS 原生类
注意:如果您使用录音功能,则需要授予 iOS 设备访问麦克风的权限。否则,您的应用程序可能会在设备上崩溃,或者在 Apple 的审查过程中被拒绝。为此,请将以下键添加到您的 app/App_Resources/iOS/Info.plist
文件中
<key>NSMicrophoneUsageDescription</key>
<string>Recording Practice Sessions</string>
用法
TypeScript 示例
import { TNSPlayer } from 'nativescript-audio';
export class YourClass {
private _player: TNSPlayer;
constructor() {
this._player = new TNSPlayer();
this._player.debug = true; // set true to enable TNSPlayer console logs for debugging.
this._player
.initFromFile({
audioFile: '~/audio/song.mp3', // ~ = app directory
loop: false,
completeCallback: this._trackComplete.bind(this),
errorCallback: this._trackError.bind(this)
})
.then(() => {
this._player.getAudioTrackDuration().then(duration => {
// iOS: duration is in seconds
// Android: duration is in milliseconds
console.log(`song duration:`, duration);
});
});
}
public togglePlay() {
if (this._player.isAudioPlaying()) {
this._player.pause();
} else {
this._player.play();
}
}
private _trackComplete(args: any) {
console.log('reference back to player:', args.player);
// iOS only: flag indicating if completed succesfully
console.log('whether song play completed successfully:', args.flag);
}
private _trackError(args: any) {
console.log('reference back to player:', args.player);
console.log('the error:', args.error);
// Android only: extra detail on error
console.log('extra info on the error:', args.extra);
}
}
JavaScript 示例
const audio = require('nativescript-audio');
const player = new audio.TNSPlayer();
const playerOptions = {
audioFile: 'http://some/audio/file.mp3',
loop: false,
completeCallback: function() {
console.log('finished playing');
},
errorCallback: function(errorObject) {
console.log(JSON.stringify(errorObject));
},
infoCallback: function(args) {
console.log(JSON.stringify(args));
}
};
player
.playFromUrl(playerOptions)
.then(function(res) {
console.log(res);
})
.catch(function(err) {
console.log('something went wrong...', err);
});
API
录音机
TNSRecorder 方法
方法 |
描述 |
TNSRecorder.CAN_RECORD(): boolean - 静态方法 |
确定是否准备好录音。 |
start(options: AudioRecorderOptions): Promise<void> |
开始将录音保存到文件。 |
stop(): Promise<void> |
停止录音。 |
pause(): Promise<void> |
暂停录音。 |
resume(): Promise<void> |
恢复录音。 |
dispose(): Promise<void> |
完成录音时释放系统资源。 |
getMeters(channel?: number): number |
返回输入的振幅。 |
isRecording(): boolean - 仅 iOS |
如果录音机正在积极录音,则返回 true。 |
requestRecordPermission(): Promise<void> |
仅 Android 当用户授予权限时解析承诺。 |
hasRecordPermission(): boolean |
仅 Android 如果已授予权限 RECORD_AUDIO,则返回 true。 |
TNSRecorder 实例属性
属性 |
描述 |
ios |
获取原生 AVAudioRecorder 类实例。 |
android |
获取原生 MediaRecorder 类实例。 |
debug |
设置为 true 以启用调试控制台日志(默认 false)。 |
播放器
TNSPlayer 方法
方法 |
描述 |
initFromFile(options: AudioPlayerOptions): Promise |
使用文件初始化播放器实例,但不自动播放。 |
playFromFile(options: AudioPlayerOptions): Promise |
从文件自动播放。 |
initFromUrl(options: AudioPlayerOptions): Promise |
从 URL 初始化播放器实例,但不自动播放。 |
playFromUrl(options: AudioPlayerOptions): Promise |
从 URL 自动播放。 |
pause(): Promise<boolean> |
暂停播放。 |
resume(): void |
恢复播放。 |
seekTo(time:number): Promise<boolean> |
跳转到轨道的位置(以秒为单位)。 |
dispose(): Promise<boolean> |
完成播放音频后释放资源。 |
isAudioPlaying(): boolean |
确定播放器是否正在播放。 |
getAudioTrackDuration(): Promise |
分配给播放器的媒体文件的时长。 |
playAtTime(time: number): void - 仅限iOS |
在指定的时长位置播放音频轨道。 |
changePlayerSpeed(speed: number): void - 仅限Android API 23+ |
更改媒体播放器的播放速度。 |
TNSPlayer实例属性
属性 |
描述 |
ios |
获取原生的iOS AVAudioPlayer实例。 |
android |
获取原生的Android MediaPlayer实例。 |
debug: boolean |
设置为 true 以启用调试控制台日志(默认 false)。 |
currentTime: number |
获取媒体文件时长中的当前时间。 |
volume: number |
获取/设置播放器音量。值范围从0到1。 |
许可证
MIT
演示应用
- 从仓库fork/clone
- 切换到
src
目录
- 执行
npm run demo.android
或npm run demo.ios
(如果您好奇,这些脚本位于src
目录下package.json的scripts
中)