- 版本:6.4.4
- GitHub: https://github.com/nativescript-community/audio
- NPM: https://npmjs.net.cn/package/%40nativescript-community%2Faudio
- 下载量
- 昨天:1
- 上周:9
- 上个月:67
@nativescript-community/audio
用于录制和播放音频的 NativeScript 插件。
iOS 示例 | Android 示例 |
目录
安装
从项目的根目录运行以下命令
ns plugin add @nativescript-community/audio
安装
ns plugin add @nativescript-community/audio
Android 原生类
iOS 原生类
权限
iOS
如果您使用录音功能,需要在 iOS 上授予权限以允许设备访问麦克风。如果不这样做,您的应用可能在设备上崩溃,或者您的应用可能在苹果的审查过程中被拒绝。为此,请将此键添加到您的 app/App_Resources/iOS/Info.plist
文件中
<key>NSMicrophoneUsageDescription</key>
<string>Recording Practice Sessions</string>
Android
如果您打算为 Android 使用录制器功能,则需要将 RECORD_AUDIO 权限添加到位于 App_Resources 的 AndroidManifest.xml 文件中。
<uses-permission android:name="android.permission.RECORD_AUDIO"/>
使用方法
TypeScript 示例
import { TNSPlayer } from '@nativescript-community/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-community/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。 |
许可证
示例和开发
仓库设置
该仓库使用子模块。如果您没有使用 --recursive
克隆,则需要调用
git submodule update --init
用于安装和链接依赖项的包管理器必须是pnpm
或yarn
。 npm
不可用。
开发和测试:如果您使用yarn
,则运行yarn
;如果您使用pnpm
,则运行pnpm i
交互式菜单
要启动交互式菜单,请运行npm start
(或yarn start
或pnpm start
)。这将列出所有常用的脚本。
构建
npm run build.all
警告:似乎yarn build.all
并不总是有效(在node_modules/.bin
中找不到二进制文件),这就是为什么文档明确使用npm run
示例
npm run demo.[ng|react|svelte|vue].[ios|android]
npm run demo.svelte.ios # Example
示例设置有一些特殊之处,即如果您想修改/添加示例,您不必直接在demo-[ng|react|svelte|vue]
中工作。相反,您应在demo-snippets/[ng|react|svelte|vue]
中工作。您可以从每个版本的install.ts
开始,看看如何注册新的示例。
贡献
更新仓库
您可以非常容易地更新仓库文件。
首先更新子模块
npm run update
然后提交更改,然后更新公共文件
npm run sync
然后您可以运行yarn|pnpm
,如果有任何更改,请提交更改的文件
更新 README
npm run readme
更新文档
npm run doc
发布
发布完全由lerna
处理(您可以使用-- --bump major
强制发布主要版本)只需运行
npm run publish
修改子模块
该仓库使用https://子模块,这意味着您无法直接推送到子模块。一个简单的解决方案是修改~/.gitconfig
并添加
[url "ssh://[email protected]/"]
pushInsteadOf = https://github.com/
问题
如果您有任何问题/问题/评论,请随时创建问题或开始与NativeScript社区Discord的对话。