PaulWoitaschek / Voice

Minimalistic audiobook player
GNU General Public License v3.0
2.41k stars 368 forks source link

Re-design the book adding process #809

Closed PaulWoitaschek closed 2 years ago

PaulWoitaschek commented 5 years ago

Right now the whole adding process is severely flawed.

Issues

Users...

Current Solution

Currently there are two kind of folder structures we support:

Improvements

Another structure we should support is by author:

I think we need to re-think in a larger picture how we let users add folders. This should be combined with an onboarding flow. Right now the user is thrown into cold water and I assume that mostly users with a technical background understand how to add folders.

I'm open for ideas! @0rAX0 cc

0rAX0 commented 5 years ago

@PaulWoitaschek Do you mind labeling the open issues that need my input/design/ideas as 'Design' or something similar. I feel that we would work a lot more efficiently if we introduce some organization. :)

PaulWoitaschek commented 5 years ago

I added you as collaborator. Feel free to comment / close / tag issues on how you think it's useful. Please don't push directly to master ;)

0rAX0 commented 5 years ago

Sweet. And I'll keep that in mind haha 😆

PaulWoitaschek commented 5 years ago

Didn't you just add a label?

Mit freundlichen Grüßen  Paul Woitaschek  Software Entwicklung  www.paul-woitaschek.de

0rAX0 commented 5 years ago

Sorry I'm dumb, forgot to accept the invite. 🤕

0rAX0 commented 5 years ago

@PaulWoitaschek I think that a good onboarding flow is the most important piece here, then I suggest giving the user 3 choices: the two current ones with better explanations, and additional 'let me choose' mode when the user points to a directory and he's taken to a screen where he can choose the books by ✅ ing the boxes next to them. Now when a folder that contains a bunch of other folders is ticked it means that it's a book with multiple chapters; when the children folders are ticked then they're the books.

Of course, the best thing in the world is figure a way to be pointed at a directory and intelligently figure everything out, but it probably needs some genius AI or something.

MagTun commented 5 years ago

There is probably something that I don't understand here, but why don't you use a simple folder explorer. I use MortPlayer Audio Books before using your app and the process of having to add audiobook folders to the app really confused me at first.

PaulWoitaschek commented 5 years ago

@0rAX0 Could you do a mockup for the new adding process?

0rAX0 commented 5 years ago

@PaulWoitaschek First, sorry for not responding to recent comments, was a bit sick and busy.

How is it going to be, like I suggested?

PaulWoitaschek commented 5 years ago

How is it going to be, like I suggested?

Yes, even though I'm not sure yet if the "Let me chose" is the right way. Maybe the 3rd option will just be the "Author" way.

digitalec commented 5 years ago

Rather than importing based on folder structure, why not import by ID3 tags? I've got a mix of single file audiobooks as well as audiobooks split by chapter into multiple MP3s. It would be beneficial to specify an "Audiobook Directory" that contains all books and import and organize by Album name.

As of now, I have to add each multi-file audiobook separately and then I have to add my single file book directory.

It would also be nice to be able to import books directly from Google Drive/Dropbox/OneDrive etc.

thw0rted commented 5 years ago

I second Shawn's suggestion above. I was confused when adding files the first time I used the app, and just messed around with folder layout until it worked. I think I have several folders with single-file books (m4b), one each, which took some guess work. If this were a music player, I'd just dump all the files in and let the player present them by Artist -> Album based on tags.

siniux commented 5 years ago

I think the process should be streamlined but without giving the user too much options; what if the app created an "Audiobook" folder on first opening and the user only had to use a file manager to copy the audiobooks there.

thw0rted commented 5 years ago

@siniux how would that behavior work with external storage (sd card)? I like the idea of having a default. Maybe make an Audiobooks folder on both devices and show any books in either one?

siniux commented 5 years ago

Could be, I think it would to be better to have the two options just there when the user tries to copy its first book.

0rAX0 commented 5 years ago

@PaulWoitaschek I have moved the (messy) source file to Figma for easier sharing, you and anyone interested can follow the progress there. It also would be a good idea to pick up the fonts and other styles from the mockup as the app is still using the old fonts.

https://www.figma.com/file/W0pvmBDM7rtgRhGkC6k27bV0/Voice?node-id=61%3A71

Hopefully, I can finish designing the onboarding process soon™️. Any suggestion is welcome.

markusd112 commented 5 years ago

Hi, I have used Mort Audiobook player app for a long time, but the app seems not to be active developed any longer, so I am looking around for a new audiobook player and Voice looks very good for me, but some features (some are already discussed above) I am missing. I would like to give you an idea about my usecase:

thw0rted commented 5 years ago

It might be clearer to give an example of your folder structure. I believe it would help you to have

/Audio/Author 1/Book 1/chapter1.mp3
/Audio/Author 1/Book 1/chapter2.mp3
...
/Audio/Author 1/Book 1/chapter10.mp3
/Audio/Author 1/Book 2/chapter1.mp3
...
/Audio/Author 2/Book 1/chapter1.mp3
... etc

turned into a hierarchy in the app of "Author 1", "Author 2", etc, with "Book 1", "Book 2", etc under each author. If the folder name is used for Author / Book name in this case (rather than the ID3 tags), that would solve your newspaper problem. The top of the hierarchy would be "Die Zeit" and each "book" would be "DIE ZEIT 15/2019" usw.

The problem I have with this is that I've carefully tuned all my ID3 tags and would prefer those to be used over the folder name, generally. This could be set up as a top level system preference, but it does seem like a pretty large amount to support both schemes.

markusd112 commented 5 years ago

It is a mixture of subfolders, not necesseraly as your example (Author / Book). The important thing is, that you see the real folder structure like in a file browser where you can select the right folder, where the MP3 files of the audiobook are placed.

e.g.:

/MP3/audiobooks/claudio/Die Bibel/1_firstchapter.mp3
/MP3/audiobooks/claudio/Die Bibel/2_secondchapter.mp3
......
/MP3/audiobooks/claudio/Er ist wieder da/001_intro.mp3
/MP3/audiobooks/claudio/Er ist wieder da/002_imHinterhof.mp3
.....
/MP3/Die Zeit/DIE ZEIT 012019/01_harald martenstein.mp3
/MP3/Die Zeit/DIE ZEIT 012019/01_feuilleton.mp3
.....
/MP3/Die Zeit/DIE ZEIT 022019/02_frauen an die macht.mp3
/MP3/Die Zeit/DIE ZEIT 022019/02_dossier.mp3
/MP3/Die Zeit/DIE ZEIT 022019/02_intro.mp3

and so on.

For my opinion it should be possible to simply switch the view: in one view you see your library based on IDv3 tags, and in the second view you see the folder structure where you can select the desired folder which you want to listen

thw0rted commented 5 years ago

Has there been any movement on this? I'm finally getting to the point where I have a double-digit number of books on the phone and it's a bit of a hassle to find them, plus since they're all single-file books I'm making a bunch of extraneous one-file folders. I'd really like to have the option of browsing my collection by author-first, or title, or listened-state, and it would be nice to be able to just dump a bunch of single-file books into one folder without worrying about structure.

0rAX0 commented 5 years ago

I'm not sure what's blocking this now, I had an initial design on Figma with only @PaulWoitaschek tagged for a long time but I don't think he saw it. I should have probably added it here anyway. So here's what I have design-wise and feedback welcome as always:

Voice_ Onboarding1 Voice_ Onboarding2 Voice_ Onboarding3

There should be a final step where you see how many books were picked up and whether or not you want to add more.

thw0rted commented 5 years ago

I like the Stepper design and it's very clean and friendly. But it doesn't address the core storage layout issue that's discussed here and in a number of the linked issues. What I'm talking about is, maybe I have /AudioBooks/Some Series/book1/thebook.m4a, (or thebook-chapter1.mp3, etc), or maybe I want author/book, or even author/series/book, etc etc. I also might want series/book1.m4a, series/book2.m4a, etc, with multiple single-file books in a single directory.

The fundamental problem is the conflict between a convention-over-configuration approach, where the app has a slick no-buttons interface and Just Works, versus the freedom to allow the user to choose how to arrange their files on disk. I think a good compromise would be to use a hybrid approach, where the app makes certain assumptions about how files might be laid out, then checks those assumptions against indicators like folder nesting depth and the files' ID3 tags.

Maybe storage layout needs to be its own issue. What do you think, @PaulWoitaschek @0rAX0 ? Would you be open to allowing more/different storage layouts?

0rAX0 commented 5 years ago

@thw0rted I can probably figure out a way to lay that out in a user-friendly way on the adding screen, although, I would have to really think about your suggestion. But since I'm only drawing stuff, I think we should wait for @PaulWoitaschek's input, after all, he's the one who's turning everything into code.

With that said, I know from the years I spent around the Linux community that you can't please everybody nor take every use-case into account, and if you try you will end up with an awful mess that probably works but has like a million buttons and settings, and no matter how you think ahead, someone would probably think of an exotic use for your app that you never thought existed and ask that you modify it for them.

The best way to go right now is to gather most use-cases, figure out the best/most common, design around it, incorporate that into the app, and update it so that it guides the users into modifying their directories' structures to Voice-friendly ones and that's it.

thw0rted commented 5 years ago

I agree, it makes sense to collect use cases and talk about what's most common. Maybe Paul would like to start collecting anonymized usage data so he can see how people actually lay out and label their content in the wild?

This mixes up a few "axes" of use cases but off the top of my head:

0rAX0 commented 5 years ago

Thanks for summing that up @thw0rted !

I was thinking we could figure out a pattern from all that. For example, the 1st level after the root directory is usually the author, channel, source. Then, it's usually the book, series, show. Then it's chapters, or seasons. Also, usually the last folder that contains the playable files is most likely the the one to care most about and show.

But then, I thought, why not take the guessing work out of it and let the users pick the best definition for that folder. We still need to figure out a 'best way' to pick up the folders/files but we could let the users fine tune the added items so that Voice could deal with them properly.

iTunes actually does something like that. If you add an MP3 to the library it would usually treat it like any other MP3, unless you give it extra info later using Options > Media Kind

Screenshot 2019-08-27 13 25 41

I'm thinking, we can have the core Voice behave as usual, but when some use case (that makes some sense) arises it can be added as a new "media kind".

Edit: "media kinds" that are defined have to have the corresponding directories follow some pattern to be used, so users would still need to modify their folders structures when needed.

SenorSmartyPants commented 4 years ago

What's the status/priority of this issue? Any progress?

I love Voice as a player, just wish it would handle author/series/book folder structure.

0rAX0 commented 4 years ago

Hey @SenorSmartyPants, I stopped working on it when Paul "disappeared' so the status is 'hiatus' for the moment. And I honestly have no idea what @PaulWoitaschek is planning for Voice.

PaulWoitaschek commented 4 years ago

I did disappear? I don't feel disappeared.

newhinton commented 4 years ago

@thw0rted i did some work on the audiobook/author problem, maybe you can use the code from here: #768

thw0rted commented 4 years ago

Thanks for the pointer -- I'm probably not going to switch to custom builds just for this, but it's good to know it's out there. At some point it would be nice to have the option of organizing my audiobooks folder a bit better.

MagTun commented 4 years ago

I agree with @thw0rted, it would be nice to be able to put the audiobooks inside theme/author folders and to only add one folder in Voice [as a "folder with multiple books"]: the parent folder of those "theme/author folders"

audiamus commented 4 years ago

What is the current state here if I may ask? If no new design has been implemented yet - at least that's my guess trying the current version - my suggestion would be:

Let the user select a root folder. Recursively iterate the folder hierarchy below that root as a tree of nodes and leafs. If the search discovers a match - either a recognized audio file or a playlist - treat this folder and anything below (sub-folders may contain playlist tracks) as a single audiobook, i.e a "leaf" in the tree, and continue searching with the next "node" folder.

This way you are independent of the user's folder organizing scheme. He/she can use any scheme, with or without extra levels for genre or author.

That's also the method other players like VLC are using.

thw0rted commented 4 years ago

I do like the idea of looking at folders recursively so I can organize by author but if you don't look at the file metadata at all, you still can't put more than one book in a folder. All my books are in single M4A files, so I'd love to just have a folder per author or series, with all the books in it, without having to make superfluous folders per book (with a single file in each), which is what I do now.

newhinton commented 3 years ago

@thw0rted I think your structure is one of the hardest to implement, without major changes. I have build a 'smart' scan, that properly scans recursive folders to add everything it finds, however: differentiating audiobooks only by filename/directory basically excludes multiple audiobooks in a single folder. For that, the scanner would need to also look at the id3tags, which it does not do afaik.

However, my 'smart' implementation (and i use the term smart here very loosely) is able to cover most cases that occur. The downside is that it relies on a list of keywords that indicate a group of books, eg. CD or PART

So for your case: as long as the filenames are in order, you end up with a single book for the whole series, and each book would be a 'chapter'

thw0rted commented 3 years ago

How about this: when you encounter a folder full of files,

ETA: I'm not sure how to handle multipart books with spelled out chapter names, because the differences between Harry Potter and the Sorcerer's Stone - Chapter 1 The Beginning.mp3 vs Harry Potter and the Sorcerer's Stone - Chapter 2 A Hairy Biker Arrives.mp3, look a lot like those between JK Rowling - Harry Potter 1 The Sorcerer's Stone.m4a and JK Rowling - Harry Potter 2 The One With The Big Effing Snake.m4a.

newhinton commented 3 years ago

I already do the part with regex for folders (okay, i dont use regex at the moment, just contains()) and it works pretty good. So, detection of a single book is not an issue, but as you mentioned, multipart books that are not stored in seperate folders break still wont work.

This breaks:

JK Rowling/Harry Potter and the Sorcerer's Stone Part 1.mp3
JK Rowling/Harry Potter and the Sorcerer's Stone Part 2.mp3
...
JK Rowling/Harry Potter and the Sorcerer's Stone Part 33.mp3
JK Rowling/Harry Potter The One With The Big Effing Snake.mp3

Since they are all in the same folder, it assumes JK Rowling is a single audiobook, and therefore we mix those two books.

JK Rowling/Harry Potter 1/The Sorcerer's Stone Part 1.mp3
JK Rowling/Harry Potter 1/The Sorcerer's Stone Part 2.mp3
...
JK Rowling/Harry Potter 1/The Sorcerer's Stone Part 33.mp3
JK Rowling/Harry Potter X/The One With The Big Effing Snake.mp3

This i can detect properly, we get two different books. However, this does not require any smarts. So what does? This:

JK Rowling/Harry Potter 1/CD 1/The Sorcerer's Stone Part 1.mp3
JK Rowling/Harry Potter 1/CD 1/The Sorcerer's Stone Part 2.mp3
...
JK Rowling/Harry Potter 1/CD 4/The Sorcerer's Stone Part 33.mp3

If we do it naively, we end up with 4 audiobooks, one for each CD. This is not optimal. But with a little regex and a list of keywords, we can add them together.

I think we can completely remove the old "single book" and "collection" types, since my pr can actually handle both, without the user needing to know how or what those types mean.

Even if we dont find a solution for "multiple books in same folder", this would improve the app anyway if we can make the CD stuff work.

The PR: #1072. The last commit has a working version that can only detect CD's, but it is easily extended to different keywords in different languages.

Edit: sorry, i think i went a bit offtopic and summarized what i did, but maybe it is helpful to anyone anyway

Edit2: If anyone has additional, very strange patterns that are maybe not working, please provide examples so that we can think about them

Edit3: After reading the thread again, the only thing that i think is nearly impossible is the podcast/recurring format detection, since that relies again on the displayed name in the app, not the scanning. I don't think voice was designed to support that kind of content

Edit4: Another example on what wont work, but this is far off:

JK Rowling/Harry Potter 1/CD 1/The Sorcerer's Stone Part 1.mp3
JK Rowling/Harry Potter 1 - CD 1/The Sorcerer's Stone Part 2.mp3

That will create two audiobooks.

thw0rted commented 3 years ago

Sounds like you've thought this through. I'd still like some option for

Harry Potter/
  1. The Sorcerer's Stone.m4a
  2. The Big Snake.m4a
  3. Uncle Werewolf.m4a
  ...

because it's a lot easier to manage in my phone's file manager than making a bunch of extraneous folders, but I understand if the need to reduce the number of user-facing buttons / options wins out.

newhinton commented 3 years ago

I don't think it will be possible to archieve your goal with folderbased detection, at least not to my knowledge. That probably requires switching to metadata-based detection.

One possibility would be to apply the "part" detection from your post, but as you said, it breaks as soon as the filename does not contain any "chapter"-identifier like a tracknumber or similar.