Reading bone position, rotation and scale

I am attempting to create my own animation format for my personal game engine project I am working on, and am unlearned on the ways of the blender API. I can navigate objects, meshes ect. using the bpy module, but I can’t figure out how it stores animation data.

From what I have been able to tell, each bone has a location, rotation and scale which is stored in an f-curve object for each frame of the animation. The bone has a local matrix to transform your vertices to “bone space”, then for each frame of the animation, your f-curve object applies another transformation.

I am at a lost of how to get this information, please help!

fcurve.evaluate(frame) or something like that.

It boggles my mind why everyone wants to create ‘my own animation format’ instead of just linking in an already written (and debugged) one…

I have looked at fcurve.evaluate(), but all that returns is an arbitrary float value that has no explicit meaning(as far as I can tell).

Edit: After looking the function up in the blender API documentation, evaluate simpy returns the fcurve position on the graph editor, how does this cross over into determining my bone position, scale and rotation?