java - (剪辑)和 DataLine.Info 代表什么...?

标签 java audio

我从我的一位 friend 那里得到了这个代码。

import java.io.*;
import javax.sound.sampled.*;
public class xx
{
    public static void main(String args[])
    {
        try
        {
            File f=new File("mm.wav");
            AudioInputStream a=AudioSystem.getAudioInputStream(f);
            AudioFormat au=a.getFormat();
            DataLine.Info di=new DataLine.Info(Clip.class,au);
            Clip c=(Clip)AudioSystem.getLine(di);
            c.open(a);
            c.start();
        }
        catch(Exception e)
        {
            System.out.println("Exception caught ");
        }
    }
}

但我不明白这一行的含义 Cilp c=(Clip)AudioSystem.getLine(di); (剪辑)代表什么......? 我的第二个问题是 DataLine 是什么,它是一个接口(interface)吗? DataLine.Info 这个语句的含义是什么?...?

最佳答案

DataLine 是一个包含嵌套类“Info”的接口(interface)。这里的声明:

DataLine.Info di = ...

创建 Info 类的新实例,该实例在 DataLine 类中定义。

语句(Clip)就是我们所说的强制转换。它用于将对象从一种类型转换为另一种类型。 AudioSystem.getLine(di) 方法返回 Line 类型的对象。所以基本上,你的 friend 将返回的对象转换为 Clip,用于实例化对象 c。 这是允许的,不会产生错误,因为 c 是 Clip 类型,它扩展了 DataLine,而 DataLine 本身扩展了 Line。

希望这有帮助!

关于java - (剪辑)和 DataLine.Info 代表什么...?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4560291/

相关文章:

javascript - 使用 setInterval 启动两个函数并让它们立即启动,没有延迟

java - 使用 modInverse 计算大数的 C(n, k) 组合

java - Akka - GC 开销超出限制

c# - Unity3d:音频处理或计算应该调用哪个类?

Android,在屏幕上看到 View 时播放声音

java - 在Android中将语音录制为mp3

javascript - 使用 HTML5 网络音频 API 提取 mp3 文件的歌曲频率

java - 从 Java 8 迁移到 Java 11。在运行时,是否可以从 Java 8 中编译的库中的类文件访问 JDK 内部 API?

JAVA MYSQL用户权限

java - 尝试使用 lucene 获得更多匹配