6

我一直在尝试编写一个简单的音频开膛手,我可以用它来了解不同 CODEC 的工作方式,但我卡在了第一步,我无法让我的程序从 CD 中读取,下面的代码是我一直在尝试的使用

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.RandomAccessFile;
import java.util.Scanner;


public class learning 
{
    public static void main(String[] args) throws IOException 
    {   
        File cd = new File( "/dev/sr0" );
        RandomAccessFile rawAccess = new RandomAccessFile( cd, "r" );
        byte[] content = new byte[20];
        rawAccess.seek(19613);
        rawAccess.readFully(content);

        System.out.println(content);
    }

}

但它给了我以下错误

Exception in thread "main" java.io.IOException: Input/output error
    at java.io.RandomAccessFile.readBytes(Native Method)
    at java.io.RandomAccessFile.read(RandomAccessFile.java:355)
    at java.io.RandomAccessFile.readFully(RandomAccessFile.java:414)
    at java.io.RandomAccessFile.readFully(RandomAccessFile.java:394)
    at learning.main(learning.java:21)

我不知道为什么我会得到这个,我虽然可能 RandomFileAccess 不是正确使用的类,但我能找到的唯一东西说这应该有效

任何有关如何从 java 读取 CD 的帮助将不胜感激。

干杯丹尼尔

4

4 回答 4

3

首先,您应该安装在登录 OS Linux 的用户可以访问的目录上。例如:/mnt/cdrom 或 /media/cdrom

之后打开您的 mp3 文件或音频文件:

File cd = new File( "/dev/sr0/track1.mp3" );

或者

File cd = new File( "/dev/sr0/track1.dat" );

(不要忘记音频或 Mp3 文件的扩展名)。

于 2012-12-11T12:32:06.543 回答
0

这不完全相同,但我怀疑它会让你继续......

是否有独立于平台的方式(Java?)来读取音频 CD 的目录?

如果你不想使用内置的东西(出于教育原因),http://www.tritonus.org/是开源的,所以你可以看看他们是如何做到的。

于 2012-10-14T04:54:26.590 回答
0

这个问题有一个与您的问题相关的问题和答案:安装和卸载硬盘驱动器

根据链接的问题和接受的答案,答案是“是”和“否”。您可以为本地接口提供使用适配器模式的 Java API,但您还必须做很多事情,从而使解决方案不是纯 Java,而是混合:

  • 创建支持挂载/卸载命令的 Java 接口
  • 将接口实现为本地方法的类创建本地
  • 用 C 或其他语言实现此命令。一
  • 操作系统(Win、Mac、Linux)的实现将其打包到一个 jar 版本中
  • 提供接口实现和加载本机库的小工厂
于 2012-10-14T05:02:05.910 回答
0

如果/dev/sr0是目录,那就有问题了。请尝试将其中一个音频文件作为参数传递,例如

        File cd = new File( "/dev/sr0/track1" );

那应该工作。

于 2012-10-14T05:03:10.560 回答