Cool - Looks like a nice enhancement for the game.
For replacing music - if you are working with a pack that already has music, all you'll need to do is replace the .ogg files. If you are creating a new pack and the groundwork for music replacement is not done yet, it's a lot less straightforward than graphics. You'll need to know 6502 Assembly Language and it helps if the game you are working on is thoroughly documented.
For adding frames - it's tricky, but you don't need to be a programmer to do it. Basically, you will need to first have the emulator automatically create a hires.txt file. Since you have already created packs, it looks like you know how to do this already. Then, go into the hires.txt file and you will find that the file begins with a list of .png files. After that list, but before the first "#Chr_0.png" tag, insert a condition, for frame ranges. An example is below:
The "40" number refers to how many frames you want in the overall animation (you can change this if you want). For the second number, most of the time, you will just want to have it increase in value from zero by the same amount (i.e. first zero, then 5, then 10, then 15 - or zero, then 10, 20, 30, etc). But, there may be some situations where you may want uneven increases in value. Experiment for the look you want.
After these lines, you should type the information that actually represents the graphics you are trying to replace. An example is below:
The information in brackets needs to match exactly with whatever you typed after "<condition>" in the first example.
For the <tile> number (29 in this example) - this will depend on how many image files you have in your pack. At the start of the instructions, I mentioned that the automatically generated hires.txt file creates a list of .png files at the start of the pack. Count how many of these exist starting with zero. If Chr_29 has the new graphics you would like to use, "29" is the number you want. If Chr_3 has the new graphics you want, use "3." You can also add your own .png file as long as you add it to the bottom of the .png list and number it in the condition appropriately.
The next two numbers after the "tile" number represent the tile or data sprite information you would like to replace. You can obtain this by starting the game in Mesen, navigating to "Debug," then "PPU Viewer." If you are trying to replace a tile, navigate to "Nametable Viewer." If you are trying to replace a sprite, go to "Sprite Viewer." Hover over the area you want to replace, and select "Copy Tile (HD Pack Format)" Then, move back to your hires.txt file and paste the information after the <tile> information.
The next two numbers represent the x and y coordinates in the .png file for the proper replacement graphics. For example, if frame three is located at the x coordinate of 144 and the y coordinate of 224, you would use "144,224."
The next number indicates the brightness you would like to use (most of the time, a value of "1" is fine).
The last letter determines if you want to replace all palettes with the custom graphics. N represents No, and Y, represents Yes. Most of the time, "N" is fine.
A couple of notes below:
-You will not be able to force a certain frame as the starting or ending frame. It's a bit random depending on which the frame the game is displaying at any given moment. As a result, this method may work for a looping animation (like running). But, it won't really work well for something that has a firm start and end (like an attack animation).
-Handling graphics that are mirrored can get to be a bit challenging. For this, you'll need to use the "hmirror" or "vmirror" conditions - but that would probably be another separate tutorial entirely.
-You will need to repeat the process above for all tiles/sprites that make up the target graphics you are trying to replace. For example, if there is a large wall that is made of 5 tiles, you can type the condition lines just once. But, you will need to repeat the example given above for the tile replacement portion 5 times.
-You will also need to repeat the process if you are trying to replace something that already has multiple frames (like a running animation). For example, if your character has two frames for the running animation, the second part of the example would need to be done twice.