将TargetDataLine数据编码为Ogg Vorbis文件

烟碱类

抱歉,这似乎是一个简单的问题,但这是我第一次尝试在编程中进行声音测试。

我在这里想要实现的是将通过TargetDataLine对象获得的数据编码为.ogg文件。我的起点是官方Java文档https://docs.oracle.com/javase/tutorial/sound/capturing.html

我正在使用JavaZoom的Vorbis API http://www.javazoom.net/vorbisspi/vorbisspi.html

private static void recordAudio(int id) {

    Map<String, Object> myMap = new HashMap<String, Object>();
    myMap.put("duration", 0);
    myMap.put("title", "title_test");
    myMap.put("author", "author_test");
    myMap.put("album", "album_test");
    myMap.put("date", "date_test");
    myMap.put("copyright", "copyright_test");
    myMap.put("comment", "comment_test");

    VorbisAudioFormat format = new VorbisAudioFormat(VorbisEncoding.VORBISENC, 48000.F, 16, 2, 4, 48000.F, true, myMap);
    Mixer mixer = AudioSystem.getMixer(AudioSystem.getMixerInfo()[id]);

    TargetDataLine line;
    DataLine.Info info = new DataLine.Info(TargetDataLine.class, format);
    if (!AudioSystem.isLineSupported(info)) {
        System.out.println("Line is not supported.");
    }
    try {
        line = (TargetDataLine) mixer.getLine(info);
        line.open(format);
        line.start();

        AudioInputStream ais = new AudioInputStream(line);
        File auFile = new File("path/stream_test.ogg");
        AudioFileFormat.Type fileType = VorbisFileFormatType.OGG;
        AudioSystem.write(ais, fileType, auFile);

    } catch (LineUnavailableException ex) {
        System.out.println("Line is unavailable.");
        ex.printStackTrace();
    } catch (FileNotFoundException e) {
        System.out.println("File not found.");
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }
}

通过此代码,我将在控制台中获得以下输出。

Line is not supported.
Exception in thread "main" java.lang.IllegalArgumentException: Line unsupported: interface TargetDataLine supporting format VORBISENC 48000.0 Hz, 16 bit, stereo, 4 bytes/frame, 
    at com.sun.media.sound.DirectAudioDevice.getLine(Unknown Source)
    at test_mixer.Main.recordAudio(Main.java:60)
    at test_mixer.Main.main(Main.java:35)

我尝试将enconding更改为,VorbisEncoding.PCM_SIGNED但随后控制台抛出以下错误。

Exception in thread "main" java.lang.IllegalArgumentException: could not write audio file: file type not supported: OGG
at javax.sound.sampled.AudioSystem.write(Unknown Source)
at test_mixer.Main.recordAudio(Main.java:66)
at test_mixer.Main.main(Main.java:35)
greg-449

您使用的Vorbis SPI代码基于JOrbis Ogg解码器

它仅支持读取Ogg文件,不支持编码和写入Ogg文件。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何解码Ogg vorbis文件Java?

来自分类Dev

如何使用IGraphBuilder播放Ogg Vorbis文件

来自分类Dev

通过DLNA将FLAC,Ogg Vorbis和Opus文件播放到渲染器

来自分类Dev

对于小文件大小,使用Ogg Vorbis SPI解码.ogg文件失败

来自分类Dev

在iOS中实施Ogg Vorbis时出现文件未找到问题

来自分类Dev

将分类数据编码为数值

来自分类Dev

使用元数据将Ogg Vorbis转换为MP3

来自分类Dev

将mp3转换为ogg vorbis

来自分类Dev

使用php将数据编码为json

来自分类Dev

将压缩数据编码为json字符串

来自分类Dev

URL的C#方法将数据编码为'%xx'

来自分类Dev

将数据编码为1个字节

来自分类Dev

使用Ogg Flac和Vorbis在Fedora中构建libsndfile

来自分类Dev

是否有比PNGEncoder更快的将位图数据编码为PNG的方法?

来自分类Dev

PHP如何将二进制数据编码为base 64

来自分类Dev

将数据编码为HEX,并在Python 2.7中最后得到L。为什么?

来自分类Dev

我的PHP脚本将一些文本数据编码(json)为null

来自分类Dev

有什么想法,如何将QR数据编码为png图像?

来自分类Dev

如何确定Vorbis流的长度(以秒为单位)?

来自分类Dev

如何:正确使用PHP将数据编码为JSON格式,并使用jquery / ajax请求数据

来自分类Dev

用于编写flac,ogg vorbis和mp3 id3v2元数据的命令行工具?

来自分类Dev

CloudConnect数据编码验证

来自分类Dev

Java Spark 数据编码

来自分类Dev

如何制作vorbis-tools ogg123的静态二进制构建?

来自分类Dev

如何通过 Ogg Vorbis 字节缓冲区获得采样率

来自分类Dev

如何将VRO文件编码为AVI文件

来自分类Dev

如何在JavaScript中将PCM数据编码为MP3?

来自分类Dev

如何将我的数据编码为utf-8并阅读文本

来自分类Dev

如何修复MySQL数据编码

Related 相关文章

热门标签

归档