1

mp3ファイル:Dからmp3タグを読み取り、txtファイルに保存したいと思います。しかし、私のコードは機能しません:( mp3ファイルで適切な位置を設定するのに問題があることを意味します:(なぜそれが機能したくないのですか?)私は余分なライブラリなしで自分でそれをしなければなりません。

#include <stdio.h>
#include <fcntl.h>
#include <unistd.h>
#include <stdlib.h>
#include <sys/stat.h>
#include <sys/types.h>

int getFileSize(const char *filename)
{
    struct stat st;
    if (stat(filename, &st) == 0)
        return st.st_size;
    return -1;
}


int main(int argc, char **argv)
{
    char *infile = "in.mp3", *outfile = "out.txt";
    int infd, bytes_read = 0, buffsize = 255;
    char buffer[255];

                infd = open(infile, O_RDONLY);
                if (infd == -1)
                    return -1;

                int outfd = open(outfile, O_WRONLY | O_TRUNC, S_IRUSR | S_IWUSR);
                if (outfd == -1)
                    return -1;

                    if(lseek(infd, -128, SEEK_END) < 0)
                        return -1;

                for(;;)
                {
                    bytes_read = read(infd, buffer, buffsize);
                    if (bytes_read > 0)
                    {
                        write(outfd, buffer, bytes_read);

                    }
                    else
                    {
                        if (bytes_read == 0)
                        {
                            if (close(infd) < 0)
                                return -1;
                            break;
                        }
                        else if (bytes_read == -1)
                        {
                            break;
                            return -1;
                        }
                    }
                }

    return 0;
}
4

1 に答える 1

1

この問題を解決するための1つのアプローチ:

使用しているID3のバージョンに応じてファイルをスキャンし(質問にはStevenが指摘した特定のバージョンは指定されていません)、タグ全体またはタグヘッダーを見つけて、そこからデコードする必要があります。

ID3v2の場合、ヘッダーシーケンスは10バイトで、次のとおりです(ID3v2仕様から)。

 ID3v2/file identifier      "ID3"
 ID3v2 version              $04 00
 ID3v2 flags                %abcd0000
 ID3v2 size             4 * %0xxxxxxx

私の提案は、ここでID3v2の仕様を見てください。作業の一部は背景調査を行っているため、第3.1章を確認してください。

ID3v1については、ここでその概要仕様を確認してください。その情報のデコードは非常に簡単で、質問へのコメントに記載されているとおりに機能します。コードを見ると、これはおそらくあなたがやりたいことです(ファイルの最後で128バイトにジャンプし、そこから読み取りを開始します)。

デコーダーをスローする前に、適切にタグ付けされたファイルがあり、使用しているタグのバージョンを確認してください。

于 2012-10-18T13:09:18.433 に答える