Giter VIP home page Giter VIP logo

bookplayer's Introduction

BookPlayer - A wonderful player for your M4B/M4A/MP3 based audiobooks.

Download on the App Store

Four screenshots of BookPlayer on the iPhone X. Showing Player, Import options, the Library and, a playlist

Please visit our Wiki for our FAQ and guides on how to add new themes and icons to the app.

Features

Import

  • Using AirDrop from your Mac or iOS device
  • From Files and other apps on your device
  • Via File Sharing in iTunes on your Mac or PC
  • Zip archives are supported and can be turned into playlists automatically

Manage

  • Maintain and see progress of your books
  • Mark books as finished
  • Drag & Drop to sort your library
  • Create playlists
    • Automatically play items in turn
    • Play the first unfinished file by tapping on the playlist artwork
    • Move files to playlists from the library or import them directly

Listen

  • Control audio playback from the lock screen or the control center
  • Play and navigate books with Chapters
  • Jump to start of the current book
  • Change playback speed
  • Smart rewind
  • Volume Boost
  • Support for remote events from headset buttons and the lock screen
  • Sleep timer with adjustable duration
  • Support for VoiceOver
  • Dark mode for night owls

BookPlayer Pro

  • Cloud sync
  • Support Open Source development
  • Additional color themes
  • Select from alternative App Icons

Upcoming features

See our Roadmap on GitHub for details.

Supported locales & Languages

  • English
  • Czech (Petr Kabrna)
  • German (@pichfl, Fabian Schalle)
  • Russian (@Nibelungc, Andrey Kozlov, @carcade & Eugene Newfield)
  • Spanish (@GianniCarlo)
  • Swedish (@hypeitinc)
  • Chinese Simplified (@wangqj)
  • Danish (Carl Houmøller)
  • Dutch (Miguel De Pelsmaeker)
  • French (Christophe Vergne)
  • Romanian (Alexandru Hamuraru)
  • Turkish (Selçuk Onuk)
  • Italian (Alessio Franceschi)
  • Ukranian (Oleh)
  • Slovak (Peter Skladaný)
  • Portuguese (Vitor Jacinto)
  • Polish (Konrad Kwapisz)
  • Hungarian (Gábor Sári)
  • Arabic (John Hamo & Monther Qandeel)
  • Finnish (@akirataguchi115)

Help us to translate BookPlayer.

Contributing

Pull requests and ideas are always welcomed. Please open an issue if you have any suggestions or found a bug. 👍 See our Contribution Guidelines for details, and our Setup Guide for setting up your local environment.

If you enjoy BookPlayer, we would be glad if you consider writing a review on the App Store.

Maintainers

Contributors

A full list of all contributors can be found on GitHub.

Community

Join us on our new Discord server if you want to contribute or talk to other people using BookPlayer. Keep in mind that you should file issues when you find bugs or have ideas for new features. Discord is a chat platform and while the maintainers will drop by once in a while, it is still a chat and not a bugtracker.

Localisation

Localization generously sponsored by Lokalise, the best platform for adding lodalization to your applications

If you want to help translating BookPlayer into your own language, send as an email at [email protected] so we can invite you to Lokalise.

Dependencies

Managed with the Swift Package Manager

Managed with Homebrew

License

Licensed under GNU GPL v. 3.0. See LICENSE for details.

bookplayer's People

Contributors

akirataguchi115 avatar alexanderaverin avatar atomicguy avatar bcongdon avatar bryanrezende avatar clarencecodes avatar clint015 avatar codecantata avatar cvakiitho avatar e7mac avatar giannicarlo avatar gpambrozio avatar jeepston avatar michaelh03 avatar mmurali88 avatar moeadham avatar ncrusher74 avatar pichfl avatar rowellx68 avatar ryantstone avatar s00d avatar taylorzane avatar thai-d-v avatar vab9 avatar wu0lss4j avatar xrombik avatar yamilnunez avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

bookplayer's Issues

Bluetooth player controls do not work

Bluetooth buttons like forward and reverse do not have any affect on the player.

Can you add external Bluetooth player/speaker button interaction ?

App integrations

Allow to import files and folders from other apps in the same device (e.g. Dropbox, BTSync, etc)

Added Metadata author and title to file, but still..

Getting caught by the following:

  if title == "defaulttitle" && author == "defaultauthor" {
    self.showAlert(nil, message: "We can't correctly store your progress of books that don't have a title or author specified", style: .alert)
  }

What are the metadata fields it is looking for? I haven't been able to find it in the code yet. I added "Author" and "Title", but it is still tripping the error.

Thanks

Feature: Library search

It hadn't dawned on me how necessary this is for people with lots of audiobooks until I saw a review in the Appstore about it.

Quick Play/Pause button not working

Yesterday, the quick play or pause button worked just fine. Now, the button doesn't work.
I tried it with apple music and ibooks, and the quick play button on my headset works.
Something else I figured out is that the quick play from the apple device itself (when dragging upwards) has the PLAY button grayed out. The forward/rewind 30 secs buttons are both fine, just if I want to play or pause, I have to open the app itself.
Please help.

Non-english title and chapter letter support

Hi! I am experiencing issues with books having non-english letters. App crashes if I upload file with non-us letters in it. If I rename it, app works well, but does not allow to see chapters and book title remains blank.

Move registering for remote events out of LibraryViewController

We should move this to a separate service class which in turn can be called from AppDelegate, which seems like a more appropriate place to me. But I can be wrong, please advise.

Goal should be to make the purpose of the LibraryViewController more distinct to make it easier for the new features to be implemented.

AirDrop support

Hi! I really like the app. It is amazing for audiobooks. One feature I was missing though is the ability to add files through AirDrop, so I tried to implement this yesterday.

I would appreciate if you could take a look at my pull request #12 . As far as I can tell it seems to work. This is my first time contributing to an iOS app though, so you might want to triple check what I did there.

This issue is possibly a duplicate of #6 ...

New Miniplayer

Extracted from #46 as it makes sense to have this as a separate ticket.

  • Now playing should use the same label behavior as the player screen (unlike the screenshot, can update if necessary): If a title is too long, it should fade out and scroll in intervals
  • Now playing should behave like the download prompts in the iOS 11 App Store app: Translucent with blur and inverted for the play/pause mode. Make the tap targets as big as possible, whole square on the right side should react for play/pause and everything else should bring up the player.
  • Optional animation: Now playing snaps into place from the bottom of the screen
  • Assets will be provided by @pichfl on request

Additional tasks

  • Animate and enable transition to player using a pan gesture
  • Color background and labels using the extracted colors
  • Blur effect

Credits

We should add a Credits page to the settings or some other part of the application to better comply with the licenses of the frameworks in use.

settings - credits

Crash on try! when deleting a book

on ListBooksViewController for tableView editActionsForRowAt the line try! FileManager.default.removeItem(at: book.fileURL) might crash

New layout for Library

This also includes:

  • New "Add" action sheet
  • Pull down to Search - Moved to #105
  • Reordering files

New "Now playing" bar was moved to #52

Library Library - Add action sheet

Search

library - with search

  • Do not force, but prefer large titles
  • Completed books get dimmed

Limit progress slider to current chapter

To make the control more useful we should consider limiting the progress slider to the current chapter. This makes more precise navigation easier.

If a file has no chapters nothing would change.

Its quite common in other apps (iBooks, Audible and a few other players I tested)

Support iOS 11 "Smart invert"

Instead of providing a custom dark color scheme, support for the smart invert mode introduced in iOS 11 could provide similar results with less work.

[Refactor] Separate Player into stand-alone class

We should have something like a PlayerManager class which handles the AVAudioPlayer so we can abstract that complexity from PlayerViewController.

We can use notifications regarding the state of the player to keep updated both PlayerViewController and ListBooksViewController

UI/UX redesign

Hi. I was really happy to find this project and app as it solves exactly the problem I always had and does it in a great way.

Since I'm looking for a new side project I was wondering if you would be interested in a more wholesome UI concept custom made for the app.

If so, I'll spend some time redesigning all screens in the app. If you like the result, I will also prepare all necessary assets from those redesigns and try to implement the changes in a PR.

Is this something you would be interested in?

[Refactor] Loading books

We should also have a class which handles loading the books so we can abstract that from ListBooksViewController. Right now we're creating all the AVPlayerItem right away, and it's not necessary, there are also multiples arrays to help the data source of the tableView but this too we can simplify to just one array.

Folders

It would be nice to have folders to put the books into.

Jump to, or scroll to point in current track

I have an audio book which is in two large tracks. I recently was listening to it and for some reason when I tried to rewind 30 seconds the player instead started the track over. I may be missing something so please correct me if I am wrong, but I was not able to find a way to jump back or drag the current point to late in the track. Since the file was 6+ hours long pressing the 30 second jump over and over was not an option. It would be nice to have a jump to specific time option or to be able to scroll through with your finger to a specific time in the track.

Thanks 👍

Crash when launching book from list

Seems like there's a bug in the latest app store version. When you try to add a new book and play it, the app immediately crashes. Tested on iOS 11 on iPhone 6s Plus and iPhone X. Can't take a look at what's causing it right now, but I'll see what I can find after work!

Contact Us or support option in settings

Suggestion by @Daniel-Katz in #58 . We really need to make it easy for the users to report issues. One easy option would be to link this repo. The other option would be to let them send an email with their configured account in their iPhone. This is open to debate to see what would be the best approach

Remove DeckTransition dependency

Before beginning work on the player, I thought it might be good to clean up a bit. The new design relies on a more native look, which allows us to skip the dependency and use more regular presentation

Hide rating

How to remove the appearance of the rating after the production of auido?

Use checksum or hash of file as identifier

Instead of using self.fileURL.lastPathComponent we should consider using a hash generated from the binary file.

That paves the way for future features and also ensures that we recognize a file that was added previously.

Feature: Playlists

User should be able to create playlists based on their selection of the available audiobooks. This will help mitigate the need for #8

  • Deleting a playlist should ask if files should be deleted as well or put back into the library
  • Playlists remember manual order
  • Files can be imported to playlists

Create promp / Library with playlist

Library - Create Playlist library - with playlist

Playlist with files / Edit state for sorting and adding files

library - playlist library - playlist edit

Move existing files to playlist via swipe

library - with swipe

Starts playing when disconnect Bluetooth

I listen to books in my car which connects via Bluetooth, when I turn off my car, the Bluetooth disconnects and a couple seconds later the book starts playing out loud. Minor annoyance but overall this is the best book player on the market, would also love a web upload interface!

iPhone X 11.2.5

On a small device, playback controls are difficult to use

On a small screen, when playing back an audiobook, the bottom controls (scrubber, speed, sleep and chapters) are very difficult to tap as they are all very close together and a little chopped off. I attach a picture to show what I mean.
smallscreen

Chapter support

M4B files sometimes have chapters, would be nice to list them and allow selection of them

Interface for import options

The app should have some kind of menu with the list of supported ways to import audiobooks. This will make it easier too for contributors to work on import options as small modules

Share audiobooks

The swipe left menu for a cell that contains a book or playlist item should include an additional action called "Share" which should bring up the share sheet for the associated file.

Original text:

Since BookPlayer accepts audiobooks via AirDrop or generic file sharing, it should also allow you to share a book in a similar fashion.

This should not be too hard to implement, but it stops files from being stuck inside the player and makes it easier to bring files from one device to the next, which will also be nice for possible future developments.

Discussion: Update application data storage

What do you think about us updating the app to use Realm.io rather than UserDefaults to store user/book information? A coworker mentioned Realm as a good option for storing user data on-device and would open up a lot of possibilities for us, and seems to give us encryption built-in too. We could:

  • Store Books as easily retrievable objects that include a list of files that comprise the book, playlist style. A lot of audiobooks are broken up like this, and playing broken-up audiobooks is a feature we should take a look at too!

  • Book objects could hold all the information we need for them, rather than having individually labeled userDefaults based on the "dataWeWant_bookIdentifier" pattern.

  • Store individual book stats/store data we could eventually pull from other API's like Goodreads, instead of pulling that data repeatedly.

  • Store user listening stats and display them Audible style (or like Pocketcasts). I've always loved seeing these stats when I used audible, but I don't get them in any other audiobook app I've used.

I've never used Realm before but it seems pretty sweet! I just don't want to start looking into it without your input :)

When using command line to merge audio files, the length of the audiobook doesn't extend

Often enough, an audiobook is split up into several smaller files, which can get annoying when using this app since (as far as I'm currently aware) it doesn't allow for having multiple files play one after the other (iBooks does this when they have the same album) and I was able to find a way around the annoyance by merging the many files via Windows command line:

  copy /b file1.mp3+file2.mp3+file3.mp3 outputfile.mp3
  (let's say for example files 1,2,3 are 5 mins long each, the result should be 15 minutes long)

The problem is that while outputfile.mp3 worked fine when I tried to play it via VLC, when I uploaded it to the app, the duration of the audiobook was only as long as the first file (with the rest of it apparently being inaccessible), leaving me with apparently a much larger file that only counted as the first file, unless I used VLC (I tried Google Drive and it had the same issue).

A way I found to fix the issue (a bit annoying but I made it work) was to use ConverterLite to convert my outputfile.mp3 into an mp3 (sounds redundant, I know), which apparently wiped whatever data was telling the app that it was only as long as the first file (in the case of the example, the app thought outputfile.mp3 was only 5 mins long), which was a little frustrating, since I searched the file's properties and I was unable to find anything saying that the outputfile.mp3 was shorter than it was.

Anything you can do for this?

Adjustable skip-forward/backward duration

The current skip-forward/backward time of 30 seconds is not right for me. Can we have the option to customize these values? E.g., I would use 10s backward and 60s forward.

New layout for Player

  • Enable Gestures
  • Fix colliding gestures by limiting the axis
  • Update forward/rewind icons with versions without shadows, color from artwork
  • Allow for text inside forward/rewind icons to be adjustable

This also includes:

  • Refactor PlayerViewController
  • Simplify play speed controls
  • Simplify More menu
  • Abstract artwork and player controls

Player Paused / Player Playing

player paused player

Speed controls / Chapter selection

player playspeed

### Smaller phones

iphone 8 - player

iphone se - player

(Click to preview in original size)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.