Skip to content

Commit a5afe05

Browse files
authored
Merge pull request #1 from catalogworks/b/fix-ios174
fix playback for ios 17.4
2 parents 003b917 + a675689 commit a5afe05

File tree

10 files changed

+377
-18
lines changed

10 files changed

+377
-18
lines changed

.gitignore

Lines changed: 175 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,175 @@
1+
# Based on https://raw.githubusercontent.com/github/gitignore/main/Node.gitignore
2+
3+
# Logs
4+
5+
logs
6+
_.log
7+
npm-debug.log_
8+
yarn-debug.log*
9+
yarn-error.log*
10+
lerna-debug.log*
11+
.pnpm-debug.log*
12+
13+
# Caches
14+
15+
.cache
16+
17+
# Diagnostic reports (https://nodejs.org/api/report.html)
18+
19+
report.[0-9]_.[0-9]_.[0-9]_.[0-9]_.json
20+
21+
# Runtime data
22+
23+
pids
24+
_.pid
25+
_.seed
26+
*.pid.lock
27+
28+
# Directory for instrumented libs generated by jscoverage/JSCover
29+
30+
lib-cov
31+
32+
# Coverage directory used by tools like istanbul
33+
34+
coverage
35+
*.lcov
36+
37+
# nyc test coverage
38+
39+
.nyc_output
40+
41+
# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files)
42+
43+
.grunt
44+
45+
# Bower dependency directory (https://bower.io/)
46+
47+
bower_components
48+
49+
# node-waf configuration
50+
51+
.lock-wscript
52+
53+
# Compiled binary addons (https://nodejs.org/api/addons.html)
54+
55+
build/Release
56+
57+
# Dependency directories
58+
59+
node_modules/
60+
jspm_packages/
61+
62+
# Snowpack dependency directory (https://snowpack.dev/)
63+
64+
web_modules/
65+
66+
# TypeScript cache
67+
68+
*.tsbuildinfo
69+
70+
# Optional npm cache directory
71+
72+
.npm
73+
74+
# Optional eslint cache
75+
76+
.eslintcache
77+
78+
# Optional stylelint cache
79+
80+
.stylelintcache
81+
82+
# Microbundle cache
83+
84+
.rpt2_cache/
85+
.rts2_cache_cjs/
86+
.rts2_cache_es/
87+
.rts2_cache_umd/
88+
89+
# Optional REPL history
90+
91+
.node_repl_history
92+
93+
# Output of 'npm pack'
94+
95+
*.tgz
96+
97+
# Yarn Integrity file
98+
99+
.yarn-integrity
100+
101+
# dotenv environment variable files
102+
103+
.env
104+
.env.development.local
105+
.env.test.local
106+
.env.production.local
107+
.env.local
108+
109+
# parcel-bundler cache (https://parceljs.org/)
110+
111+
.parcel-cache
112+
113+
# Next.js build output
114+
115+
.next
116+
out
117+
118+
# Nuxt.js build / generate output
119+
120+
.nuxt
121+
dist
122+
123+
# Gatsby files
124+
125+
# Comment in the public line in if your project uses Gatsby and not Next.js
126+
127+
# https://nextjs.org/blog/next-9-1#public-directory-support
128+
129+
# public
130+
131+
# vuepress build output
132+
133+
.vuepress/dist
134+
135+
# vuepress v2.x temp and cache directory
136+
137+
.temp
138+
139+
# Docusaurus cache and generated files
140+
141+
.docusaurus
142+
143+
# Serverless directories
144+
145+
.serverless/
146+
147+
# FuseBox cache
148+
149+
.fusebox/
150+
151+
# DynamoDB Local files
152+
153+
.dynamodb/
154+
155+
# TernJS port file
156+
157+
.tern-port
158+
159+
# Stores VSCode versions used for testing VSCode extensions
160+
161+
.vscode-test
162+
163+
# yarn v2
164+
165+
.yarn/cache
166+
.yarn/unplugged
167+
.yarn/build-state.yml
168+
.yarn/install-state.gz
169+
.pnp.*
170+
171+
# IntelliJ based IDEs
172+
.idea
173+
174+
# Finder (MacOS) folder config
175+
.DS_Store

bower.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919
],
2020
"repository": {
2121
"type": "git",
22-
"url": "git://github.com/goldfire/howler.js.git"
22+
"url": "git://github.com/catalogworks/howler.js.git"
2323
},
2424
"main": "dist/howler.js",
2525
"license": "MIT",
@@ -32,4 +32,4 @@
3232
"tests",
3333
"examples"
3434
]
35-
}
35+
}

dist/howler.core.min.js

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

dist/howler.js

Lines changed: 33 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*!
2-
* howler.js v2.2.4
2+
* howler.js v2.2.5
33
* howlerjs.com
44
*
55
* (c) 2013-2020, James Simpson of GoldFire Studios
@@ -993,6 +993,12 @@
993993
};
994994
node.addEventListener(Howler._canPlayEvent, listener, false);
995995

996+
// (IOS 17.4 PATCH)
997+
// the node is not actually playing (has received suspend event and NETWORK_IDLE)
998+
if (node.networkState === 1 && node._wasSuspended) {
999+
node.play();
1000+
}
1001+
9961002
// Cancel the end timer.
9971003
self._clearTimer(sound._id);
9981004
}
@@ -1763,6 +1769,10 @@
17631769
// Remove any event listeners.
17641770
sounds[i]._node.removeEventListener('error', sounds[i]._errorFn, false);
17651771
sounds[i]._node.removeEventListener(Howler._canPlayEvent, sounds[i]._loadFn, false);
1772+
// IOS17.4 PATCH
1773+
sounds[i]._node.removeEventListener('loadedmetadata', sounds[i]._loadFn, false);
1774+
sounds[i]._node.removeEventListener('suspend', setAudioNodeWasSuspendedFromEvent, false);
1775+
17661776
sounds[i]._node.removeEventListener('ended', sounds[i]._endFn, false);
17671777

17681778
// Release the Audio object back to the pool.
@@ -2264,6 +2274,12 @@
22642274
self._loadFn = self._loadListener.bind(self);
22652275
self._node.addEventListener(Howler._canPlayEvent, self._loadFn, false);
22662276

2277+
// IOS17.4 PATCH
2278+
// cancplaythrough may not fire if the audio node is suspended
2279+
// ensure event queue is started here
2280+
// may have side effects beyond the _wasSuspended
2281+
self._node.addEventListener('loadedmetadata', self._loadFn, false);
2282+
22672283
// Listen for the 'ended' event on the sound to account for edge-case where
22682284
// a finite sound has a duration of Infinity.
22692285
self._endFn = self._endListener.bind(self);
@@ -2274,6 +2290,12 @@
22742290
self._node.preload = parent._preload === true ? 'auto' : parent._preload;
22752291
self._node.volume = volume * Howler.volume();
22762292

2293+
// IOS 17.4 PATCH
2294+
// record suspended event with dirty param for later mitigation
2295+
self._node._wasSuspended = false;
2296+
self._node.addEventListener('suspend', setAudioNodeWasSuspendedFromEvent, false);
2297+
2298+
22772299
// Begin loading the source.
22782300
self._node.load();
22792301
}
@@ -2340,8 +2362,10 @@
23402362
parent._loadQueue();
23412363
}
23422364

2343-
// Clear the event listener.
2365+
// Clear the event listener(s).
2366+
// IOS 17.4 PATCH
23442367
self._node.removeEventListener(Howler._canPlayEvent, self._loadFn, false);
2368+
self._node.removeEventListener('loadedmetadata', self._loadFn, false);
23452369
},
23462370

23472371
/**
@@ -2506,6 +2530,12 @@
25062530
}
25072531
};
25082532

2533+
2534+
// IOS17.4 PATCH
2535+
var setAudioNodeWasSuspendedFromEvent = function(event) {
2536+
event.target._wasSuspended = true;
2537+
}
2538+
25092539
/**
25102540
* Setup the audio context when available, or switch to HTML5 Audio mode.
25112541
*/
@@ -2590,7 +2620,7 @@
25902620
/*!
25912621
* Spatial Plugin - Adds support for stereo and 3D audio where Web Audio is supported.
25922622
*
2593-
* howler.js v2.2.4
2623+
* howler.js v2.2.5
25942624
* howlerjs.com
25952625
*
25962626
* (c) 2013-2020, James Simpson of GoldFire Studios

dist/howler.min.js

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

dist/howler.spatial.min.js

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "howler",
3-
"version": "2.2.4",
3+
"version": "2.2.5",
44
"description": "Javascript audio library for the modern web.",
55
"homepage": "https://howlerjs.com",
66
"keywords": [
@@ -16,10 +16,10 @@
1616
"audio sprite",
1717
"audiosprite"
1818
],
19-
"author": "James Simpson <[email protected]> (http://goldfirestudios.com)",
19+
"author": "@catalogworks",
2020
"repository": {
2121
"type": "git",
22-
"url": "git://github.com/goldfire/howler.js.git"
22+
"url": "git://github.com/catalogworks/howler.js.git"
2323
},
2424
"scripts": {
2525
"build": "VERSION=`printf 'v' && node -e 'console.log(require(\"./package.json\").version)'` && sed -i '' '2s/.*/ * howler.js '\"$VERSION\"'/' src/howler.core.js && sed -i '' '4s/.*/ * howler.js '\"$VERSION\"'/' src/plugins/howler.spatial.js && uglifyjs --preamble \"/*! howler.js $VERSION | (c) 2013-2020, James Simpson of GoldFire Studios | MIT License | howlerjs.com */\" src/howler.core.js -c -m --screw-ie8 -o dist/howler.core.min.js && uglifyjs --preamble \"/*! howler.js $VERSION | Spatial Plugin | (c) 2013-2020, James Simpson of GoldFire Studios | MIT License | howlerjs.com */\" src/plugins/howler.spatial.js -c -m --screw-ie8 -o dist/howler.spatial.min.js && awk 'FNR==1{echo \"\"}1' dist/howler.core.min.js dist/howler.spatial.min.js | sed '3s~.*~/*! Spatial Plugin */~' | perl -pe 'chomp if eof' > dist/howler.min.js && awk '(NR>1 && FNR==1){printf (\"\\n\\n\")};1' src/howler.core.js src/plugins/howler.spatial.js > dist/howler.js",
@@ -37,5 +37,8 @@
3737
"dist/howler.core.min.js",
3838
"dist/howler.spatial.min.js",
3939
"LICENSE.md"
40-
]
41-
}
40+
],
41+
"publishConfig": {
42+
"registry": "https://npm.pkg.github.com"
43+
}
44+
}

0 commit comments

Comments
 (0)