nega0 / pianobarfly

pandora2[mp3|m4a]
https://github.com/nega0/pianobarfly
Other
62 stars 31 forks source link

Could not overwrite the audio file (18:Invalid cross-device link). #30

Closed bryangarza closed 12 years ago

bryangarza commented 12 years ago

I am getting the same error as Issue 19. Seeing as that one is months old I have started a new one.

Could not overwrite the audio file (18:Invalid cross-device link).
Failed to write the tag.

Everything was running smoothly until I deleted the contents of ~/music -- my audio_file_dir. After that, pianobarfly errors at the rename function in fly_id3.c

nega0 commented 12 years ago

Use the "develop" branch, or either my "nega" or "mkstemp" branch.

bryangarza commented 12 years ago

I've tried all three of those branches, but they all give the same error.

nega0 commented 12 years ago

well then you'll need to provide more details. do a debug build, give details about your filesystem, etc.

bryangarza commented 12 years ago

Okay, I'lldo that. By the way, your mkstemp branch doesn't give any errors, but it doesn't tag the file.

bryangarza commented 12 years ago

running Arch...

~ 85 mount -l                                            
proc on /proc type proc (rw,nosuid,nodev,noexec,relatime)
sys on /sys type sysfs (rw,nosuid,nodev,noexec,relatime)
/dev on /dev type devtmpfs (rw,nosuid,relatime,size=443696k,nr_inodes=110924,mode=755)
run on /run type tmpfs (rw,nosuid,nodev,relatime,mode=755)
/dev/sda3 on / type ext4 (rw,relatime,user_xattr,acl,barrier=1,data=ordered)
devpts on /dev/pts type devpts (rw,nosuid,noexec,relatime,gid=5,mode=620,ptmxmode=000)
shm on /dev/shm type tmpfs (rw,nosuid,nodev,relatime)
tmpfs on /tmp type tmpfs (rw,nosuid,nodev,relatime)
/dev/sda4 on /home type ext4 (rw,relatime,user_xattr,acl,barrier=1,data=ordered)
/dev/sda1 on /boot type ext2 (rw,relatime,user_xattr,acl,barrier=1)
~ 85 df
Filesystem     1K-blocks    Used Available Use% Mounted on
rootfs           7662396 5585476   1692568  77% /
/dev              443696       0    443696   0% /dev
run               446636     192    446444   1% /run
/dev/sda3        7662396 5585476   1692568  77% /
shm               446636       0    446636   0% /dev/shm
tmpfs             446636    3284    443352   1% /tmp
/dev/sda4      304165444 5323344 283616500   2% /home
/dev/sda1          99590   18106     76265  20% /boot
~ 85 uname -a
Linux bryan 3.3.5-1-ARCH #1 SMP PREEMPT Mon May 7 19:57:51 CEST 2012 x86_64 GNU/Linux
~ 85 

Running the debug build...


~ 85 cd pianobarfly-nega0-mkstemp/
~/pianobarfly-nega0-mkstemp 9 ./pianobarfly
Welcome to pianobarfly (2011.11.12)! Press ? for a list of commands.
(i) Login... Ok.
(i) Get stations... Ok.
         0) q   Camille Saint-Saëns Radio
         1) q S Classical- Mostly Romantic 
         2) q   Claude Debussy Radio
         3) q   Danse Macabre, Symphonic Poem In G Minor, Op. 40: Danse Macabre
         4) q   Franz Liszt Radio
         5)  Q  gnizamasinayrb's QuickMix
         6) q   Harry Gregson-Williams Radio
         7) q   How To Train Your Dragon, Film Score: Counter Attack Radio
         8) q   Johann Sebastian Bach Radio
         9) q   Johannes Brahms Radio
        10) q   Max Richter Radio
        11) q   Omnia Circum
        12) q   Philip Glass Radio
        13) q   Piano
        14) q   Piano Quartet No. 3 in C minor ("Werther"), Op. 60: III. Andant
        15) q   Richard Wagner Radio
        16) q   Ride Of The Valkyries Radio
        17) q   Rustle Of Spring, Op 32/3: Rustle Of Spring Radio
        18) q   Suite For Solo Cello No. 1 In G Major, Bwv 1007: I. Prelude (Tr
        19) q   Symphonic Radio
        20) q   Symphony No. 1 In C Minor, Op. 11: IV. Allegro Con Fuoco Radio
        21) q   Ulster Orchestra Radio
        22) q   Violin Concerto: III Radio
        23) q   Xena, Warrior Princess, Vol. 2, Television Score: Callisto Beco
[?] Select station: 13
|>  Station Piano
(i) Receiving new playlist... Ok.
|>  Fantasias (7) for piano, Op. 116 by Brahms, Johannes on Berlin Philharmonic Orchestra, Brahms: Concertos For Piano No. 1 & 2, Fantasia Op. 116 <3
The track and disc numbers were not included in the album explorer page (1:No match).
The track and disc numbers will not be added to the tag.
|>  Grande Tarantelle, For 2 Pianos, Op. 67 (RO 260) by Gottschalk, Louis Moreau on Hot Springs Music Festival, Gottschalk: A Night In The Tropics <3
The track and disc numbers were not included in the album explorer page (1:No match).
The track and disc numbers will not be added to the tag.
#   -04:15/06:20   * Recording

Here is the strace output: http://sprunge.us/TYWB

nega0 commented 12 years ago

If you're using my "mkstemp" branch, you should (almost) never see

Could not overwrite the audio file (18:Invalid cross-device link).
Failed to write the tag.

because the tmp file is always in your "audio_file_dir". If you're not seeing the tag I bet it's because you're using an id3lib based utility to try and read it. Despite its documentation, id3lib doesn't handle id3 v2.4 tags well. As an example, id3v2 uses id3lib and mpg123 (I think) uses its own:

[maru:~/Music/pianobarfly/Arkaea/Years_In_The_Darkness] id3v2 --list Arkaea-My_Redemption.mp3
Arkaea-My_Redemption.mp3: No ID3 tag
[maru:~/Music/pianobarfly/Arkaea/Years_In_The_Darkness] mpg123 -t Arkaea-My_Redemption.mp3
High Performance MPEG 1.0/2.0/2.5 Audio Player for Layers 1, 2 and 3
    version 1.12.1; written and copyright by Michael Hipp and others
    free software (LGPL/GPL) without any warranty but with best wishes

Playing MPEG stream 1 of 1: Arkaea-My_Redemption.mp3 ...
Title:   My Redemption                   Artist: Arkaea
Album:   Years In The Darkness
MPEG 1.0 layer III, 192 kbit/s, 44100 Hz joint-stereo

[4:14] Decoding of Arkaea-My_Redemption.mp3 finished.
[maru:~/Music/pianobarfly/Arkaea/Years_In_The_Darkness] 

You can see what version of ID3 v2 tag has been written to the file by getting a hexdump of the file.


[maru:~/Music/pianobarfly/Arkaea/Years_In_The_Darkness] xxd Arkaea-My_Redemption.mp3|head
0000000: 4944 3304 0000 0003 5c4c 5450 4531 0000  ID3.....\LTPE1..
0000010: 0007 0000 0041 726b 6165 6154 414c 4200  .....ArkaeaTALB.
0000020: 0000 1600 0000 5965 6172 7320 496e 2054  ......Years In T
0000030: 6865 2044 6172 6b6e 6573 7354 4954 3200  he DarknessTIT2.
0000040: 0000 0e00 0000 4d79 2052 6564 656d 7074  ......My Redempt
0000050: 696f 6e54 5243 4b00 0000 0200 0000 3954  ionTRCK.......9T
0000060: 504f 5300 0000 0200 0000 3141 5049 4300  POS.......1APIC.
0000070: 035b 6100 0000 696d 6167 652f 6a70 6567  .[a...image/jpeg
0000080: 0003 00ff d8ff e000 104a 4649 4600 0101  .........JFIF...
0000090: 0000 0100 0100 00ff db00 4300 0806 0607  ..........C.....
[maru:~/Music/pianobarfly/Arkaea/Years_In_The_Darkness] 

In an ID3 v2.x.y tag, the first three bytes always ASCII "ID3". The next two bytes are "x" and "y" from the version. In this case hex values 4 and 0, which make this an ID3 v2.4.0 tag. This is the tag version that libid3tag writes. (Also in that hexdump you can see the ASCII values for the various tag fields, and the embedded JPEG cover.)

Anyway, my "mkstemp" branch should be doing the right thing, just not what you expect. The "develop" branch should be doing the right thing (writing an ID3 v2.4.0 tag, and using a tmpfile in the current working directory), just not what you expect.

bryangarza commented 12 years ago

I understand. Thanks for your explanation. I thought the tags weren't there because I was checking with id3v2 --list. For now I'm using your mkstemp branch.