@akylas/nativescript-audio
用于录音和播放音频的 NativeScript 插件。
npm i --save @akylas/nativescript-audio

@akylas/nativescript-audio

Downloads per month NPM Version

用于录音和播放音频的 NativeScript 插件。


iOS 示例 Android 示例

目录

安装

从项目的根目录运行以下命令

ns 插件添加 @akylas/nativescript-audio

安装

ns plugin add @akylas/nativescript-audio

Android 原生类

iOS 原生类

权限

iOS

如果您使用录音功能,需要在 iOS 上授予权限以允许设备访问麦克风。如果不这样做,您的应用可能在设备上崩溃,并且在苹果的审查过程中可能被拒绝。为此,将此密钥添加到您的 app/App_Resources/iOS/Info.plist 文件中

<key>NSMicrophoneUsageDescription</key>
<string>Recording Practice Sessions</string>

Android

如果您打算在 Android 上使用录音功能,您需要在 App_Resources 中的 AndroidManifest.xml 文件中添加 RECORD_AUDIO 权限

    <uses-permission android:name="android.permission.RECORD_AUDIO"/>

用法

TypeScript 示例

import { TNSPlayer } from 'nativescript-audio';

export class YourClass {
private _player: TNSPlayer;

constructor() {
this._player = new TNSPlayer();
// You can pass a duration hint to control the behavior of other application that may
// be holding audio focus.
// For example: new TNSPlayer(AudioFocusDurationHint.AUDIOFOCUS_GAIN_TRANSIENT);
// Then when you play a song, the previous owner of the
// audio focus will stop. When your song stops
// the previous holder will resume.
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(res => {
console.log(res);
})
.catch(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<string> 分配给播放器的媒体文件时长。
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

示例和开发

设置

要运行演示,您必须递归地克隆此仓库 recursively

git clone https://github.com/@akylas/nativescript-audio.git --recursive

安装依赖

npm i # or 'yarn install' or 'pnpm install'

交互式菜单

要启动交互式菜单,请运行 npm start(或 yarn startpnpm start)。这将列出所有常用脚本。

构建

npm run build

npm run build.angular # or for Angular

示例

npm run demo.[ng|react|svelte|vue].[ios|android]

npm run demo.svelte.ios # Example

问题

如果您有任何问题/问题/评论,请随时在 NativeScript 社区 Discord 中创建问题或开始对话。