doc: Ogg/Vorbis is now available on Safari (#294)

This commit is contained in:
Hajime Hoshi 2016-11-29 03:42:16 +09:00
parent fec530ebbc
commit 7b4af1b12d
5 changed files with 24 additions and 6 deletions

View File

@ -13,7 +13,7 @@ A simple SNES-like 2D game library in Go
* [Android](https://github.com/hajimehoshi/ebiten/wiki/Android)
* [iOS](https://github.com/hajimehoshi/ebiten/wiki/iOS)
Note: Decoding Ogg/Vorbis and gamepads aren't available on Safari.
Note: Gamepads is not available on Safari/Android/iOS. Keyboard is not available on Android/iOS.
## Features

View File

@ -42,7 +42,7 @@
<dt>Web browsers</dt>
<dd><a href="https://github.com/hajimehoshi/ebiten/wiki/Web-Browsers">Chrome, Firefox and Safari on desktops</a> (powered by <a href="http://gopherjs.org/">GopherJS</a>)</dd>
</dl>
<p><small>Note: Decoding Ogg/Vorbis and gamepads aren't available on Safari.</small></p>
<p><small>Note: Gamepads is not available on Safari/Android/iOS. Keyboard is not available on Android/iOS.</small></p>
<h2 id="features">Features</h2>
<dl class="dl-horizontal">

View File

@ -51,8 +51,6 @@ func (s *Stream) Size() int64 {
// Decode decodes Ogg/Vorbis data to playable stream.
//
// The sample rate must be same as that of audio context.
//
// This function returns error on Safari.
func Decode(context *audio.Context, src audio.ReadSeekCloser) (*Stream, error) {
decoded, channelNum, sampleRate, err := decode(src)
if err != nil {

View File

@ -75,6 +75,7 @@ func init() {
type Player struct {
audioPlayer *audio.Player
total time.Duration
seekedCh chan error
}
var (
@ -156,6 +157,9 @@ func (p *Player) updateBar() error {
if p.audioPlayer == nil {
return nil
}
if p.seekedCh != nil {
return nil
}
if !ebiten.IsMouseButtonPressed(ebiten.MouseButtonLeft) {
mouseButtonState[ebiten.MouseButtonLeft] = 0
return nil
@ -174,7 +178,12 @@ func (p *Player) updateBar() error {
return nil
}
pos := time.Duration(x-bx) * p.total / time.Duration(bw)
return p.audioPlayer.Seek(pos)
p.seekedCh = make(chan error, 1)
go func() {
// This can&#39;t be done parallely! !?!?
p.seekedCh &lt;- p.audioPlayer.Seek(pos)
}()
return nil
}
func (p *Player) close() error {
@ -242,6 +251,17 @@ Press Z or X to change volume of the music
%s`, ebiten.CurrentFPS(), currentTimeStr)
if musicPlayer == nil {
msg &#43;= &#34;\nNow Loading...&#34;
} else if musicPlayer.seekedCh != nil {
select {
case err := &lt;-musicPlayer.seekedCh:
if err != nil {
return err
}
close(musicPlayer.seekedCh)
musicPlayer.seekedCh = nil
default:
msg &#43;= &#34;\nSeeking...&#34;
}
}
if err := ebitenutil.DebugPrint(screen, msg); err != nil {
return err

View File

@ -42,7 +42,7 @@
<dt>Web browsers</dt>
<dd><a href="https://github.com/hajimehoshi/ebiten/wiki/Web-Browsers">Chrome, Firefox and Safari on desktops</a> (powered by <a href="http://gopherjs.org/">GopherJS</a>)</dd>
</dl>
<p><small>Note: Decoding Ogg/Vorbis and gamepads aren't available on Safari.</small></p>
<p><small>Note: Gamepads is not available on Safari/Android/iOS. Keyboard is not available on Android/iOS.</small></p>
<h2 id="features">Features</h2>
<dl class="dl-horizontal">