Ouch! I agree that this is likely caused by the 2GiB limit.
The solution which I would try first is to re-build arecord and lame to use 64 bit file pointers. GNU libc compiles with 32 bit file pointers on 32 bit systems unless explicitly told to use 64 bit file pointers. I guess this is a performance thing.
To tell GNU libc that you want to use 64 bit file pointers is easy - just define the symbol _FILE_OFFSET_BITS as 64 at compile time.
In the case of the ALSA utilities package which contains arecord, you can do this by passing an option when you do the configure stage of the build process, like this:
Code:
./configure CFLAGS=-D_FILE_OFFSET_BITS=64
I am using kubuntu, so fetching the source was just a matter of using the command:
Code:
apt-get source alsa-utils
The build process actually failed (very unusual for a package retrieved in this way), but it build enough to have an arecord binary which works. You can test to see if it is using 64 bit file pointers like this (from the directory where the new arecord is made):
Code:
strace ./arecord -d 1 output.wav 2>&1 | grep open |grep output.wav
You should see something like this:
Code:
open("output.wav", O_WRONLY|O_CREAT|O_LARGEFILE, 0644) = 5
If the O_LARGEFILE is absent, you are still using 32 bit file pointers.
I didn't try the same thing with lame, but I imagine you can use a similar process.
Good luck!