Karaoke Editor https://laurenjp.knight.domains Sun, 01 May 2022 17:46:02 +0000 en-US hourly 1 https://wordpress.org/?v=5.9.3 https://laurenjp.knight.domains/wp-content/uploads/2022/02/cropped-116-1163114_live-music-icon-live-music-icon-png-transparent-32x32.png Karaoke Editor https://laurenjp.knight.domains 32 32 Hey, Look Ma, I Made It https://laurenjp.knight.domains/uncategorized/hey-look-ma-i-made-it/ https://laurenjp.knight.domains/uncategorized/hey-look-ma-i-made-it/#respond Sun, 01 May 2022 17:46:02 +0000 https://laurenjp.knight.domains/?p=248

Title Song: Hey, Look Ma, I Made It

Title Artist: Panic! At The Disco

Song Link: https://youtu.be/Dpcbiox_cTo


Well folks, I made it! Presentations are over and I couldn’t be happier with how it went. This week I’ll have my Defense for my project, but then it’s over. The journey will come to an end.

There isn’t really anything else to update on, but if you would like to view my presentation or download my project for yourself, you can do so here.

Additionally, if any seniors are reading this in the future, here is some advice to you. Enjoy every moment of your presentation and just the project in general. It’s okay to be nervous about your presentation, and it’s okay to feel like you didn’t accomplish enough on your project, but don’t let that overshadow the things that you did accomplish or the support from those around you on presentation day. The presentations are a way to show off all of the hard work that went into the project, so be a little selfish and brag a bit. You deserve it!

Anyway, I don’t know if I will be posting on here anymore after this. So, in case I don’t update again, thank you for following me on my journey this semester, it has been an amazing, though sometimes super frustrating, experience. Again, thanks for reading all of my silly updates, I hope you’ve enjoyed them!

So long, farewell,

Lauren (5/1/2022)

]]>
https://laurenjp.knight.domains/uncategorized/hey-look-ma-i-made-it/feed/ 0
The Final Countdown https://laurenjp.knight.domains/uncategorized/the-final-countdown/ https://laurenjp.knight.domains/uncategorized/the-final-countdown/#respond Mon, 25 Apr 2022 20:54:50 +0000 https://laurenjp.knight.domains/?p=229

Title Song: The Final Countdown

Title Artist: Europe

Song Link: https://youtu.be/NNiTxUEnmKI


Well, there’s only one more week before presentations and things are wrapping up nicely. There isn’t much to update on from last week, so this will be brief.

Final touches have been added and finalized and work on the actual presentation has begun. While I also already have some videos of the application, I will continue recording more over these next few days in order to make sure I have updated/recent videos. I’ve included a video below of the progression through the application from beginning to end.

Other than that, I added instructions to each section of the application as well as the ability to go back to the home screen from anywhere in the application. But that’s about it. I’ve got quite a bit of work to do on the actual presentation now, but the application part is ready to rumble. It seems like just yesterday I was getting my project description and brainstorming ideas, and yet here we are, less than a week away from presentations. I’m excited to finally be able to share all my hard work with everyone, and I hope they enjoy it as much as I do!

Anyway, that’s it for this update. As always, thanks for reading. My next update will come from the other side of presentations (i.e. when they’re over), so future Lauren, if you’re reading this, send some good vibes my way this weekend, I’ll need it! 🙂

Lauren (4/25/22)

Oh, I also decided on a name for my application. I’m calling it Sing With Mi. Mi is the third note in solfège, I like puns, and it’s a karaoke machine so…yeah.


Video:

Song: Tell Me Ma (Belfast City) by Rend Collective

]]>
https://laurenjp.knight.domains/uncategorized/the-final-countdown/feed/ 0
Up! https://laurenjp.knight.domains/uncategorized/up/ https://laurenjp.knight.domains/uncategorized/up/#respond Tue, 19 Apr 2022 16:16:32 +0000 https://laurenjp.knight.domains/?p=222

Title Song: Up!

Title Artist: Shania Twain

Song Link: https://youtu.be/msizW5q4vE8


Houston, we have a progress bar! This week I was able to finally figure out how to get the progress bar to work correctly and was also able to finish connecting all of the pieces.

It did, however, take quite a few trials and errors to figure out how to get the progress bar working. As mentioned last week, I had been trying to do it based on what percentage of the total length of the line had elapsed, but the math would sometimes get wonky and was overall inconsistent. I also tried using the system time to calculate how much time had passed since the line started, but that also got wonky and wasn’t working correctly. So, I ultimately decided to adjust the SongTimer tick function and make it seem as if the progress bar was moving based on a percentage.

The SongTimer tick function now makes one call to the audioFile.CurrentPosition function and stores it into a TimeSpan that can be used at other points throughout the tick function. By reducing the number of calls to get the current position, there are no missed “ticks” of the timer. Additionally, I changed how I was moving the progress bar with each tick of the timer.

Using the length of line, I calculate how much the progress bar needs to move every half of a second (500 milliseconds, 5 ticks). Then, in the tick function, I keep track of how many ticks have passed and if it has been 5 ticks, then the progress bar value increases by the calculated amount. It doesn’t work quite the way I had hoped for and sometimes reaches the end a little before the lines switch, but ultimately it works quite nicely and I’m happy with the final version.

I’ve included two videos below of the now functioning progress bar. One of them has the value of the progress bar moving every second (1000 milliseconds, 10 ticks) which was my first new solution, and the other has it moving every half second (500 milliseconds, 5 ticks) which was my final solution. I don’t have a video yet going through the entire program, but there will be one soon.

With presentations just over a week away, I’m now focused on creating my presentation, recording demonstration videos as backup, and putting any and all final touches on my project. It has been really nice to finally be able to put everything together and see it working cohesively and I can’t wait to show everyone the finished program.

Well, that’s it for this update. As always, thanks for reading!

Lauren (4/19/22)


Videos:

1 Second Update Time
Half Second Update Time

Sweet Caroline has been stuck in my head so much this past week, I need to start using different songs when I test! Lol

]]>
https://laurenjp.knight.domains/uncategorized/up/feed/ 0
I Won’t Back Down https://laurenjp.knight.domains/uncategorized/i-wont-back-down/ https://laurenjp.knight.domains/uncategorized/i-wont-back-down/#respond Mon, 11 Apr 2022 21:14:07 +0000 https://laurenjp.knight.domains/?p=216

Title Song: I Won’t Back Down

Title Artist: Tom Petty And The Heartbreakers

Song Link: https://youtu.be/nvlTJrNJ5lA


This week was, for the most part, successful and productive. I was able to connect all of the parts together, except for the actual singing part. Thankfully I was able to copy and paste all of the controls from my individual parts into my full project. This meant that I didn’t have to create each control individually again, saving me quite a bit of time. This was a major step for this project as I had previously been using hardcoded file paths and running each part separately.

I was also able to implement the “-15 seconds” and “+15 seconds” buttons on the karaoke part. This was relatively simple because I just had to copy what I had written in the timestamp section. I’ve included a video below of this below.

There was, however, a roadblock that I ran into. Trying to implement a progress bar to indicate to the user how long a line of lyrics was proved to be more difficult than anticipated. The first step in my original idea was to use the timestamps to calculate how long a line was. This worked just fine. The next step was using the timestamp for the next line and the current position of the audio file to determine where the song was at within that line. Then, I would take that number and calculate what percentage of the total length of the line it was and represent that number on the progress bar. But this is where things got wonky. Since I was doing most of these calculations within the tick function of the SongTimer, the math wasn’t always accurate. So, the progress bar didn’t work consistently between lines and the math would sometimes generate a percentage higher than 100.

Having met with Drs. McVey, Pankratz, and Diederich this morning about this issue, I am now working on solving this issue by doing less “in the moment” calculations to prevent inconsistency and inaccuracies. Hopefully I will be able to wrap this up this week and connect the singing piece to the rest of the program.

Anyway, that’s it for this update. I’ve included some screenshots / videos of the wonky progress bar and the welcome screen of the full project below. As always, thanks for reading!

Lauren (4/11/22)


Screenshot:

I will eventually be changing the “welcome” to the name of the program, but I haven’t thought of anything creative to call it yet.

Videos:

On some of the lines, you’ll notice that the bar stays at zero for a while. This is when the percentage that is being calculated is greater than 100.

-15 and +15 seconds demonstration

]]>
https://laurenjp.knight.domains/uncategorized/i-wont-back-down/feed/ 0
All The Small Things https://laurenjp.knight.domains/uncategorized/all-the-small-things/ https://laurenjp.knight.domains/uncategorized/all-the-small-things/#respond Sat, 02 Apr 2022 17:15:39 +0000 https://laurenjp.knight.domains/?p=212

Title Song: All The Small Things

Title Artist: Blink-182

Song Link: https://youtu.be/obVyfnxL6BI


This is going to be a quick update! On Thursday (3/31/22), we gave walkthrough presentations of our projects. This gave us the chance to show our current progress and to receive feedback, suggestions, and advice about moving forward.

I received some nice feedback on some of my design and functionality choices which was very helpful. One of the suggestions was to have “default timestamps” if the user didn’t want to go through the entire process and place all of the timestamps. I hadn’t really thought about this before but had thought about allowing the user to use LRC files (standard format of file that karaoke machines read) that they may have gotten elsewhere instead of always having to create their own. While I didn’t have that implemented at the time, the suggestion of default timestamps made me realize that this feature was something that I needed to have in the final product.

Another suggestion I received was to add the “-15” and “+15” buttons to the actual karaoke part of the program as well. While people usually don’t jump backwards or forwards when they’re singing karaoke, I think this will be a nice feature to have in case a user wants to utilize it for practicing a song or to sing their favorite part over and over. It is also something that will be very easy to add since I have the function to do so already written in the timestamping section. I’m still playing around with what the number is actually going to be for these buttons (5?, 10?, 15?, 30?) but it would be easy to change if I decide differently.

Finally, I received some feedback on a few design choices that I made. The first were the buttons on my main/welcome screen. The current order (from top to bottom) is Create, Edit, Sing, and About. It was suggested that I move the ‘Sing’ button to the top of the list since I’m making a karaoke machine. I’m going to play around with the idea a bit more this next week and come up with various designs. For now, however, I’m going to keep it how it is as I’m just trying to get all of my pieces connected. The other design feedback I got was on the textbox that shows the current time in the song. I was asked if it would be possible to remove the milliseconds from the timespan when displaying that time. I totally agreed with this and actually fixed it within a day as I also disliked how the milliseconds looked with the time.

Anyway, that’s all for this update. I’ll have another progress update in the next day or so, but that’s it for now. As always, thanks for reading!

Lauren (4/2/22)


Enjoy this meme since I don’t have any links, videos, or screenshots to show!

computer science Memes & GIFs - Imgflip

]]>
https://laurenjp.knight.domains/uncategorized/all-the-small-things/feed/ 0
Nothing’s Gonna Stop Us Now https://laurenjp.knight.domains/uncategorized/nothings-gonna-stop-us-now/ https://laurenjp.knight.domains/uncategorized/nothings-gonna-stop-us-now/#respond Tue, 29 Mar 2022 16:25:58 +0000 https://laurenjp.knight.domains/?p=202

Song Title: Nothing’s Gonna Stop Us Now

Song Artist: Starship

Song Link: https://youtu.be/YR5ApYxkU-U


While I wish that this title would be accurate for the rest of the semester, I know that won’t be the case. But for this week, it is, and I’m going to enjoy my success in blissful ignorance for a little longer.

Anyway, I was able to finally figure out my issue with repositioning within the audio. As it turns out, the file reader that I was originally using to play my audio (MediaFoundationReader) doesn’t like repositioning and is what was causing me all of my issues. So, now I am using AudioFileReader in order to play the user’s audio file.

Unfortunately though, this came with some errors of its own. AudioFileReader would throw an exception when trying to play an mp3 which was not ideal as mp3 is the most common and popular audio file format. So, I did some more digging online to see if there was any way that I could work around this. There were a few sites that talked about writing the contents of the mp3 file to a memory stream and then reading it from there, but all of those used MP3FileReader which also did not want to work with any of the mp3 files I tried. I eventually decided to just have the user “convert” the mp3 into a wav file by prompting them (I’ll include a screenshot below of what the MessageBox says). This wasn’t my ideal solution, but it will have to suffice.

Additionally, now that repositioning within the audio stream is working, I was able to finish up the undo/redo functionality (FINALLY!) within the editor. Thankfully everything that I have been trying to do with MediaFoundationReader to reposition the audio worked perfectly with AudioFileReader so I only had to clean up the code a bit to get it working smoothly. I’ve included a video below as to how this looks during the editing process.

There were a few other decisions and changes that I made during this past week. The first is that I decided to make the timestamp textbox read only. I originally wanted the user to be able to change the timestamps within the textbox on their own in case they were only a little bit off on something, but after some thought, I realized that it would be really hard to validate the data that they could possibly type, and not really worth it in the grand scheme of things. But, with this change, I decided to add “-15 Seconds” and “+15 Seconds” buttons. This allows the user to jump forwards or backwards 15 seconds in the song in order to change a timestamp without completely removing it with the undo button. I’m not sure if it will stay as 15 seconds, I’ll be getting some feedback from my classmates on Thursday, but the meat of the code would stay the same if the number did change. I’ve included a video below as to how this works as well.

I’ve also have worked a little more on piecing together all of the parts, but again, there isn’t much more than just separate forms opening when buttons are pressed so I don’t have any videos or screenshots of that to share. But, hopefully by next week there will be something of that to show.

Well, that’s about it for this update. My apologizes that it is a day later than normal, but time got away from me yesterday. I’ve included some of the sites that I used over the past week below. As always, thanks for reading.

Lauren (3/29/22)

How is it almost April already?


Sites:

Lots of articles that I just used as research as to why things weren’t working!


Videos && Screenshots

If the user picks an mp3 file, this is the message that appears
Song: Guessing by Against The Current

]]>
https://laurenjp.knight.domains/uncategorized/nothings-gonna-stop-us-now/feed/ 0
Don’t Lose Sight https://laurenjp.knight.domains/uncategorized/dont-lose-sight/ https://laurenjp.knight.domains/uncategorized/dont-lose-sight/#respond Mon, 21 Mar 2022 16:07:25 +0000 https://laurenjp.knight.domains/?p=196 Title Song: Don’t Lose Sight

Title Artist: Lawrence

Song Link: https://youtu.be/VMs-l9Hru-I


Hello again! It’s been a bit since my last update, two weeks actually. Last week was Spring Break and so I took some time to relax, but I was able to make some decent progress on my project these past two weeks.

The first success is that the actual karaoke form now shows the current and next line of lyrics at the same time. The next line is smaller and in a different color to distinguish it from the current line, but still visible. I’ve added a video below of what this looks like at the moment. Just a few notes about the video though, some of the lines will appear to change before that part of the song and that is because I messed up when creating that example and never went back to change it. Another note, ignore the textbox at the top of the form that has a number in it. This is just for testing purposes to tell me what line I am on to make sure things are working correctly. This will be removed in the final version.

The other success is that I started to connect all of the separate pieces that I have been working on. There isn’t much to show yet as all it does right now is open separate, blank forms, but by next week there will be some images/videos of that to share.

The final success is also a failure/current roadblock. The undo/redo functionality along with utilizing the trackbar to scroll through the song have proven to be a challenge. Isolating the scrolling through the song as its own feature works fine and the user is able to jump to any place in the song they desire to. But, in conjunction with timestamping where lines of lyrics start, it doesn’t work as expected. Once a user has placed all of the timestamps for the song, they are able to scroll through to a place in the song in order to more quickly edit any possible mistakes. When scrolling, a function is determining which line the song is now at. While the function correctly determines which line the song should be at, the audio doesn’t match. I’ve included a video as an example of what I mean by this.

A similar thing to what happens with the trackbar when repositioning occurs when undoing and redoing placed timestamps. The current time appears to be where it needs to be (the previously placed timestamp or the newly placed timestamp depending on whether undo or redo occurred), but the audio itself is actually further back or forward than the timestamp indicates. I’ve been reading through a lot of StackOverflow entries and Naudio documentation to try and figure out what the cause of this is, and I think it has to do with the buffer and some kind of offset that occurs when repositioning, but I have yet to try anything out with that as I will be reaching out to Drs. McVey, Pankratz, and Diedrich for some help and suggestions as well. I’m hoping that I can at least get one of these functionalities working so that the user doesn’t have to type any changes themselves, but only time will tell whether this is possible.

Anyway, that’s all for this update. Here’s hoping that these issues can get sorted and working correctly.

As always, thanks for reading!

Lauren (3/21/22)


StackOverflow Entries that I have been Reading:


Videos:

Scrolling demonstration starts at 2:51

Song: Made To Fly by Colton Dixon

]]>
https://laurenjp.knight.domains/uncategorized/dont-lose-sight/feed/ 0
Ratlin’ Bog https://laurenjp.knight.domains/uncategorized/ratlin-bog/ https://laurenjp.knight.domains/uncategorized/ratlin-bog/#respond Mon, 07 Mar 2022 17:58:40 +0000 https://laurenjp.knight.domains/?p=190 Title Song: Ratlin’ Bog

Title Artist: Brigham Phillips and John Herberman

Song Link: https://youtu.be/5QO8bWGNPyo

This past week I felt as if things just kept getting stacked on top of my ever-present list of things to get done (take a listen to the title song to get a sense of what I mean). But, even so, I was still able to make some progress on my project.

My main focus was the undo/redo functionality in the timestamping section. This is one of the most important features of my project, and I knew it was going to take a bit longer to get it functioning properly. This past week proved that thought to be correct.

I’ve played around with a few different ways of making this work. The first was to use two separate stacks, one for undo and one for redo, that I could then push timestamps onto, and pop as needed. But, after trying it out and thinking about it a bit more, I realized that it would be hard to keep track of whether the timestamp at the top of the stack actually made sense to be undone or redone at whatever the time user pressed the button (if the first timestamp was at the top of the redo stack, it wouldn’t make sense for it to be put back in multiple lines later). So, I needed a Plan B!

Plan B came in the form of just having two individual TimeSpan elements (what I’ve been referring to as TimeStamps) that would hold the most recently placed timestamp (undo) and if the user pressed the undo button, then the removed timestamp. So, there would only be one timestamp at a time that could be undone, and it would be replaced each time the user placed another timestamp. And when the user undid a timestamp, the redo one would hold onto that until a new timestamp was placed.

Now, Plan B doesn’t make it very ideal to do larger scale edits since it only keeps track of the previously placed, but I’m hoping to implement the ability to scroll through the song to a desired place and begin editing from there. The user also has the ability to manually change the timestamps in the textbox so if they know that they were off by a small amount, they can just change it manually without having to undo or scroll back.

Next week is Spring Break and I’m hoping to make some decent progress during it. My goal is to finish the undo/redo functionality before break starts so that I am able to move on to tackling the scroll functionality. Other than that, I will likely start to connect the different parts of the application and begin to remove some of the hardcoded files/paths that I have been using.

Anyway, this was a fairly short update, and hopefully it made some sense. There aren’t any videos or sources for this update, but I have added the links to the Spotify playlists that have been my programming buddies in case you were the least bit curious after last week’s update.

As always, thanks for reading!

Lauren (3/7/2022)

Playlists:

]]>
https://laurenjp.knight.domains/uncategorized/ratlin-bog/feed/ 0
Play My Music https://laurenjp.knight.domains/uncategorized/play-my-music/ https://laurenjp.knight.domains/uncategorized/play-my-music/#respond Mon, 28 Feb 2022 16:55:11 +0000 https://laurenjp.knight.domains/?p=184 Title Song: Play My Music

Title Artist: Jonas Brothers

Song Link: Jonas Brothers – Play My Music – YouTube

Steady progress continued to be made this past week, and I have a working first version of each of the individual pieces I need (welcome screen, lyric editor, timestamping, and the actual karaoke part). There is still a bit of functionality that I need to add to each of them (as well as connecting them), but each piece currently can work on its own.

The first success this week was exporting the timestamps and lyrics to a .lrc file. LyRiCs (LRC) files are what are typically read by standard karaoke machines. Exporting in this format also means that it is easier process on the backend when a user wants to sing a song that they have already edited and timestamped. I haven’t added export functionality to the lyric editing form yet (so that they can have just a text file of their changed lyrics if they so desire), but that will be a relatively easy thing to add in the next day or so. While I don’t have a video of the exporting process, I do have a screenshot of an example .lrc file attached below.

The second success was getting a karaoke-like form working. For the moment, the two files that it is pulling data from (audio and LRC) are hardcoded so that I didn’t have to open multiple file dialogs every time I ran the program, but the data that comes from them will eventually be passed by another form. Currently all of the lyrics of the line are shown in the same color, and all at once, and I think that is how I am going to keep it unless I end up having enough time later to change it to highlight the word/syllable in a different color. But the lyrics do change on their own at the correct timestamp, so it is functional. I’ve included a video below of the karaoke screen as well as the sources that I utilized to get it working. Ignore the textbox above the lyrics on the video, that is just for testing purposes and will be removed/changed in the final product.

This was a relatively short update, but I still felt like I achieved a lot this past week. My next steps will include finishing the small bits of functionality for each of the pieces, actually making use of the trackbar by having it move to the correct timestamp when the user scrolls, and beginning to connect the individual pieces.

As always, thanks for taking the time to read my update and don’t forget to take a look at the videos below. Also, on a totally random note, if you are ever looking for some music to listen to while studying, working, or programming, I would highly recommend Celtic reels and/or jigs. Sea Shanties also work similarly (at least for me) but those typically have words/lyrics. Anyway, you probably didn’t need to know that, but I’ve listened to a lot of Celtic reels and jigs (and also a playlist called Celtic Battle Music) this past week while I was working on my project, so I thought I’d share their motivational power with others.

Lauren (2/28/22)

Sources

Videos / Files

Song: Burn Butcher Burn – Joey Batey (From The Witcher Season 2)

Also, yes, I am getting slightly sick of listening to this song so many times, but it is a relatively short song, so it makes the full testing process a lot shorter. Plus, I already have all of the information for it, so it makes the overall process shorter.

]]>
https://laurenjp.knight.domains/uncategorized/play-my-music/feed/ 0
Here Comes The Sun https://laurenjp.knight.domains/uncategorized/here-comes-the-sun/ https://laurenjp.knight.domains/uncategorized/here-comes-the-sun/#respond Sun, 20 Feb 2022 21:24:52 +0000 https://laurenjp.knight.domains/?p=174 Title Song: Here Comes The Sun

Title Artist: The Beatles

Song Link: Here Comes The Sun (2019 Mix) – YouTube

A lot of progress was made this weekend on two different parts of my application.

The first is what I am currently referring to as the “Timestamping” step in the process. This is where the user loads their audio file and then “stamps out” where each line of lyrics begins in the song. While there is still a bit that needs to be finished and finalized for this section, I was able to get the main mechanics figured out. This included having the current line of lyrics be a different color than the rest (it moves on when the user places a timestamp), storing the timestamps in an array for future reference, and changing the stop button to be a start over button instead. Since changing the color of the text required that I delete the text and then add it back with the next line colored, I also made sure the scrollbar of the lyric and timestamp textboxes remain in the same place as the text was being changed (this took more work than I thought, but it was 100% necessary). It still flickers a bit when it is updating, but it isn’t too bad. I’ve added three videos below showing this part of the application. One is what the screen looked like before I added the color indicator, one is when I added the color indicator but didn’t maintain the scrollbar position, and the other is after both were added. Hopefully you’ll be able to see how much of a difference those two features made in the overall feel of the process.

The second piece that I worked on was what I call the “Lyric Load” step. This is where the user loads in their lyric text file and is then able to edit it. They can move lyrics to different lines, change words, etc. in order to customize their experience. They can also just copy and paste the lyrics from the internet if they do not have them already in a text file. This was thankfully a relatively easy piece to create as it made for a nice break from my other homework. I’ve added a video of this below for your viewing pleasure.

My next steps are going to be to finish all of the functionality of these two pieces. This includes undo/redo functionality as well as the export option. I’m also considering adding a playlist ability that will allow the user to load multiple audio files and already timestamped lyric files in order to create a playlist of songs that they can sing through. I also will be working on the design of the actual karaoke part of the application as well as how all of the sections are going to be connected.

As always, thanks for taking the time to read through my update. I’ve listed the different sources that I used for these pieces as well as some short video demos of both of them.

Lauren (2/20/22)

Sources:

Videos:

Timestamping w/o color indicator
Timestamping w/ color indicator but moving scrollbar
Timestamping good version
Lyric Loading and Editing

]]>
https://laurenjp.knight.domains/uncategorized/here-comes-the-sun/feed/ 0