【问题标题】:playing WAV file over GSM modem通过 GSM 调制解调器播放 WAV 文件
【发布时间】:2013-11-04 12:48:19
【问题描述】:

我想通过 GSM 调制解调器播放 WAV 文件。这是我的示例代码

private final int BUFFER_SIZE = 8;
private File soundFile;
private AudioInputStream audioStream;
private AudioFormat audioFormat;
public void playSound(String filename) throws IOException{

    String strFilename = filename;

    try {
        soundFile = new File(strFilename);
    } catch (Exception e) {
        e.printStackTrace();
        System.exit(1);
    }

    try {
        audioStream = AudioSystem.getAudioInputStream(soundFile);
    } catch (Exception e){
        e.printStackTrace();
        System.exit(1);
    }

    audioFormat = audioStream.getFormat();

    DataLine.Info info = new DataLine.Info(SourceDataLine.class, audioFormat);

    int nBytesRead = 0;
    byte[] abData = new byte[BUFFER_SIZE];
    while (nBytesRead != -1) {
        try {
            nBytesRead = audioStream.read(abData);
        } catch (IOException e) {
            e.printStackTrace();
        }
        if (nBytesRead >= 0) {
            outputStream.write(abData, 0, nBytesRead);
            outputStream.flush();
        }
    }
}

但问题是通过串口发送的WAV文件播放速度非常快。我不知道有什么问题。这是我的 WAV 文件说明:

ULAW 8000.0 Hz, 8 bit, mono, 1 bytes/frame, Audio Sample Rate 8Khz.

谁能帮我解决这个问题?

【问题讨论】:

  • 您在哪里创建输出流?它可能有错误的采样率。

标签: java serial-port gsm modem


【解决方案1】:

我会检查以下内容 - 特别是 #3。

  1. Synchronization
  2. AudioFormat
  3. JSSRC Resampling Library

【讨论】:

    【解决方案2】:

    在“outputStream.flush();”之后睡一会儿怎么样
    可能是 Thread.sleep(50)

    【讨论】:

    • 睡眠时间有计算吗??
    • 这绝对不是这样做的方法。即使您可以通过这种方式在发送端获得稳定的采样率(除非您有实时操作系统,否则您无法做到……),接收端期望一定的采样率,充其量您会得到非常糟糕的声音如果您在发送端以这种方式限制采样率,则质量。
    【解决方案3】:

    我认为您的问题出在接收端并进行播放。在那里设置音频采样率以匹配您的音频数据。还要确保启用了串行端口流量控制(或者如果您获得正确的播放速度,请查看它,但部分音频丢失)。您知道文件的采样率,所以将接收端设置为具有相同的采样率(和其他参数)。

    如果接收端遥不可及或无法更改,则需要更改发送端的采样率以匹配接收器的预期。最简单的方法是使用一些音频编辑器(例如SoX,它是命令行工具)来更改音频文件。你应该先试试这个,只是为了检查你能以正确的音频格式获得良好的播放效果。

    更灵活的方法是在您的程序中执行此操作,因此您可以输入任何音频文件,然后它将其转换为正确的采样率并正确播放。但这当然也更复杂。寻找一个库,例如 Elliott Frisch 在其他答案中推荐的 the one

    【讨论】:

    • "...您需要更改发送端的采样率以匹配接收器的期望" - 我以为您将调制解调器置于语音模式,然后播放文件到调制解调器。调制解调器的播放必须与发送调制解调器的设置方式相匹配。我不认为被叫方的设备与它有任何关系。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多