Would you like to mentor a GSoC student to work on chapter reading support in TagLib? (originally for Amarok)

Lukáš Lalinský lalinsky at gmail.com
Mon May 6 04:26:15 UTC 2013


I'm planning to do some traveling this summer, so I'll be probably
quite often not available at all for a couple of days in a row. I can
help with TagLib problems/questions, but I will probably not have
enough time to be a regular mentor.

Lukas

On Sat, May 4, 2013 at 6:00 PM, Matěj Laitl <matej at laitl.cz> wrote:
> Hi TagLib developers,
> Google Summer of Code student proposal deadline was yesterday and we're quite
> happy that we've got a fair number of good proposals in Amarok. On the other
> hand we unfortunately don't have enough mentoring manpower to mentor all the
> good proposals (doesn't necessary mean this one).
>
> One of the proposals is "Implementing CUE sheet and chapter support in Amarok"
> by Abhinandan Ramprasath, which may (despite the title) touch more TagLib than
> Amarok.
>
> Perhaps one of you (Lukáši?) would be able to help us (and TagLib) by
> mentoring this proposal? Some reasons supporting it:
>  * most solid bits of the proposal are IMO the ones touching actual metadata
> parsing, parts about Amarok integration are more brief. Student's past
> involvement touched also the metadata reading bits.
>  * chapter reading from MP4 (QuickTime and Nero subformats), Ogg files and
> embedded CUE sheet reading from FLAC (and perhaps wavpack) files would be of
> good benefit to whole TagLib community, not just Amarok.
>  * Amarok integration points in the proposal could be replaced by implementing
> cue or chapter reading from more file formats (already mentioned above) as
> already outlined in the proposal, should be student agree on this.
>
> Formally, applications for Amarok are under KDE and given TagLib's strong ties
> with KDE, this shouldn't be a problem. OTOH mentoring is quite a commitment
> with reports that it takes ~1 hour a working day during the coding period
> (June 17 - September 29). [3][4]
>
> What do you think? We'd be glad to receive any indication from you by this
> Monday (as it is the date we have to coordinate GSoC proposals within KDE)
>
> Regards,
>         Matěj Laitl of Amarok
>
> -----------
> Original idea at [1], discussion with student about the proposal at [2], copy
> of the proposal follows.
>
> [1]
> http://community.kde.org/GSoC/2013/Ideas#Project:_Unified_CUE_File_and_Audiobook_Chapter_Support_in_Amarok
> [2] https://mail.kde.org/pipermail/amarok-devel/2013-April/012031.html and
> https://mail.kde.org/pipermail/amarok-devel/2013-May/012078.html
> [3] https://code.google.com/p/google-summer-of-code/wiki/AdviceforMentors
> [4] http://en.flossmanuals.net/gsocmentoring/
>
> On 3. 5. 2013 Abhinandan Ramprasath <abhiin1947 at gmail.com> wrote:
>> This is the proposal I'm submitting for GSoC. Thanks to Matej for the
>> reviews.
>>
>> *Short Description:*
>>
>> Amarok currently has very limited CUE sheet support
>> and no support for chapters. My project aims at detecting chapter markers
>> of various formats by implementing them in TagLib and using it to Amarok's
>> advantage. Also, Integrating CUE sheets with Amarok so that they work
>> seamlessly.
>>
>> Basic Details:
>>
>> Name: Abhinandan Ramaprasath
>> Email Address: abhiin1947 at gmail.com
>> Freenode IRC Nick: abhiin1947
>> IM Service and Username: Gtalk - abhiin1947
>> Location (City, Country and/or Time Zone): Chennai, India, UTC+05:30
>> Github: https://github.com/abhiin1947/
>> Proposal Title: Implementing CUE sheet and chapter support in Amarok
>>
>> Motivation for project:
>>
>> Audiobooks are usually quite lengthy and go on for hours. It is not always
>> possible for people to finish listening to audiobooks in one go. Chapter
>> support is an important feature in modern audio players. Trying to find the
>> part of the audiobook that the user wants is an arduous task. Since Amarok
>> already provides a bookmark to the location where the user left off,
>> addition of chapter markers would make navigating an audiobook as easy as
>> flipping through a book.
>>
>> Chapter markers otherwise have been a demanded feature ( with over 40+
>> wishes ). It would be very useful in enhanced podcasts
>> <http://en.wikipedia.org/wiki/Podcast#Enhanced_podcasts> to be able
>> to jump to various chapters/parts with just a click of a button.
>>
>> CUE sheeted music, on the other hand, is very popular, and not providing
>> proper support ruins the music experience. It has also been a requested
>> feature for quite a long time (1) ( 700+ votes ). Many bugs have been
>> reported (2) about Amarok’s lack of support for CUE sheeted music.
>> Implementation of CUE sheet support has been delayed over releases (from
>> 2.6 to 2.8) and I would like to complete it this Google Summer of Code.
>>
>> Goals:
>>
>> The goals of my project would be to
>> 1) Implement QuickTime chapter support in TagLib.
>> 2) MP3 chapter support in Amarok.
>> 3) Implement OGG chapter support in TagLib.
>> 4) Display these chapters in Amarok.
>> 5) Integrate CUE sheet support with collection manager and Amarok for a
>> seamless music experience.
>> 6) Implement support for NeroChapter type in TagLib
>> 7) Solve bugs related to my project along the way (3).
>>
>> Implementation Details:
>>
>> The project involves making changes in both TagLib and Amarok repositories.
>> I would like to divide the project into 5 parts.
>>
>> *1. QtChapter support in MP4/M4A/M4B files*
>>
>> The first part is implementing the QtChapter (Qt = QuickTime in this
>> proposal) support in MP4/M4A/M4B files. As per the Apple
>> docs<https://developer.apple.com/library/mac/#documentation/QuickTime/qtff/Q
>> TFFChap2/qtff2.html>, the Qt (QuickTime) chapter support can be achieved by
>> reading the “trak” atom which contains the “chap” data. This trak atom
>> contains the text track which contains the chapter information. The
>> indicated text track should contain a “stbl” atom ( basically a table )
>> which would contain offsets to the location in the file that contain
>> chapter title in the file. Reading data at these offsets give information
>> about chapter titles. The time at which each chapter marker occurs can be
>> easily calculated using the “bitrate” of the audiofile. These would be the
>> changes that I would make in TagLib to support QtChapters (QuickTime).
>>
>> This should also solve part of the bug
>> <https://bugs.kde.org/show_bug.cgi?id=144849>. This merge will provide
>> support for the Apple Enhanced Podcast ( M4A ) as well.
>>
>> The changes in Amarok include, displaying the chapter markers to the user
>> in the form of bookmarks or Multi-Tracks.I plan on reading the chapter
>> information in Amarok the same way I implemented it in the bug
>> fix<https://git.reviewboard.kde.org/r/109256/>attempt. For actually
>> showing them on Amarok I’ll use the BookmarkGroupPtr
>> to create a new bookmark group and add chapter pointers to it in the form
>> of URLs. I would like to also store the chapter information in the database
>> as well.
>>
>> *2. Show MP3 chapter markers in Amarok*
>>
>> Thanks to a recent pull request
>> <https://github.com/taglib/taglib/pull/173>by krejclu6, MP3 chapter
>> support has been implemented in TagLib. This small
>> part of the project is to use this framework to show MP3 chapter markers in
>> Amarok. The implementation of this in Amarok will be same as mentioned
>> before.
>>
>> *3. Implement OGG chapter support*
>>
>> OGG chapter support is something TagLib still lacks. According to XIPH's
>> docs <http://wiki.xiph.org/Chapter_Extension>, chapter support in OGG is
>> very straightforward. The chapter data is found in the comments of the file
>> along with the metadata.
>>
>> *4. **Implement CUE Sheet support*
>>
>> The fourth part of the project would be to implement complete CUE sheet
>> support.
>>
>> *What is CUE sheet?*
>>
>> CUE sheet contains information related to the album, the main filename and
>> the time offsets at which each track occurs.
>>
>> *What needs to be done?*
>>
>> I propose to make this change in the KUrl. Parts of the Url would have data
>> about the Base File, Time-Offset and Duration of the track (after a “?” or
>> “#” at the end, if not possible a new protocol?). Then these URL’s would be
>> interpreted in the UmsCollection or SqlCollection classes as separate Track
>> files. This would also enable storing the details of each song in the
>> database, hence there is no need to access the CUE file every time.
>>
>> Amarok already has a basic CUE sheet support, it can read CUE sheets added
>> manually through the browser or from a CDROM. I would like to integrate
>> this better with the CollectionScanner ( the way it is supposed to work,
>> highlighted in the bug
>> <https://bugs.kde.org/show_bug.cgi?id=187587>report's comments ). The
>> scanner will automatically recognize these CUE
>> files and record them as separate tracks in the database as mentioned
>> above. Any changed metadata in the file would be stored in the KUrl.
>>
>> *5. Support for NeroChapter type in MP4*
>>
>> The last part of the project would be to implement support for the
>> NeroChapter type in MP4. Since, this is not so popular, I would like to
>> keep this the last part of the project. This involves more changes in
>> TagLib than Amarok. The chapter track information is found under the “udta”
>> atom. This part of the project would aim at automatically detecting the
>> type of chapter present in the given file, decoding the chapter data and
>> providing it neatly.
>>
>> Tentative Timeline:
>>
>> June
>> < GSoC begins >
>>
>> week 4: Community Bonding Period - Ask for improvement suggestions and get
>> to know the Amarok community.
>>
>> July-
>>
>> week 1: Create Abstract Classes in TagLib for MP4 chapter support ( This
>> will be useful for the last part of the project as well ). Implementing
>> QtChapter (QuickTime) Support.
>>
>> week 2: Finish implementing QtChapter (QuickTime) Support in TagLib.
>> Implement OGG chapter support.
>>
>> week 3: Modify the database and store the chapter data in it.
>>
>> week 4: Tweak UI in Amarok to display the chapter markers (MP3, MP4,
>> OGG). Start Implementation of CUE sheet support.
>>
>> < Mid-term  - Complete chapter support in Amarok>
>>
>> August-
>>
>> *week 1*: Integrate CUE sheet reading with the scanner and automatically
>> detect that these are separate track files and add them to the collection.
>>
>> *weeks 2 and 3*: Implement changes in KUrl. Make modifications in
>> SqlCollection and other methods and classes that use url(TrackPtr ,
>> playback and other controllers).
>>
>> *week 4*: Make modifications in UmsCollection to support CUE sheets as well.
>>
>> September-
>>
>> *week 1*: Implement modules that allow the user to change the metadata of
>> CUE-sheeted tracks. I do not plan on making these changes in the CUE sheet
>> instead store them locally/in the url so that Amarok can display them
>>
>> *week 2*: Finish CUE sheet support in Amarok.
>>
>> *week 3*: Implement NeroChapter support in TagLib.
>>
>> < pencils down >
>>
>> *week 4*: Testing and resolving any bugs.
>>
>> Do you have other obligations from late May to early August (school, work,
>> vacation, etc.)?
>>
>> No. I can work upto 50 hours a week, 6-8 hours in the weekdays, and in the
>> weekends too, if required, or if I am possessed with the compulsive urge to
>> get something done ;) College starts early August, but it’s early in the
>> semester, and the course work would be extremely light.
>>
>> About Me:
>>
>> I am an Information Technology undergrad at SSN College of Engineering. I
>> am comfortable writing code in C/C++/Python. I was introduced to Amarok
>> when my friend suggested it after looking at my android app
>> Lyricize
> <https://play.google.com/store/apps/details?id=com.festalize.LyricMatch>.
>> It totally drew me in. I'd love to make any contribution that makes
>> music more enjoyable. I am also an enthusiastic web and android developer,
>> and a great fan of FOSS. On a Foreign Exchange trade related project I
>> recently worked on, I built a scraper
>> <https://github.com/makkarlabs/stockscrape>, which I open sourced, that
>> scrapes data from the National Stock Exchange website, and publishes it as
>> a JSON API. I’ve also contributed to the Haiku OS.
>>
>> Introduced to C and C++ at the age of 8, I continued to work on programming
>> challenges, web and mobile related projects during school and college to
>> sharpen my skills. I have learnt to code in languages such as java, php,
>> ruby, node(javascript), etc. In the hackathon conducted by KRDS in 2012, I
>> created a location guessing Facebook game which won the second
>> prize<http://lighthouseinsights.in/a-chat-with-the-krds-india-facecode-hacka
>> thon-winners.html>. I also was selected as one of the winners of Firefox OS
>> hackathon conducted by Mozilla for creating a collaborative browser across
>> platforms called BrowseWithMe using nodejs (
>> server <https://bitbucket.org/abhiin1947/bb_monkey/src>,
>> client <https://github.com/makkarlabs/bbmonkey> ). I created a
>> gesturecontrolled web app
>> Fliptube <https://github.com/makkarlabs/fliptube>, a YouTube client where
>> mobile users could flip through videos with ease, for the Yahoo! Open hack
>> 2012 and it was selected as top 10 hacks of the night (out of 180+ hacks).
>>
>> Am I comfortable working independently under a mentor or supervisor?
>>
>> Yes. I have been an intern for the ULaw Software Foundation based in Canada
>> and time zones aren’t really a problem at all.
>>
>> After GSoC:
>>
>> After GSoC I plan on continuing to fix bugs and code more features for
>> Amarok and Taglib. I intend to learn about more multimedia related file
>> formats and improving support in those areas.
>>
>> One area I intentionally did not mention is the implementation of matroska
>> chapter support. I plan on implementing this after GSoC as I feel it would
>> be too much for 3 months. It is similar to the chapter markers in OGG
>> Vorbis.
>> Another requested feature is the support for embedded CUE files. I have
>> explained these more clearly in the "Additional Information" section. This
>> is one feature that requires a lot more time so, I plan to work on this
>> after GSoC.
>>
>> My experience with Amarok:
>>
>> I started out my Amarok journey by trying to solve bug 240409 (which turns
>> out to be a big part of my proposal ). It was initially marked as a junior
>> job. I tried to implement chapter detection using library mp4v2 ( patch:
>> https://git.reviewboard.kde.org/r/109079/ ) which was eventually rejected.
>> After research and learning, I implemented support for chapter detection in
>> Amarok by using mp4atom.h from taglib explicitly ( patch:
>> https://git.reviewboard.kde.org/r/109256/ ). It was rejected because it was
>> a technical preview. I have been busy with exams since, and have not been
>> able to finish it.
>>
>> Two other recent bug fixes that are not accepted yet -
>> https://git.reviewboard.kde.org/r/110243/ ,
>> https://git.reviewboard.kde.org/r/110150/
>>
>> Additional Information:
>>
>> Embedded CUE sheets are CUEs that are stored within the audio files. There
>> are 2 formats in which they occur, FLAC and WAVPACK. The FLAC embedded CUE
>> sheet has its own tags whereas the WAVPACK uses the apev2 tag. The task
>> would be to implement CUE detection in TagLib and then use them to
>> implement it in Amarok.
>>
>> External Links:
>>
>> (1) - https://bugs.kde.org/show_bug.cgi?id=187587 reported 2009
>>
>> (2) - https://bugs.kde.org/show_bug.cgi?id=187587 ,
>> https://bugs.kde.org/show_bug.cgi?id=286089 ,
>> https://bugs.kde.org/show_bug.cgi?id=294136 ,
>> https://bugs.kde.org/show_bug.cgi?id=270003 ,
>> https://bugs.kde.org/show_bug.cgi?id=279234 ,
>> https://bugs.kde.org/show_bug.cgi?id=230272
>>
>> (3) - https://bugs.kde.org/show_bug.cgi?id=240409 ,
>> https://bugs.kde.org/show_bug.cgi?id=187587 ,
>> https://bugs.kde.org/show_bug.cgi?id=286089 ,
>> https://bugs.kde.org/show_bug.cgi?id=270003 ,
>> https://bugs.kde.org/show_bug.cgi?id=294136 ,
>> https://bugs.kde.org/show_bug.cgi?id=144849
>>
>> (4) - *https://bugs.kde.org/show_bug.cgi?id=144849*
> _______________________________________________
> taglib-devel mailing list
> taglib-devel at kde.org
> https://mail.kde.org/mailman/listinfo/taglib-devel


More information about the taglib-devel mailing list