【发布时间】:2013-09-04 01:24:47
【问题描述】:
我需要将 AudioClip 序列化为一个文件,作为另一个数据的一部分 结构,不幸的是,AudioClip 似乎不是可序列化的。有没有 我可以序列化为代理的对象。我可以搬回来的东西 根据需要在 AudioClip 之间来回切换?
我尝试了这个简单的代码/类
import java.applet.AudioClip;
import java.io.FileOutputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;
import java.net.URL;
import javax.swing.JApplet;
public class RandomClass implements Serializable {
private AudioClip myAudioClip;
private int RandomInteger;
private String RandomString;
public RandomClass(String soundpath){
soundpath = soundpath.replace(" ", "%20");
soundpath = soundpath.replace("\\", "/");
try{
URL sound = new URL("file:/"+soundpath);
myAudioClip = JApplet.newAudioClip(sound);
}catch(Exception e){
e.printStackTrace();
}
}
public void serializeMe(){
try{
FileOutputStream fout = new FileOutputStream("c:\\serialized.ser");
ObjectOutputStream oos = new ObjectOutputStream(fout);
oos.writeObject(this);
oos.close();
}catch(Exception ex){
ex.printStackTrace();
}
}
public static void main(String args[]){
RandomClass d = new RandomClass("C:\\audioclip.wav");
d.serializeMe();
}
}
我得到一个 java.io.NotSerializableException: sun.applet.AppletAudioClip
我真正想要的是音频剪辑与其他成员对象或类型一起保存在单个序列化文件中。因此,每当我重新加载文件(实际上将包含这些 RandomClass 对象的 arrayList)时,我都会获得这些 RandomClass 对象中的每一个的每个数据成员,而无需将原始音频剪辑保留在硬盘上(即我想创建某种包含音频剪辑作为其数据成员的一部分的对象的存档)。我还需要能够播放音频剪辑,而无需将它们保存回 *.wav 到硬盘上。就像 VLC 可以在 zip 文件中播放整个播放列表,而无需提取每个剪辑。 有任何想法吗?
谢谢,
【问题讨论】:
-
@EJB 好吧,我还需要能够在重新加载后播放音频剪辑,我不知道如何从字节数组转到音频剪辑。我不想在能够播放剪辑之前保存到 *.wav 字节
-
为什么不呢?就是这样。
-
@EJP 我做了一些搜索,最终找到了这个image to byte array。我通过将 BufferedImage 替换为 AudioInputStream inputStream 和 ImageIO.write() 通过 AudioSystem.write() 来转换第二个示例,它似乎不起作用。说实话,我不确定我知道如何从 AudioStream 转到字节数组。
-
握住手机。 AudioInputStream 必须以文件中的字节流开始。这就是您要发送的内容。
标签: java audio serialization serializable