{"id":13795479,"url":"https://github.com/Cap-go/capacitor-native-audio","last_synced_at":"2025-05-12T23:32:18.146Z","repository":{"id":62402622,"uuid":"560317422","full_name":"Cap-go/capacitor-native-audio","owner":"Cap-go","description":"Capacitor plugin for native audio engine. ","archived":false,"fork":false,"pushed_at":"2025-05-05T09:10:49.000Z","size":7346,"stargazers_count":46,"open_issues_count":6,"forks_count":19,"subscribers_count":4,"default_branch":"main","last_synced_at":"2025-05-06T18:39:46.864Z","etag":null,"topics":["audio","capacitor","capacitor-plugin","typescript"],"latest_commit_sha":null,"homepage":"https://capgo.app","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Cap-go.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null},"funding":{"github":"Cap-go","patreon":null,"open_collective":"capgo","ko_fi":null,"tidelift":null,"community_bridge":null,"liberapay":null,"issuehunt":null,"otechie":null,"custom":null}},"created_at":"2022-11-01T08:05:22.000Z","updated_at":"2025-05-05T09:10:53.000Z","dependencies_parsed_at":"2023-10-11T04:49:05.625Z","dependency_job_id":"27bd95cf-d886-4a50-8f79-ad058ccc69ba","html_url":"https://github.com/Cap-go/capacitor-native-audio","commit_stats":{"total_commits":408,"total_committers":20,"mean_commits":20.4,"dds":0.6519607843137255,"last_synced_commit":"b8a24ed164fadc836032ea6907813eff51ec9697"},"previous_names":["cap-go/capacitor-native-audio","cap-go/native-audio"],"tags_count":185,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Cap-go%2Fcapacitor-native-audio","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Cap-go%2Fcapacitor-native-audio/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Cap-go%2Fcapacitor-native-audio/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Cap-go%2Fcapacitor-native-audio/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Cap-go","download_url":"https://codeload.github.com/Cap-go/capacitor-native-audio/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":253126667,"owners_count":21858104,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["audio","capacitor","capacitor-plugin","typescript"],"created_at":"2024-08-03T23:00:57.696Z","updated_at":"2025-05-12T23:32:18.117Z","avatar_url":"https://github.com/Cap-go.png","language":"Java","funding_links":["https://github.com/sponsors/Cap-go","https://opencollective.com/capgo"],"categories":["[Capgo plugins](https://capgo.app/)","Plugins","Capgo Capacitor Plugins"],"sub_categories":["Camera \u0026 Media","Community Plugins"],"readme":"# Native audio\n\n \u003ca href=\"https://capgo.app/\"\u003e\u003cimg src='https://raw.githubusercontent.com/Cap-go/capgo/main/assets/capgo_banner.png' alt='Capgo - Instant updates for capacitor'/\u003e\u003c/a\u003e\n\n\u003cdiv align=\"center\"\u003e\n  \u003ch2\u003e\u003ca href=\"https://capgo.app/?ref=plugin\"\u003e ➡️ Get Instant updates for your App with Capgo 🚀\u003c/a\u003e\u003c/h2\u003e\n  \u003ch2\u003e\u003ca href=\"https://capgo.app/consulting/?ref=plugin\"\u003e Fix your annoying bug now, Hire a Capacitor expert 💪\u003c/a\u003e\u003c/h2\u003e\n\u003c/div\u003e\n\n\u003ch3 align=\"center\"\u003eNative Audio\u003c/h3\u003e\n\u003cp align=\"center\"\u003e\n  \u003cstrong\u003e\n    \u003ccode\u003e@capgo/native-audio\u003c/code\u003e\n  \u003c/strong\u003e\n\u003c/p\u003e\n\u003cp align=\"center\"\u003eCapacitor plugin for playing sounds.\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"https://img.shields.io/maintenance/yes/2023?style=flat-square\" /\u003e\n  \u003ca href=\"https://github.com/capgo/native-audio/actions?query=workflow%3A%22Test+and+Build+Plugin%22\"\u003e\u003cimg src=\"https://img.shields.io/github/workflow/status/@capgo/native-audio/Test%20and%20Build%20Plugin?style=flat-square\" /\u003e\u003c/a\u003e\n  \u003ca href=\"https://www.npmjs.com/package/capgo/native-audio\"\u003e\u003cimg src=\"https://img.shields.io/npm/l/@capgo/native-audio?style=flat-square\" /\u003e\u003c/a\u003e\n\u003cbr\u003e\n  \u003ca href=\"https://www.npmjs.com/package/@capgo/native-audio\"\u003e\u003cimg src=\"https://img.shields.io/npm/dw/@capgo/native-audio?style=flat-square\" /\u003e\u003c/a\u003e\n  \u003ca href=\"https://www.npmjs.com/package/@capgo/native-audio\"\u003e\u003cimg src=\"https://img.shields.io/npm/v/@capgo/native-audio?style=flat-square\" /\u003e\u003c/a\u003e\n\u003c!-- ALL-CONTRIBUTORS-BADGE:START - Do not remove or modify this section --\u003e\n\u003ca href=\"#contributors-\"\u003e\u003cimg src=\"https://img.shields.io/badge/all%20contributors-6-orange?style=flat-square\" /\u003e\u003c/a\u003e\n\u003c!-- ALL-CONTRIBUTORS-BADGE:END --\u003e\n\u003c/p\u003e\n\n# Capacitor Native Audio Plugin\n\nCapacitor plugin for native audio engine.\nCapacitor V7 - ✅ Support!\n\nSupport local file, remote URL, and m3u8 stream\n\nClick on video to see example 💥\n\n[![YouTube Example](https://img.youtube.com/vi/XpUGlWWtwHs/0.jpg)](https://www.youtube.com/watch?v=XpUGlWWtwHs)\n\n## Maintainers\n\n| Maintainer      | GitHub                              | Social                                  |\n| --------------- | ----------------------------------- | --------------------------------------- |\n| Martin Donadieu | [riderx](https://github.com/riderx) | [Telegram](https://t.me/martindonadieu) |\n\nMainteinance Status: Actively Maintained\n\n## Preparation\n\nAll audio files must be with the rest of your source files.\n\nFirst make your sound file end up in your builded code folder, example in folder `BUILDFOLDER/assets/sounds/FILENAME.mp3`\nThen use it in preload like that `assets/sounds/FILENAME.mp3`\n\n## Installation\n\nTo use npm\n\n```bash\nnpm install @capgo/native-audio\n```\n\nTo use yarn\n\n```bash\nyarn add @capgo/native-audio\n```\n\nSync native files\n\n```bash\nnpx cap sync\n```\n\nOn iOS, Android and Web, no further steps are needed.\n\n## Configuration\n\nNo configuration required for this plugin.\n\u003cdocgen-config\u003e\n\u003c!--Update the source file JSDoc comments and rerun docgen to update the docs below--\u003e\n\n\n\n\u003c/docgen-config\u003e\n\n## Supported methods\n\n| Name           | Android | iOS | Web |\n| :------------- | :------ | :-- | :-- |\n| configure      | ✅      | ✅  | ❌  |\n| preload        | ✅      | ✅  | ✅  |\n| play           | ✅      | ✅  | ✅  |\n| pause          | ✅      | ✅  | ✅  |\n| resume         | ✅      | ✅  | ✅  |\n| loop           | ✅      | ✅  | ✅  |\n| stop           | ✅      | ✅  | ✅  |\n| unload         | ✅      | ✅  | ✅  |\n| setVolume      | ✅      | ✅  | ✅  |\n| getDuration    | ✅      | ✅  | ✅  |\n| getCurrentTime | ✅      | ✅  | ✅  |\n| isPlaying      | ✅      | ✅  | ✅  |\n\n## Usage\n\n[Example repository](https://github.com/bazuka5801/native-audio-example)\n\n```typescript\nimport {NativeAudio} from '@capgo/native-audio'\n\n\n/**\n * This method will load more optimized audio files for background into memory.\n * @param assetPath - relative path of the file, absolute url (file://) or remote url (https://)\n *        assetId - unique identifier of the file\n *        audioChannelNum - number of audio channels\n *        isUrl - pass true if assetPath is a `file://` url\n * @returns void\n */\nNativeAudio.preload({\n    assetId: \"fire\",\n    assetPath: \"assets/sounds/fire.mp3\",\n    audioChannelNum: 1,\n    isUrl: false\n});\n\n/**\n * This method will play the loaded audio file if present in the memory.\n * @param assetId - identifier of the asset\n * @param time - (optional) play with seek. example: 6.0 - start playing track from 6 sec\n * @returns void\n */\nNativeAudio.play({\n    assetId: 'fire',\n    // time: 6.0 - seek time\n});\n\n/**\n * This method will loop the audio file for playback.\n * @param assetId - identifier of the asset\n * @returns void\n */\nNativeAudio.loop({\n  assetId: 'fire',\n});\n\n\n/**\n * This method will stop the audio file if it's currently playing.\n * @param assetId - identifier of the asset\n * @returns void\n */\nNativeAudio.stop({\n  assetId: 'fire',\n});\n\n/**\n * This method will unload the audio file from the memory.\n * @param assetId - identifier of the asset\n * @returns void\n */\nNativeAudio.unload({\n  assetId: 'fire',\n});\n\n/**\n * This method will set the new volume for a audio file.\n * @param assetId - identifier of the asset\n *        volume - numerical value of the volume between 0.1 - 1.0 default 1.0\n * @returns void\n */\nNativeAudio.setVolume({\n  assetId: 'fire',\n  volume: 0.4,\n});\n\n/**\n * this method will get the duration of an audio file.\n * only works if channels == 1\n */\nNativeAudio.getDuration({\n  assetId: 'fire'\n})\n.then(result =\u003e {\n  console.log(result.duration);\n})\n\n/**\n * this method will get the current time of a playing audio file.\n * only works if channels == 1\n */\nNativeAudio.getCurrentTime({\n  assetId: 'fire'\n});\n.then(result =\u003e {\n  console.log(result.currentTime);\n})\n\n/**\n * This method will return false if audio is paused or not loaded.\n * @param assetId - identifier of the asset\n * @returns {isPlaying: boolean}\n */\nNativeAudio.isPlaying({\n  assetId: 'fire'\n})\n.then(result =\u003e {\n  console.log(result.isPlaying);\n})\n```\n\n## API\n\n\u003cdocgen-index\u003e\n\n\u003cdocgen-api\u003e\n\u003c!--Update the source file JSDoc comments and rerun docgen to update the docs below--\u003e\n\n### configure(...)\n\n```typescript\nconfigure(options: ConfigureOptions) =\u003e Promise\u003cvoid\u003e\n```\n\nConfigure the audio player\n\n| Param         | Type                                                          |\n| ------------- | ------------------------------------------------------------- |\n| **`options`** | \u003ccode\u003e\u003ca href=\"#configureoptions\"\u003eConfigureOptions\u003c/a\u003e\u003c/code\u003e |\n\n**Since:** 5.0.0\n\n--------------------\n\n\n### preload(...)\n\n```typescript\npreload(options: PreloadOptions) =\u003e Promise\u003cvoid\u003e\n```\n\nLoad an audio file\n\n| Param         | Type                                                      |\n| ------------- | --------------------------------------------------------- |\n| **`options`** | \u003ccode\u003e\u003ca href=\"#preloadoptions\"\u003ePreloadOptions\u003c/a\u003e\u003c/code\u003e |\n\n**Since:** 5.0.0\n\n--------------------\n\n\n### isPreloaded(...)\n\n```typescript\nisPreloaded(options: PreloadOptions) =\u003e Promise\u003c{ found: boolean; }\u003e\n```\n\nCheck if an audio file is preloaded\n\n| Param         | Type                                                      |\n| ------------- | --------------------------------------------------------- |\n| **`options`** | \u003ccode\u003e\u003ca href=\"#preloadoptions\"\u003ePreloadOptions\u003c/a\u003e\u003c/code\u003e |\n\n**Returns:** \u003ccode\u003ePromise\u0026lt;{ found: boolean; }\u0026gt;\u003c/code\u003e\n\n**Since:** 6.1.0\n\n--------------------\n\n\n### play(...)\n\n```typescript\nplay(options: { assetId: string; time?: number; delay?: number; }) =\u003e Promise\u003cvoid\u003e\n```\n\nPlay an audio file\n\n| Param         | Type                                                             |\n| ------------- | ---------------------------------------------------------------- |\n| **`options`** | \u003ccode\u003e{ assetId: string; time?: number; delay?: number; }\u003c/code\u003e |\n\n**Since:** 5.0.0\n\n--------------------\n\n\n### pause(...)\n\n```typescript\npause(options: Assets) =\u003e Promise\u003cvoid\u003e\n```\n\nPause an audio file\n\n| Param         | Type                                      |\n| ------------- | ----------------------------------------- |\n| **`options`** | \u003ccode\u003e\u003ca href=\"#assets\"\u003eAssets\u003c/a\u003e\u003c/code\u003e |\n\n**Since:** 5.0.0\n\n--------------------\n\n\n### resume(...)\n\n```typescript\nresume(options: Assets) =\u003e Promise\u003cvoid\u003e\n```\n\nResume an audio file\n\n| Param         | Type                                      |\n| ------------- | ----------------------------------------- |\n| **`options`** | \u003ccode\u003e\u003ca href=\"#assets\"\u003eAssets\u003c/a\u003e\u003c/code\u003e |\n\n**Since:** 5.0.0\n\n--------------------\n\n\n### loop(...)\n\n```typescript\nloop(options: Assets) =\u003e Promise\u003cvoid\u003e\n```\n\nStop an audio file\n\n| Param         | Type                                      |\n| ------------- | ----------------------------------------- |\n| **`options`** | \u003ccode\u003e\u003ca href=\"#assets\"\u003eAssets\u003c/a\u003e\u003c/code\u003e |\n\n**Since:** 5.0.0\n\n--------------------\n\n\n### stop(...)\n\n```typescript\nstop(options: Assets) =\u003e Promise\u003cvoid\u003e\n```\n\nStop an audio file\n\n| Param         | Type                                      |\n| ------------- | ----------------------------------------- |\n| **`options`** | \u003ccode\u003e\u003ca href=\"#assets\"\u003eAssets\u003c/a\u003e\u003c/code\u003e |\n\n**Since:** 5.0.0\n\n--------------------\n\n\n### unload(...)\n\n```typescript\nunload(options: Assets) =\u003e Promise\u003cvoid\u003e\n```\n\nUnload an audio file\n\n| Param         | Type                                      |\n| ------------- | ----------------------------------------- |\n| **`options`** | \u003ccode\u003e\u003ca href=\"#assets\"\u003eAssets\u003c/a\u003e\u003c/code\u003e |\n\n**Since:** 5.0.0\n\n--------------------\n\n\n### setVolume(...)\n\n```typescript\nsetVolume(options: { assetId: string; volume: number; }) =\u003e Promise\u003cvoid\u003e\n```\n\nSet the volume of an audio file\n\n| Param         | Type                                              |\n| ------------- | ------------------------------------------------- |\n| **`options`** | \u003ccode\u003e{ assetId: string; volume: number; }\u003c/code\u003e |\n\n**Since:** 5.0.0\n\n--------------------\n\n\n### setRate(...)\n\n```typescript\nsetRate(options: { assetId: string; rate: number; }) =\u003e Promise\u003cvoid\u003e\n```\n\nSet the rate of an audio file\n\n| Param         | Type                                            |\n| ------------- | ----------------------------------------------- |\n| **`options`** | \u003ccode\u003e{ assetId: string; rate: number; }\u003c/code\u003e |\n\n**Since:** 5.0.0\n\n--------------------\n\n\n### setCurrentTime(...)\n\n```typescript\nsetCurrentTime(options: { assetId: string; time: number; }) =\u003e Promise\u003cvoid\u003e\n```\n\nSet the current time of an audio file\n\n| Param         | Type                                            |\n| ------------- | ----------------------------------------------- |\n| **`options`** | \u003ccode\u003e{ assetId: string; time: number; }\u003c/code\u003e |\n\n**Since:** 6.5.0\n\n--------------------\n\n\n### getCurrentTime(...)\n\n```typescript\ngetCurrentTime(options: { assetId: string; }) =\u003e Promise\u003c{ currentTime: number; }\u003e\n```\n\nGet the current time of an audio file\n\n| Param         | Type                              |\n| ------------- | --------------------------------- |\n| **`options`** | \u003ccode\u003e{ assetId: string; }\u003c/code\u003e |\n\n**Returns:** \u003ccode\u003ePromise\u0026lt;{ currentTime: number; }\u0026gt;\u003c/code\u003e\n\n**Since:** 5.0.0\n\n--------------------\n\n\n### getDuration(...)\n\n```typescript\ngetDuration(options: Assets) =\u003e Promise\u003c{ duration: number; }\u003e\n```\n\nGet the duration of an audio file\n\n| Param         | Type                                      |\n| ------------- | ----------------------------------------- |\n| **`options`** | \u003ccode\u003e\u003ca href=\"#assets\"\u003eAssets\u003c/a\u003e\u003c/code\u003e |\n\n**Returns:** \u003ccode\u003ePromise\u0026lt;{ duration: number; }\u0026gt;\u003c/code\u003e\n\n**Since:** 5.0.0\n\n--------------------\n\n\n### isPlaying(...)\n\n```typescript\nisPlaying(options: Assets) =\u003e Promise\u003c{ isPlaying: boolean; }\u003e\n```\n\nCheck if an audio file is playing\n\n| Param         | Type                                      |\n| ------------- | ----------------------------------------- |\n| **`options`** | \u003ccode\u003e\u003ca href=\"#assets\"\u003eAssets\u003c/a\u003e\u003c/code\u003e |\n\n**Returns:** \u003ccode\u003ePromise\u0026lt;{ isPlaying: boolean; }\u0026gt;\u003c/code\u003e\n\n**Since:** 5.0.0\n\n--------------------\n\n\n### addListener('complete', ...)\n\n```typescript\naddListener(eventName: 'complete', listenerFunc: CompletedListener) =\u003e Promise\u003cPluginListenerHandle\u003e\n```\n\nListen for complete event\n\n| Param              | Type                                                            |\n| ------------------ | --------------------------------------------------------------- |\n| **`eventName`**    | \u003ccode\u003e'complete'\u003c/code\u003e                                         |\n| **`listenerFunc`** | \u003ccode\u003e\u003ca href=\"#completedlistener\"\u003eCompletedListener\u003c/a\u003e\u003c/code\u003e |\n\n**Returns:** \u003ccode\u003ePromise\u0026lt;\u003ca href=\"#pluginlistenerhandle\"\u003ePluginListenerHandle\u003c/a\u003e\u0026gt;\u003c/code\u003e\n\n**Since:** 5.0.0\nreturn {@link CompletedEvent}\n\n--------------------\n\n\n### addListener('currentTime', ...)\n\n```typescript\naddListener(eventName: 'currentTime', listenerFunc: CurrentTimeListener) =\u003e Promise\u003cPluginListenerHandle\u003e\n```\n\nListen for current time updates\nEmits every 100ms while audio is playing\n\n| Param              | Type                                                                |\n| ------------------ | ------------------------------------------------------------------- |\n| **`eventName`**    | \u003ccode\u003e'currentTime'\u003c/code\u003e                                          |\n| **`listenerFunc`** | \u003ccode\u003e\u003ca href=\"#currenttimelistener\"\u003eCurrentTimeListener\u003c/a\u003e\u003c/code\u003e |\n\n**Returns:** \u003ccode\u003ePromise\u0026lt;\u003ca href=\"#pluginlistenerhandle\"\u003ePluginListenerHandle\u003c/a\u003e\u0026gt;\u003c/code\u003e\n\n**Since:** 6.5.0\nreturn {@link CurrentTimeEvent}\n\n--------------------\n\n\n### clearCache()\n\n```typescript\nclearCache() =\u003e Promise\u003cvoid\u003e\n```\n\nClear the audio cache for remote audio files\n\n**Since:** 6.5.0\n\n--------------------\n\n\n### Interfaces\n\n\n#### ConfigureOptions\n\n| Prop               | Type                 | Description                                                                   |\n| ------------------ | -------------------- | ----------------------------------------------------------------------------- |\n| **`fade`**         | \u003ccode\u003eboolean\u003c/code\u003e | Play the audio with Fade effect, only available for IOS                       |\n| **`focus`**        | \u003ccode\u003eboolean\u003c/code\u003e | focus the audio with Audio Focus                                              |\n| **`background`**   | \u003ccode\u003eboolean\u003c/code\u003e | Play the audio in the background                                              |\n| **`ignoreSilent`** | \u003ccode\u003eboolean\u003c/code\u003e | Ignore silent mode, works only on iOS setting this will nuke other audio apps |\n\n\n#### PreloadOptions\n\n| Prop                  | Type                 | Description                                                                                                                                                                           |\n| --------------------- | -------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| **`assetPath`**       | \u003ccode\u003estring\u003c/code\u003e  | Path to the audio file, relative path of the file, absolute url (file://) or remote url (https://) Supported formats: - MP3, WAV (all platforms) - M3U8/HLS streams (iOS and Android) |\n| **`assetId`**         | \u003ccode\u003estring\u003c/code\u003e  | Asset Id, unique identifier of the file                                                                                                                                               |\n| **`volume`**          | \u003ccode\u003enumber\u003c/code\u003e  | Volume of the audio, between 0.1 and 1.0                                                                                                                                              |\n| **`audioChannelNum`** | \u003ccode\u003enumber\u003c/code\u003e  | Audio channel number, default is 1                                                                                                                                                    |\n| **`isUrl`**           | \u003ccode\u003eboolean\u003c/code\u003e | Is the audio file a URL, pass true if assetPath is a `file://` url or a streaming URL (m3u8)                                                                                          |\n\n\n#### Assets\n\n| Prop          | Type                | Description                             |\n| ------------- | ------------------- | --------------------------------------- |\n| **`assetId`** | \u003ccode\u003estring\u003c/code\u003e | Asset Id, unique identifier of the file |\n\n\n#### PluginListenerHandle\n\n| Prop         | Type                                      |\n| ------------ | ----------------------------------------- |\n| **`remove`** | \u003ccode\u003e() =\u0026gt; Promise\u0026lt;void\u0026gt;\u003c/code\u003e |\n\n\n#### CompletedEvent\n\n| Prop          | Type                | Description                | Since |\n| ------------- | ------------------- | -------------------------- | ----- |\n| **`assetId`** | \u003ccode\u003estring\u003c/code\u003e | Emit when a play completes | 5.0.0 |\n\n\n#### CurrentTimeEvent\n\n| Prop              | Type                | Description                          | Since |\n| ----------------- | ------------------- | ------------------------------------ | ----- |\n| **`currentTime`** | \u003ccode\u003enumber\u003c/code\u003e | Current time of the audio in seconds | 6.5.0 |\n| **`assetId`**     | \u003ccode\u003estring\u003c/code\u003e | Asset Id of the audio                | 6.5.0 |\n\n\n### Type Aliases\n\n\n#### CompletedListener\n\n\u003ccode\u003e(state: \u003ca href=\"#completedevent\"\u003eCompletedEvent\u003c/a\u003e): void\u003c/code\u003e\n\n\n#### CurrentTimeListener\n\n\u003ccode\u003e(state: \u003ca href=\"#currenttimeevent\"\u003eCurrentTimeEvent\u003c/a\u003e): void\u003c/code\u003e\n\n\u003c/docgen-api\u003e\n\n## Development and Testing\n\n### Building\n\n```bash\nnpm run build\n```\n\n### Testing\n\nThis plugin includes a comprehensive test suite for iOS:\n\n1. Open the iOS project in Xcode: `npx cap open ios`\n2. Navigate to the `PluginTests` directory\n3. Run tests using Product \u003e Test (⌘+U)\n\nThe tests cover core functionality including audio asset initialization, playback, volume control, fade effects, and more. See the [test documentation](ios/PluginTests/README.md) for more details.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FCap-go%2Fcapacitor-native-audio","html_url":"https://awesome.ecosyste.ms/projects/github.com%2FCap-go%2Fcapacitor-native-audio","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FCap-go%2Fcapacitor-native-audio/lists"}